From ddfec0267815a6986b8e02aae5f31b88e15c087a Mon Sep 17 00:00:00 2001 From: zahidch052 Date: Sat, 11 Jan 2020 13:42:21 +0500 Subject: [PATCH 01/57] inital board login cempleted --- android/app/build.gradle | 2 +- android/app/src/debug/AndroidManifest.xml | 2 +- android/app/src/main/AndroidManifest.xml | 4 +- .../MainActivity.java | 2 +- android/app/src/profile/AndroidManifest.xml | 2 +- lib/Board.dart | 146 +++++++++ lib/main.dart | 301 +++++++++++++----- lib/utils/Constants.dart | 8 + pubspec.yaml | 5 +- 9 files changed, 386 insertions(+), 86 deletions(-) rename android/app/src/main/java/com/firekamp/{sudoku_brain => sudokubrain}/MainActivity.java (90%) create mode 100644 lib/Board.dart create mode 100644 lib/utils/Constants.dart diff --git a/android/app/build.gradle b/android/app/build.gradle index 0d422c6c3..db820a687 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -33,7 +33,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.firekamp.sudoku_brain" + applicationId "com.firekamp.sudokubrain" minSdkVersion 16 targetSdkVersion 28 versionCode flutterVersionCode.toInteger() diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml index 16128259e..d02f31ad8 100644 --- a/android/app/src/debug/AndroidManifest.xml +++ b/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,5 @@ + package="com.firekamp.sudokubrain"> diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 238016c49..e13144b32 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ + package="com.firekamp.sudokubrain"> + package="com.firekamp.sudokubrain"> diff --git a/lib/Board.dart b/lib/Board.dart new file mode 100644 index 000000000..a94a8972f --- /dev/null +++ b/lib/Board.dart @@ -0,0 +1,146 @@ +import 'dart:collection'; + +class Conflict { + static HashSet getConflicts(List> grid) { + HashSet result = new HashSet(); + computeRowConflicts(grid, result); + computeColConflicts(grid, result); + computeBlockConflicts(grid, result); + return result; + } + + static void computeRowConflicts(List> grid, HashSet res) { + for (int r = 0; r < 9; r++) { + HashMap usedNumToRowCol = new HashMap(); + for (int c = 0; c < 9; c++) { + int newNum = grid[r][c]; + if (newNum == 0) continue; + if (usedNumToRowCol.containsKey(newNum)) { + res.add(new RowCol(r, c)); + res.add(usedNumToRowCol[newNum]); + } else + usedNumToRowCol[newNum] = new RowCol(r, c); + } + } + } + + static void computeColConflicts(List> grid, HashSet res) { + for (int c = 0; c < 9; c++) { + HashMap usedNumToRowCol = new HashMap(); + for (int r = 0; r < 9; r++) { + int newNum = grid[r][c]; + if (newNum == 0) continue; + if (usedNumToRowCol.containsKey(newNum)) { + res.add(new RowCol(r, c)); + res.add(usedNumToRowCol[newNum]); + } else + usedNumToRowCol[newNum] = new RowCol(r, c); + } + } + } + + static void computeBlockConflicts(List> grid, HashSet res) { + blockConf(0, 0, grid, res); + blockConf(0, 3, grid, res); + blockConf(0, 6, grid, res); + blockConf(3, 0, grid, res); + blockConf(3, 3, grid, res); + blockConf(3, 6, grid, res); + blockConf(6, 0, grid, res); + blockConf(6, 3, grid, res); + blockConf(6, 6, grid, res); + } + + static void blockConf( + int row, int col, List> grid, HashSet res) { + HashMap usedNumToRowCol = new HashMap(); + for (int r = row; r < row + 3; r++) { + for (int c = col; c < col + 3; c++) { + int newNum = grid[r][c]; + if (newNum == 0) continue; + if (usedNumToRowCol.containsKey(newNum)) { + res.add(new RowCol(r, c)); + res.add(usedNumToRowCol[newNum]); + } else + usedNumToRowCol[newNum] = new RowCol(r, c); + } + } + } +} + +class RowCol { + int r; + int c; + + RowCol(int r, int c) { + this.r = r; + this.c = c; + } + + @override + String toString() => "r:" + r.toString() + ",c:" + c.toString(); + + @override + // TODO: implement hashCode + int get hashCode => 10 * r + c; + + @override + bool operator ==(other) { + // TODO: implement == + return (this.r == other.r) && (this.c == other.c); + } +} + +void main() { + List> g1 = [ + [1, 0, 0, 0, 1, 0, 5, 0, 1], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [9, 0, 4, 0, 0, 0, 0, 0, 9] + ]; + print("g1 conflicts: " + Conflict.getConflicts(g1).toString()); + + List> g2 = [ + [1, 0, 0, 0, 0, 0, 0, 0, 9], + [0, 0, 0, 0, 0, 0, 0, 0, 5], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [4, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 9], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 0, 0, 0, 9] + ]; + print("g2 conflicts: " + Conflict.getConflicts(g2).toString()); + + List> g3 = [ + [9, 3, 0, 0, 0, 0, 0, 0, 0], + [0, 9, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 9, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 2], + [0, 0, 0, 0, 0, 0, 0, 2, 0], + [0, 0, 0, 0, 0, 0, 1, 0, 1] + ]; + print("g3 conflicts: " + Conflict.getConflicts(g3).toString()); + + List> g4 = [ + [1, 2, 3, 4, 5, 6, 7, 8, 9], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [4, 0, 0, 0, 0, 0, 0, 0, 0], + [5, 0, 0, 0, 0, 0, 0, 0, 0], + [6, 0, 0, 0, 0, 0, 0, 0, 0], + [7, 0, 0, 0, 0, 0, 1, 9, 8], + [8, 0, 0, 0, 0, 0, 4, 2, 6], + [9, 0, 0, 0, 0, 0, 5, 7, 3] + ]; + print("g4 conflicts: " + Conflict.getConflicts(g4).toString()); +} diff --git a/lib/main.dart b/lib/main.dart index 5a7af455f..e5089dada 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,26 +1,25 @@ +import 'dart:collection'; + import 'package:flutter/material.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; + +import 'Board.dart'; -void main() => runApp(MyApp()); +void main() => runApp(new MyApp()); class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { - return MaterialApp( - title: 'Flutter Demo', - theme: ThemeData( - // This is the theme of your application. - // - // Try running your application with "flutter run". You'll see the - // application has a blue toolbar. Then, without quitting the app, try - // changing the primarySwatch below to Colors.green and then invoke - // "hot reload" (press "r" in the console where you ran "flutter run", - // or simply save your changes to "hot reload" in a Flutter IDE). - // Notice that the counter didn't reset back to zero; the application - // is not restarted. - primarySwatch: Colors.blue, + return new MaterialApp( + title: '', + theme: ThemeData.dark().copyWith( + primaryColor: Color(kPrimaryColor), + scaffoldBackgroundColor: Color(kPrimaryColor), + ), + home: MyHomePage( + title: 'SudokuBrain', ), - home: MyHomePage(title: 'Flutter Demo Home Page'), ); } } @@ -28,84 +27,232 @@ class MyApp extends StatelessWidget { class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); - // This widget is the home page of your application. It is stateful, meaning - // that it has a State object (defined below) that contains fields that affect - // how it looks. - - // This class is the configuration for the state. It holds the values (in this - // case the title) provided by the parent (in this case the App widget) and - // used by the build method of the State. Fields in a Widget subclass are - // always marked "final". - final String title; @override - _MyHomePageState createState() => _MyHomePageState(); + HomePageState createState() => new HomePageState(); } -class _MyHomePageState extends State { - int _counter = 0; +class HomePageState extends State { + bool isShowRowBorder = false; + bool isShowColumnBorder = false; + bool isCellPressed = false; + + int row = 0; + int col = 0; + + static String toImg(int s) { +// return 'set2/' + s.toString() + '.png'; + } + + List> imgList = [ + [0, 0, 0, 2, 6, 0, 7, 0, 1], + [6, 8, 0, 0, 7, 0, 0, 9, 0], + [1, 9, 0, 0, 0, 4, 5, 0, 0], + [8, 2, 0, 1, 0, 0, 0, 4, 0], + [0, 0, 4, 6, 0, 2, 9, 0, 0], + [0, 5, 0, 0, 0, 3, 0, 2, 8], + [0, 0, 9, 3, 0, 0, 0, 7, 4], + [0, 4, 0, 0, 5, 0, 0, 3, 6], + [7, 0, 3, 0, 1, 8, 0, 0, 0], + ]; + + List> initList = [ + [0, 0, 0, 2, 6, 0, 7, 0, 1], + [6, 8, 0, 0, 7, 0, 0, 9, 0], + [1, 9, 0, 0, 0, 4, 5, 0, 0], + [8, 2, 0, 1, 0, 0, 0, 4, 0], + [0, 0, 4, 6, 0, 2, 9, 0, 0], + [0, 5, 0, 0, 0, 3, 0, 2, 8], + [0, 0, 9, 3, 0, 0, 0, 7, 4], + [0, 4, 0, 0, 5, 0, 0, 3, 6], + [7, 0, 3, 0, 1, 8, 0, 0, 0], + ]; - void _incrementCounter() { + static int count = 0; + static int cursor = 0; + HashSet conflicts = new HashSet(); + + void changeConflicts() { + conflicts = Conflict.getConflicts(imgList); + } + + static void changeCursor(i) { + cursor = i; + } + + // Resets the whole board. + void reset() { setState(() { - // This call to setState tells the Flutter framework that something has - // changed in this State, which causes it to rerun the build method below - // so that the display can reflect the updated values. If we changed - // _counter without calling setState(), then the build method would not be - // called again, and so nothing would appear to happen. - _counter++; + imgList = new List>.generate( + 9, (i) => new List.from(initList[i])); + changeConflicts(); }); } - @override - Widget build(BuildContext context) { - // This method is rerun every time setState is called, for instance as done - // by the _incrementCounter method above. - // - // The Flutter framework has been optimized to make rerunning build methods - // fast, so that you can just rebuild anything that needs updating rather - // than having to individually change instances of widgets. - return Scaffold( - appBar: AppBar( - // Here we take the value from the MyHomePage object that was created by - // the App.build method, and use it to set our appbar title. - title: Text(widget.title), - ), - body: Center( - // Center is a layout widget. It takes a single child and positions it - // in the middle of the parent. + Color getHighlightColor(int r, int c) { + bool isConflict = conflicts.contains(new RowCol(r, c)); + bool isChangable = initList[r][c] == 0; + + if(r==row && c==col){ + return Color(kBoardCellSelected); + } + + if (isConflict && !isChangable) + return Colors.red[900]; + else if (isConflict) + return Colors.red[100]; + else if (!isChangable) + return Color(kBoardPreFilled); + else + return Color(kBoardCellEmpty); + } + + List getTableRowLst() { + List lst = new List(); + for (int r = 0; r < 9; r++) { + lst.add(getTableRow(r)); + } + return lst; + } + + TableRow getTableRow(r) { + if (r == 3 || r == 6) { + isShowRowBorder = true; + } else { + isShowRowBorder = false; + } + List lst = new List(); + for (int c = 0; c < 9; c++) { + if (c == 3 || c == 6) { + isShowColumnBorder = true; + } else { + isShowColumnBorder = false; + } + + lst.add(new Container( + height: 36.0, + color: getHighlightColor(r, c), child: Column( - // Column is also a layout widget. It takes a list of children and - // arranges them vertically. By default, it sizes itself to fit its - // children horizontally, and tries to be as tall as its parent. - // - // Invoke "debug painting" (press "p" in the console, choose the - // "Toggle Debug Paint" action from the Flutter Inspector in Android - // Studio, or the "Toggle Debug Paint" command in Visual Studio Code) - // to see the wireframe for each widget. - // - // Column has various properties to control how it sizes itself and - // how it positions its children. Here we use mainAxisAlignment to - // center the children vertically; the main axis here is the vertical - // axis because Columns are vertical (the cross axis would be - // horizontal). - mainAxisAlignment: MainAxisAlignment.center, children: [ - Text( - 'You have pushed the button this many times:', + Visibility( + visible: isShowRowBorder, + child: Divider( + color: Color(kPrimaryColor), + height: 1.0, + thickness: 2.0, + ), ), - Text( - '$_counter', - style: Theme.of(context).textTheme.display1, + InkWell( + onTap: () { + print('board cell:[$r][$c]'); + if (initList[r][c] == 0) { + setState(() { + row = r; + col = c; + }); + } + }, + child: Row( + children: [ + Visibility( + visible: isShowColumnBorder, + child: Container( + height: 35.0, + width: 2.0, + color: Color(kPrimaryColor), + ), + ), + Text( + imgList[r][c]==0? '':'${imgList[r][c]}', + style: TextStyle( + fontSize: 20.0, color: Color(kBoardTextColor)), + ) + ], + ), ), + ], ), - ), - floatingActionButton: FloatingActionButton( - onPressed: _incrementCounter, - tooltip: 'Increment', - child: Icon(Icons.add), - ), // This trailing comma makes auto-formatting nicer for build methods. + )); + } + return new TableRow(children: lst); + } + + List getKeyRowlst() { + List lst = new List(); + lst.add(getKeyRow(0)); + lst.add(getKeyRow(5)); + return lst; + } + + TableRow getKeyRow(int c) { + List lst = new List(); + for (int i = 0; i <= 4; i++) { + Color containerColor = Color(kPrimaryColor); + if (cursor == i + c) containerColor = Color(kNumPadBorder); + lst.add( + new Container( + color: containerColor, + child: InkWell( + onTap: () { + print((i + c).toString()); + setState(() { + changeCursor(i + c); + + imgList[row][col] = i + c; + changeConflicts(); + }); + }, + child: Center( + child: Text( + '${(i + c).toString()}', + style: TextStyle(fontSize: 30.0), + ), + ), + ), + ), + ); + } + return new TableRow(children: lst); + } + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Scaffold( + backgroundColor: Color(kPrimaryColor), + body: Column(children: [ + Container( + height: 40.0, + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Icon(Icons.settings, size: 25.0), + Text('00:00',style: TextStyle(fontSize: 19.0),), + Icon(Icons.pause, size: 30.0), + ], + ), + ), + Card( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(20.0), + ), + child: Table( + children: getTableRowLst(), // main board + border: new TableBorder.all(color: Color(kPrimaryColor)), + ), + ), + Padding( + padding: new EdgeInsets.only(top: 40.0), + child: new Table( + children: getKeyRowlst(), + border: new TableBorder.all( + color: Color(kNumPadBorder), + ), + )) + ])), ); } } diff --git a/lib/utils/Constants.dart b/lib/utils/Constants.dart new file mode 100644 index 000000000..d7faa9d18 --- /dev/null +++ b/lib/utils/Constants.dart @@ -0,0 +1,8 @@ + +const kPrimaryColor = 0xFF220E4A; +const kBoardTextColor = 0xFF737272; +const kBoardCellSelected = 0xFF80C3FF; +const kBoardCellEmpty = 0xFFFFF3D2; +const kBoardBorder = 0xFFE2E6E7; +const kBoardPreFilled = 0xFFFCD0A3; +const kNumPadBorder = 0xFFABDCFF; diff --git a/pubspec.yaml b/pubspec.yaml index b588f9d54..7ae1378eb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -41,9 +41,8 @@ flutter: uses-material-design: true # To add assets to your application, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg +# assets: +# - set2/0.png # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware. From bc0dcef3e373f49f9c4f7758c7bd0a8a949c8b4b Mon Sep 17 00:00:00 2001 From: zahidch052 Date: Tue, 14 Jan 2020 09:48:07 +0500 Subject: [PATCH 02/57] json file integration --- assets/brain.json | 222 ++++++++++++++++++++++++++++++++++++++++++++++ lib/Board.dart | 51 ----------- lib/main.dart | 118 +++++++++++++++++------- pubspec.yaml | 4 +- 4 files changed, 308 insertions(+), 87 deletions(-) create mode 100644 assets/brain.json diff --git a/assets/brain.json b/assets/brain.json new file mode 100644 index 000000000..c98a3843d --- /dev/null +++ b/assets/brain.json @@ -0,0 +1,222 @@ +{ + "test": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5 + ], + "test1": [ + [0,1,2], + [0,1,2], + [0,1,2] + + ], + "easy": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5 + ], + [ + 0, + 3, + 0, + 0, + 0, + 6, + 7, + 8, + 9 + ], + [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 3, + 0 + ], + [ + 0, + 0, + 3, + 4, + 6, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 8, + 9, + 0, + 0, + 2, + 0 + ], + [ + 7, + 0, + 0, + 3, + 1, + 2, + 0, + 5, + 6 + ], + [ + 0, + 2, + 0, + 5, + 7, + 4, + 0, + 6, + 8 + ], + [ + 6, + 4, + 0, + 0, + 0, + 0, + 0, + 7, + 1 + ], + [ + 0, + 7, + 0, + 0, + 0, + 1, + 5, + 0, + 0 + ] + ], + "difficulty": "easy", + "easy_solution": [ + [ + 8, + 6, + 2, + 7, + 3, + 9, + 1, + 4, + 5 + ], + [ + 4, + 3, + 1, + 2, + 5, + 6, + 7, + 8, + 9 + ], + [ + 9, + 5, + 7, + 1, + 4, + 8, + 6, + 3, + 2 + ], + [ + 2, + 8, + 3, + 4, + 6, + 5, + 9, + 1, + 7 + ], + [ + 5, + 1, + 6, + 8, + 9, + 7, + 4, + 2, + 3 + ], + [ + 7, + 9, + 4, + 3, + 1, + 2, + 8, + 5, + 6 + ], + [ + 1, + 2, + 9, + 5, + 7, + 4, + 3, + 6, + 8 + ], + [ + 6, + 4, + 5, + 9, + 8, + 3, + 2, + 7, + 1 + ], + [ + 3, + 7, + 8, + 6, + 2, + 1, + 5, + 9, + 4 + ] + ] +} diff --git a/lib/Board.dart b/lib/Board.dart index a94a8972f..11f959fd8 100644 --- a/lib/Board.dart +++ b/lib/Board.dart @@ -92,55 +92,4 @@ class RowCol { } void main() { - List> g1 = [ - [1, 0, 0, 0, 1, 0, 5, 0, 1], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [9, 0, 4, 0, 0, 0, 0, 0, 9] - ]; - print("g1 conflicts: " + Conflict.getConflicts(g1).toString()); - - List> g2 = [ - [1, 0, 0, 0, 0, 0, 0, 0, 9], - [0, 0, 0, 0, 0, 0, 0, 0, 5], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [4, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 9], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [1, 0, 0, 0, 0, 0, 0, 0, 9] - ]; - print("g2 conflicts: " + Conflict.getConflicts(g2).toString()); - - List> g3 = [ - [9, 3, 0, 0, 0, 0, 0, 0, 0], - [0, 9, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 9, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 2], - [0, 0, 0, 0, 0, 0, 0, 2, 0], - [0, 0, 0, 0, 0, 0, 1, 0, 1] - ]; - print("g3 conflicts: " + Conflict.getConflicts(g3).toString()); - - List> g4 = [ - [1, 2, 3, 4, 5, 6, 7, 8, 9], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [4, 0, 0, 0, 0, 0, 0, 0, 0], - [5, 0, 0, 0, 0, 0, 0, 0, 0], - [6, 0, 0, 0, 0, 0, 0, 0, 0], - [7, 0, 0, 0, 0, 0, 1, 9, 8], - [8, 0, 0, 0, 0, 0, 4, 2, 6], - [9, 0, 0, 0, 0, 0, 5, 7, 3] - ]; - print("g4 conflicts: " + Conflict.getConflicts(g4).toString()); } diff --git a/lib/main.dart b/lib/main.dart index e5089dada..b2a0e4f12 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,4 +1,5 @@ import 'dart:collection'; +import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:sudoku_brain/utils/Constants.dart'; @@ -37,38 +38,39 @@ class HomePageState extends State { bool isShowRowBorder = false; bool isShowColumnBorder = false; bool isCellPressed = false; + bool listChanged=false; int row = 0; int col = 0; - static String toImg(int s) { -// return 'set2/' + s.toString() + '.png'; - } - List> imgList = [ - [0, 0, 0, 2, 6, 0, 7, 0, 1], - [6, 8, 0, 0, 7, 0, 0, 9, 0], - [1, 9, 0, 0, 0, 4, 5, 0, 0], - [8, 2, 0, 1, 0, 0, 0, 4, 0], - [0, 0, 4, 6, 0, 2, 9, 0, 0], - [0, 5, 0, 0, 0, 3, 0, 2, 8], - [0, 0, 9, 3, 0, 0, 0, 7, 4], - [0, 4, 0, 0, 5, 0, 0, 3, 6], - [7, 0, 3, 0, 1, 8, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0] ]; - List> initList = [ - [0, 0, 0, 2, 6, 0, 7, 0, 1], - [6, 8, 0, 0, 7, 0, 0, 9, 0], - [1, 9, 0, 0, 0, 4, 5, 0, 0], - [8, 2, 0, 1, 0, 0, 0, 4, 0], - [0, 0, 4, 6, 0, 2, 9, 0, 0], - [0, 5, 0, 0, 0, 3, 0, 2, 8], - [0, 0, 9, 3, 0, 0, 0, 7, 4], - [0, 4, 0, 0, 5, 0, 0, 3, 6], - [7, 0, 3, 0, 1, 8, 0, 0, 0], + List> _initList = [ + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0] ]; + static String toImg(int s) { +// return 'set2/' + s.toString() + '.png'; + } + static int count = 0; static int cursor = 0; HashSet conflicts = new HashSet(); @@ -83,18 +85,20 @@ class HomePageState extends State { // Resets the whole board. void reset() { - setState(() { - imgList = new List>.generate( - 9, (i) => new List.from(initList[i])); - changeConflicts(); - }); +// setState(() { +// imgList = new List>.generate( +// 9, (i) => new List.from(initList[i])); +// changeConflicts(); +// }); } Color getHighlightColor(int r, int c) { bool isConflict = conflicts.contains(new RowCol(r, c)); - bool isChangable = initList[r][c] == 0; + bool isChangable = _initList[r][c] == 0; + + print('initList[$r][$c]=${_initList[r][c]}---- ${imgList[r][c]}'); - if(r==row && c==col){ + if (r == row && c == col) { return Color(kBoardCellSelected); } @@ -146,7 +150,7 @@ class HomePageState extends State { InkWell( onTap: () { print('board cell:[$r][$c]'); - if (initList[r][c] == 0) { + if (_initList[r][c] == 0) { setState(() { row = r; col = c; @@ -164,14 +168,13 @@ class HomePageState extends State { ), ), Text( - imgList[r][c]==0? '':'${imgList[r][c]}', + imgList[r][c] == 0 ? '' : '${imgList[r][c]}', style: TextStyle( fontSize: 20.0, color: Color(kBoardTextColor)), ) ], ), ), - ], ), )); @@ -217,8 +220,52 @@ class HomePageState extends State { return new TableRow(children: lst); } + @override + void initState() { + super.initState(); + print('initState'); + readJson(); +// WidgetsBinding.instance.addPostFrameCallback((_) => readJson()); + } + + void readJson() async { + print('readJson'); + + String data = + await DefaultAssetBundle.of(context).loadString("assets/brain.json"); +// print('data: $data'); + + var decodedData = jsonDecode(data); + List list = decodedData['easy']; + print('list: $list'); + +// imgList.clear(); +// initList.clear(); + + List> ques = []; + + for (int i = 0; i < list.length; i++) { + ques.add(list[i].cast()); + } + print('listChanged: $listChanged'); + if(!listChanged){ + listChanged=true; + _initList =ques; + + } + imgList = ques; + + setState(() { + + + }); + print('imgList: $imgList'); + } + @override Widget build(BuildContext context) { + print('build'); + return SafeArea( child: Scaffold( backgroundColor: Color(kPrimaryColor), @@ -230,7 +277,10 @@ class HomePageState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Icon(Icons.settings, size: 25.0), - Text('00:00',style: TextStyle(fontSize: 19.0),), + Text( + '00:00', + style: TextStyle(fontSize: 19.0), + ), Icon(Icons.pause, size: 30.0), ], ), diff --git a/pubspec.yaml b/pubspec.yaml index 7ae1378eb..847737549 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -41,8 +41,8 @@ flutter: uses-material-design: true # To add assets to your application, add an assets section, like this: -# assets: -# - set2/0.png + assets: + - assets/brain.json # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware. From 7258e7e0fe7b55f5b806f985be23b44d6cbe7086 Mon Sep 17 00:00:00 2001 From: zahidch052 Date: Tue, 14 Jan 2020 22:40:55 +0500 Subject: [PATCH 03/57] list duplicatio/Timer added --- lib/main.dart | 150 +++++++++++++++++++++++---------------- lib/utils/Constants.dart | 18 +++++ pubspec.lock | 9 ++- pubspec.yaml | 1 + 4 files changed, 117 insertions(+), 61 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index b2a0e4f12..f51714297 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,9 @@ +import 'dart:async'; import 'dart:collection'; import 'dart:convert'; import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; import 'package:sudoku_brain/utils/Constants.dart'; import 'Board.dart'; @@ -35,52 +37,39 @@ class MyHomePage extends StatefulWidget { } class HomePageState extends State { - bool isShowRowBorder = false; - bool isShowColumnBorder = false; - bool isCellPressed = false; - bool listChanged=false; + + + //Widgets + Timer _timer; + int row = 0; int col = 0; - List> imgList = [ - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0] - ]; - - List> _initList = [ - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0, 0] - ]; - - static String toImg(int s) { -// return 'set2/' + s.toString() + '.png'; - } + String timerText='00:00'; static int count = 0; static int cursor = 0; + + bool isShowRowBorder = false; + bool isShowColumnBorder = false; + + List> imgList = constantList; + List> _initList = constantList; HashSet conflicts = new HashSet(); + + + + void changeConflicts() { conflicts = Conflict.getConflicts(imgList); } static void changeCursor(i) { cursor = i; + + } // Resets the whole board. @@ -94,19 +83,19 @@ class HomePageState extends State { Color getHighlightColor(int r, int c) { bool isConflict = conflicts.contains(new RowCol(r, c)); - bool isChangable = _initList[r][c] == 0; - - print('initList[$r][$c]=${_initList[r][c]}---- ${imgList[r][c]}'); + bool isChangeAble = _initList[r][c] == 0; if (r == row && c == col) { return Color(kBoardCellSelected); } - if (isConflict && !isChangable) + + + if (isConflict && !isChangeAble) return Colors.red[900]; else if (isConflict) return Colors.red[100]; - else if (!isChangable) + else if (!isChangeAble) return Color(kBoardPreFilled); else return Color(kBoardCellEmpty); @@ -200,11 +189,15 @@ class HomePageState extends State { child: InkWell( onTap: () { print((i + c).toString()); + setState(() { changeCursor(i + c); imgList[row][col] = i + c; changeConflicts(); + + print('test: $_initList'); + print('img: $imgList'); }); }, child: Center( @@ -224,42 +217,62 @@ class HomePageState extends State { void initState() { super.initState(); print('initState'); - readJson(); -// WidgetsBinding.instance.addPostFrameCallback((_) => readJson()); + + + //Reading data from json File + readJson().then((value) { + + setState(() { + imgList=List.from(value); + print('imgList: $imgList'); + + }); + }, onError: (error) { + print(error); + }); + + + //=============== + + readJson().then((value) { + _initList=List.from(value); + + print('_initList: $_initList'); + + }, onError: (error) { + print(error); + }); + + //========== + + _timer=Timer.periodic(Duration(seconds: 1), (timer) { + + final df = new DateFormat('mm:ss'); + setState(() { + timerText=df.format(new DateTime.fromMillisecondsSinceEpoch(timer.tick*1000)); + }); + + + }); + } - void readJson() async { + Future>> readJson() async { print('readJson'); String data = - await DefaultAssetBundle.of(context).loadString("assets/brain.json"); + await DefaultAssetBundle.of(context).loadString("assets/brain.json"); // print('data: $data'); var decodedData = jsonDecode(data); List list = decodedData['easy']; print('list: $list'); -// imgList.clear(); -// initList.clear(); - List> ques = []; - for (int i = 0; i < list.length; i++) { ques.add(list[i].cast()); } - print('listChanged: $listChanged'); - if(!listChanged){ - listChanged=true; - _initList =ques; - - } - imgList = ques; - - setState(() { - - - }); - print('imgList: $imgList'); + return ques; } @override @@ -276,12 +289,29 @@ class HomePageState extends State { crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Icon(Icons.settings, size: 25.0), + InkWell( + onTap: () { + print('settings'); + + setState(() { + imgList[0][0]=6; + }); + + + + + }, child: Icon(Icons.settings, size: 25.0)), Text( - '00:00', + '$timerText', style: TextStyle(fontSize: 19.0), ), - Icon(Icons.pause, size: 30.0), + InkWell(onTap: (){ + print('Pause'); + if(_timer!=null){ + _timer.cancel(); + } + + },child: Icon(Icons.pause, size: 30.0)), ], ), ), diff --git a/lib/utils/Constants.dart b/lib/utils/Constants.dart index d7faa9d18..66d82e49e 100644 --- a/lib/utils/Constants.dart +++ b/lib/utils/Constants.dart @@ -1,4 +1,5 @@ +// Colors const kPrimaryColor = 0xFF220E4A; const kBoardTextColor = 0xFF737272; const kBoardCellSelected = 0xFF80C3FF; @@ -6,3 +7,20 @@ const kBoardCellEmpty = 0xFFFFF3D2; const kBoardBorder = 0xFFE2E6E7; const kBoardPreFilled = 0xFFFCD0A3; const kNumPadBorder = 0xFFABDCFF; + + +// init list +List> constantList = [ +[0, 0, 0, 0, 0, 0, 0, 0, 0], +[0, 0, 0, 0, 0, 0, 0, 0, 0], +[0, 0, 0, 0, 0, 0, 0, 0, 0], +[0, 0, 0, 0, 0, 0, 0, 0, 0], +[0, 0, 0, 0, 0, 0, 0, 0, 0], +[0, 0, 0, 0, 0, 0, 0, 0, 0], +[0, 0, 0, 0, 0, 0, 0, 0, 0], +[0, 0, 0, 0, 0, 0, 0, 0, 0], +[0, 0, 0, 0, 0, 0, 0, 0, 0] +]; + + + diff --git a/pubspec.lock b/pubspec.lock index 034e169df..8f116d359 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -46,6 +46,13 @@ packages: description: flutter source: sdk version: "0.0.0" + intl: + dependency: "direct main" + description: + name: intl + url: "https://pub.dartlang.org" + source: hosted + version: "0.16.1" matcher: dependency: transitive description: @@ -143,4 +150,4 @@ packages: source: hosted version: "2.0.8" sdks: - dart: ">=2.2.2 <3.0.0" + dart: ">=2.5.0 <3.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index 847737549..37de423af 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -23,6 +23,7 @@ dependencies: # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^0.1.2 + intl: ^0.16.1 dev_dependencies: flutter_test: From 309e0a2a718023ea76fae263323501fc63dbc272 Mon Sep 17 00:00:00 2001 From: zahidch052 Date: Wed, 15 Jan 2020 23:45:54 +0500 Subject: [PATCH 04/57] implement bloc in existing code --- android/gradle.properties | 1 + lib/board/bloc.dart | 3 + lib/board/board_screen.dart | 332 ++++++++++++++++++++++++++++++++ lib/board/main_board_bloc.dart | 15 ++ lib/board/main_board_event.dart | 4 + lib/board/main_board_state.dart | 6 + lib/main.dart | 327 +------------------------------ pubspec.lock | 95 ++++++++- pubspec.yaml | 1 + 9 files changed, 461 insertions(+), 323 deletions(-) create mode 100644 lib/board/bloc.dart create mode 100644 lib/board/board_screen.dart create mode 100644 lib/board/main_board_bloc.dart create mode 100644 lib/board/main_board_event.dart create mode 100644 lib/board/main_board_state.dart diff --git a/android/gradle.properties b/android/gradle.properties index 2bd6f4fda..1441b1da9 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,2 +1,3 @@ org.gradle.jvmargs=-Xmx1536M +android.enableR8=true diff --git a/lib/board/bloc.dart b/lib/board/bloc.dart new file mode 100644 index 000000000..110ae09a5 --- /dev/null +++ b/lib/board/bloc.dart @@ -0,0 +1,3 @@ +export 'main_board_bloc.dart'; +export 'main_board_event.dart'; +export 'main_board_state.dart'; \ No newline at end of file diff --git a/lib/board/board_screen.dart b/lib/board/board_screen.dart new file mode 100644 index 000000000..b234c0945 --- /dev/null +++ b/lib/board/board_screen.dart @@ -0,0 +1,332 @@ +import 'dart:async'; +import 'dart:collection'; +import 'dart:convert'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; +import 'package:sudoku_brain/board/bloc.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; +import 'main_board_bloc.dart'; +import '../Board.dart'; + +class MainBoard extends StatefulWidget { + + static final String id = 'main_board'; + + @override + _MainBoardState createState() => _MainBoardState(); +} + +class _MainBoardState extends State { + + MainBoardBloc _mainBoardBloc; + + //Widgets + Timer _timer; + + int row = 0; + int col = 0; + + String timerText='00:00'; + + static int count = 0; + static int cursor = 0; + + bool isShowRowBorder = false; + bool isShowColumnBorder = false; + + List> imgList = constantList; + List> _initList = constantList; + HashSet conflicts = new HashSet(); + + + + + + void changeConflicts() { + conflicts = Conflict.getConflicts(imgList); + } + + static void changeCursor(i) { + cursor = i; + + + } + + // Resets the whole board. + void reset() { +// setState(() { +// imgList = new List>.generate( +// 9, (i) => new List.from(initList[i])); +// changeConflicts(); +// }); + } + + Color getHighlightColor(int r, int c) { + bool isConflict = conflicts.contains(new RowCol(r, c)); + bool isChangeAble = _initList[r][c] == 0; + + if (r == row && c == col) { + return Color(kBoardCellSelected); + } + + + + if (isConflict && !isChangeAble) + return Colors.red[900]; + else if (isConflict) + return Colors.red[100]; + else if (!isChangeAble) + return Color(kBoardPreFilled); + else + return Color(kBoardCellEmpty); + } + + List getTableRowLst() { + List lst = new List(); + for (int r = 0; r < 9; r++) { + lst.add(getTableRow(r)); + } + return lst; + } + + TableRow getTableRow(r) { + if (r == 3 || r == 6) { + isShowRowBorder = true; + } else { + isShowRowBorder = false; + } + List lst = new List(); + for (int c = 0; c < 9; c++) { + if (c == 3 || c == 6) { + isShowColumnBorder = true; + } else { + isShowColumnBorder = false; + } + + lst.add(new Container( + height: 36.0, + color: getHighlightColor(r, c), + child: Column( + children: [ + Visibility( + visible: isShowRowBorder, + child: Divider( + color: Color(kPrimaryColor), + height: 1.0, + thickness: 2.0, + ), + ), + InkWell( + onTap: () { + print('board cell:[$r][$c]'); + if (_initList[r][c] == 0) { + setState(() { + row = r; + col = c; + }); + } + }, + child: Row( + children: [ + Visibility( + visible: isShowColumnBorder, + child: Container( + height: 35.0, + width: 2.0, + color: Color(kPrimaryColor), + ), + ), + Text( + imgList[r][c] == 0 ? '' : '${imgList[r][c]}', + style: TextStyle( + fontSize: 20.0, color: Color(kBoardTextColor)), + ) + ], + ), + ), + ], + ), + )); + } + return new TableRow(children: lst); + } + + List getKeyRowlst() { + List lst = new List(); + lst.add(getKeyRow(0)); + lst.add(getKeyRow(5)); + return lst; + } + + TableRow getKeyRow(int c) { + List lst = new List(); + for (int i = 0; i <= 4; i++) { + Color containerColor = Color(kPrimaryColor); + if (cursor == i + c) containerColor = Color(kNumPadBorder); + lst.add( + new Container( + color: containerColor, + child: InkWell( + onTap: () { + print((i + c).toString()); + + setState(() { + changeCursor(i + c); + + imgList[row][col] = i + c; + changeConflicts(); + + print('test: $_initList'); + print('img: $imgList'); + }); + }, + child: Center( + child: Text( + '${(i + c).toString()}', + style: TextStyle(fontSize: 30.0), + ), + ), + ), + ), + ); + } + return new TableRow(children: lst); + } + + Future>> readJson() async { + print('readJson'); + + String data = + await DefaultAssetBundle.of(context).loadString("assets/brain.json"); +// print('data: $data'); + + var decodedData = jsonDecode(data); + List list = decodedData['easy']; + print('list: $list'); + + List> ques = []; + for (int i = 0; i < list.length; i++) { + ques.add(list[i].cast()); + } + return ques; + } + + @override + void initState() { + // TODO: implement initState + super.initState(); + + // init main board bloc here + _mainBoardBloc = BlocProvider.of(context); + //Reading data from json File + readJson().then((value) { + + setState(() { + imgList=List.from(value); + print('imgList: $imgList'); + + }); + }, onError: (error) { + print(error); + }); + + + //=============== + + readJson().then((value) { + _initList=List.from(value); + + print('_initList: $_initList'); + + }, onError: (error) { + print(error); + }); + + //========== + + _timer=Timer.periodic(Duration(seconds: 1), (timer) { + + final df = new DateFormat('mm:ss'); + setState(() { + timerText=df.format(new DateTime.fromMillisecondsSinceEpoch(timer.tick*1000)); + }); + + + }); + + } + + + @override + Widget build(BuildContext context) { + return BlocListener( + bloc: BlocProvider.of(context), + listener: (BuildContext context, state) { + if (state is InitialMainBoardState) { +// if screen state changes then update UI here +// TODO + } + }, + child: BlocBuilder( + builder: (context, state) { + return SafeArea( + child: Scaffold( + backgroundColor: Color(kPrimaryColor), + body: Column(children: [ + Container( + height: 40.0, + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + InkWell( + onTap: () { + print('settings'); + + setState(() { + imgList[0][0]=6; + }); + + + + + }, child: Icon(Icons.settings, size: 25.0)), + Text( + '$timerText', + style: TextStyle(fontSize: 19.0), + ), + InkWell(onTap: (){ + print('Pause'); + if(_timer!=null){ + _timer.cancel(); + } + + },child: Icon(Icons.pause, size: 30.0)), + ], + ), + ), + Card( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(20.0), + ), + child: Table( + children: getTableRowLst(), // main board + border: new TableBorder.all(color: Color(kPrimaryColor)), + ), + ), + Padding( + padding: new EdgeInsets.only(top: 40.0), + child: new Table( + children: getKeyRowlst(), + border: new TableBorder.all( + color: Color(kNumPadBorder), + ), + )) + ])), + ); + } + ), + ); + } +} diff --git a/lib/board/main_board_bloc.dart b/lib/board/main_board_bloc.dart new file mode 100644 index 000000000..2335d5376 --- /dev/null +++ b/lib/board/main_board_bloc.dart @@ -0,0 +1,15 @@ +import 'dart:async'; +import 'package:bloc/bloc.dart'; +import './bloc.dart'; + +class MainBoardBloc extends Bloc { + @override + MainBoardState get initialState => InitialMainBoardState(); + + @override + Stream mapEventToState( + MainBoardEvent event, + ) async* { + // TODO: Add Logic + } +} diff --git a/lib/board/main_board_event.dart b/lib/board/main_board_event.dart new file mode 100644 index 000000000..043558df4 --- /dev/null +++ b/lib/board/main_board_event.dart @@ -0,0 +1,4 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class MainBoardEvent {} diff --git a/lib/board/main_board_state.dart b/lib/board/main_board_state.dart new file mode 100644 index 000000000..75eb8a84f --- /dev/null +++ b/lib/board/main_board_state.dart @@ -0,0 +1,6 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class MainBoardState {} + +class InitialMainBoardState extends MainBoardState {} diff --git a/lib/main.dart b/lib/main.dart index f51714297..9b173344c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,12 +1,9 @@ -import 'dart:async'; -import 'dart:collection'; -import 'dart:convert'; - import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:sudoku_brain/board/bloc.dart'; import 'package:sudoku_brain/utils/Constants.dart'; -import 'Board.dart'; +import 'board/board_screen.dart'; void main() => runApp(new MyApp()); @@ -20,319 +17,13 @@ class MyApp extends StatelessWidget { primaryColor: Color(kPrimaryColor), scaffoldBackgroundColor: Color(kPrimaryColor), ), - home: MyHomePage( - title: 'SudokuBrain', - ), - ); - } -} - -class MyHomePage extends StatefulWidget { - MyHomePage({Key key, this.title}) : super(key: key); - - final String title; - - @override - HomePageState createState() => new HomePageState(); -} - -class HomePageState extends State { - - - //Widgets - Timer _timer; - - - int row = 0; - int col = 0; - - String timerText='00:00'; - - static int count = 0; - static int cursor = 0; - - bool isShowRowBorder = false; - bool isShowColumnBorder = false; - - List> imgList = constantList; - List> _initList = constantList; - HashSet conflicts = new HashSet(); - - - - - - void changeConflicts() { - conflicts = Conflict.getConflicts(imgList); - } - - static void changeCursor(i) { - cursor = i; - - - } - - // Resets the whole board. - void reset() { -// setState(() { -// imgList = new List>.generate( -// 9, (i) => new List.from(initList[i])); -// changeConflicts(); -// }); - } - - Color getHighlightColor(int r, int c) { - bool isConflict = conflicts.contains(new RowCol(r, c)); - bool isChangeAble = _initList[r][c] == 0; - - if (r == row && c == col) { - return Color(kBoardCellSelected); - } - - - - if (isConflict && !isChangeAble) - return Colors.red[900]; - else if (isConflict) - return Colors.red[100]; - else if (!isChangeAble) - return Color(kBoardPreFilled); - else - return Color(kBoardCellEmpty); - } - - List getTableRowLst() { - List lst = new List(); - for (int r = 0; r < 9; r++) { - lst.add(getTableRow(r)); - } - return lst; - } - - TableRow getTableRow(r) { - if (r == 3 || r == 6) { - isShowRowBorder = true; - } else { - isShowRowBorder = false; - } - List lst = new List(); - for (int c = 0; c < 9; c++) { - if (c == 3 || c == 6) { - isShowColumnBorder = true; - } else { - isShowColumnBorder = false; - } - - lst.add(new Container( - height: 36.0, - color: getHighlightColor(r, c), - child: Column( - children: [ - Visibility( - visible: isShowRowBorder, - child: Divider( - color: Color(kPrimaryColor), - height: 1.0, - thickness: 2.0, - ), - ), - InkWell( - onTap: () { - print('board cell:[$r][$c]'); - if (_initList[r][c] == 0) { - setState(() { - row = r; - col = c; - }); - } - }, - child: Row( - children: [ - Visibility( - visible: isShowColumnBorder, - child: Container( - height: 35.0, - width: 2.0, - color: Color(kPrimaryColor), - ), - ), - Text( - imgList[r][c] == 0 ? '' : '${imgList[r][c]}', - style: TextStyle( - fontSize: 20.0, color: Color(kBoardTextColor)), - ) - ], - ), - ), - ], + initialRoute: MainBoard.id, + routes: { + MainBoard.id: (context) => BlocProvider( + create: (BuildContext context) => MainBoardBloc(), + child: MainBoard(), ), - )); - } - return new TableRow(children: lst); - } - - List getKeyRowlst() { - List lst = new List(); - lst.add(getKeyRow(0)); - lst.add(getKeyRow(5)); - return lst; - } - - TableRow getKeyRow(int c) { - List lst = new List(); - for (int i = 0; i <= 4; i++) { - Color containerColor = Color(kPrimaryColor); - if (cursor == i + c) containerColor = Color(kNumPadBorder); - lst.add( - new Container( - color: containerColor, - child: InkWell( - onTap: () { - print((i + c).toString()); - - setState(() { - changeCursor(i + c); - - imgList[row][col] = i + c; - changeConflicts(); - - print('test: $_initList'); - print('img: $imgList'); - }); - }, - child: Center( - child: Text( - '${(i + c).toString()}', - style: TextStyle(fontSize: 30.0), - ), - ), - ), - ), - ); - } - return new TableRow(children: lst); - } - - @override - void initState() { - super.initState(); - print('initState'); - - - //Reading data from json File - readJson().then((value) { - - setState(() { - imgList=List.from(value); - print('imgList: $imgList'); - - }); - }, onError: (error) { - print(error); - }); - - - //=============== - - readJson().then((value) { - _initList=List.from(value); - - print('_initList: $_initList'); - - }, onError: (error) { - print(error); - }); - - //========== - - _timer=Timer.periodic(Duration(seconds: 1), (timer) { - - final df = new DateFormat('mm:ss'); - setState(() { - timerText=df.format(new DateTime.fromMillisecondsSinceEpoch(timer.tick*1000)); - }); - - - }); - - } - - Future>> readJson() async { - print('readJson'); - - String data = - await DefaultAssetBundle.of(context).loadString("assets/brain.json"); -// print('data: $data'); - - var decodedData = jsonDecode(data); - List list = decodedData['easy']; - print('list: $list'); - - List> ques = []; - for (int i = 0; i < list.length; i++) { - ques.add(list[i].cast()); - } - return ques; - } - - @override - Widget build(BuildContext context) { - print('build'); - - return SafeArea( - child: Scaffold( - backgroundColor: Color(kPrimaryColor), - body: Column(children: [ - Container( - height: 40.0, - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - InkWell( - onTap: () { - print('settings'); - - setState(() { - imgList[0][0]=6; - }); - - - - - }, child: Icon(Icons.settings, size: 25.0)), - Text( - '$timerText', - style: TextStyle(fontSize: 19.0), - ), - InkWell(onTap: (){ - print('Pause'); - if(_timer!=null){ - _timer.cancel(); - } - - },child: Icon(Icons.pause, size: 30.0)), - ], - ), - ), - Card( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(20.0), - ), - child: Table( - children: getTableRowLst(), // main board - border: new TableBorder.all(color: Color(kPrimaryColor)), - ), - ), - Padding( - padding: new EdgeInsets.only(top: 40.0), - child: new Table( - children: getKeyRowlst(), - border: new TableBorder.all( - color: Color(kNumPadBorder), - ), - )) - ])), + }, ); } } diff --git a/pubspec.lock b/pubspec.lock index 8f116d359..3bea1b7b3 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,13 +1,34 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + archive: + dependency: transitive + description: + name: archive + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.11" + args: + dependency: transitive + description: + name: args + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.2" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.3.0" + version: "2.4.0" + bloc: + dependency: transitive + description: + name: bloc + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.0" boolean_selector: dependency: transitive description: @@ -29,6 +50,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.14.11" + convert: + dependency: transitive + description: + name: convert + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.1" + crypto: + dependency: transitive + description: + name: crypto + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.3" cupertino_icons: dependency: "direct main" description: @@ -41,11 +76,25 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_bloc: + dependency: "direct main" + description: + name: flutter_bloc + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.0" flutter_test: dependency: "direct dev" description: flutter source: sdk version: "0.0.0" + image: + dependency: transitive + description: + name: image + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.4" intl: dependency: "direct main" description: @@ -59,14 +108,21 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.5" + version: "0.12.6" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.1.7" + version: "1.1.8" + nested: + dependency: transitive + description: + name: nested + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.4" path: dependency: transitive description: @@ -81,6 +137,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.8.0+1" + petitparser: + dependency: transitive + description: + name: petitparser + url: "https://pub.dartlang.org" + source: hosted + version: "2.4.0" + provider: + dependency: transitive + description: + name: provider + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.1" quiver: dependency: transitive description: @@ -88,6 +158,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.5" + rxdart: + dependency: transitive + description: + name: rxdart + url: "https://pub.dartlang.org" + source: hosted + version: "0.23.1" sky_engine: dependency: transitive description: flutter @@ -134,7 +211,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.5" + version: "0.2.11" typed_data: dependency: transitive description: @@ -149,5 +226,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.8" + xml: + dependency: transitive + description: + name: xml + url: "https://pub.dartlang.org" + source: hosted + version: "3.5.0" sdks: - dart: ">=2.5.0 <3.0.0" + dart: ">=2.6.0 <3.0.0" + flutter: ">=1.12.1" diff --git a/pubspec.yaml b/pubspec.yaml index 37de423af..5ffe380d5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -24,6 +24,7 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^0.1.2 intl: ^0.16.1 + flutter_bloc: ^3.1.0 dev_dependencies: flutter_test: From 3b5e7413630c18166921f26a52f764ab8ae9c41e Mon Sep 17 00:00:00 2001 From: New Pc First Commit <> Date: Thu, 16 Jan 2020 21:57:19 +0500 Subject: [PATCH 05/57] bloc --- ios/Flutter/Flutter.podspec | 18 +++++ lib/board/board_screen.dart | 114 +++++++++++++------------------- lib/board/main_board_bloc.dart | 35 +++++++++- lib/board/main_board_event.dart | 7 ++ lib/board/main_board_state.dart | 22 +++++- 5 files changed, 125 insertions(+), 71 deletions(-) create mode 100644 ios/Flutter/Flutter.podspec diff --git a/ios/Flutter/Flutter.podspec b/ios/Flutter/Flutter.podspec new file mode 100644 index 000000000..5ca30416b --- /dev/null +++ b/ios/Flutter/Flutter.podspec @@ -0,0 +1,18 @@ +# +# NOTE: This podspec is NOT to be published. It is only used as a local source! +# + +Pod::Spec.new do |s| + s.name = 'Flutter' + s.version = '1.0.0' + s.summary = 'High-performance, high-fidelity mobile apps.' + s.description = <<-DESC +Flutter provides an easy and productive way to build and deploy high-performance mobile apps for Android and iOS. + DESC + s.homepage = 'https://flutter.io' + s.license = { :type => 'MIT' } + s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' } + s.source = { :git => 'https://github.com/flutter/engine', :tag => s.version.to_s } + s.ios.deployment_target = '8.0' + s.vendored_frameworks = 'Flutter.framework' +end diff --git a/lib/board/board_screen.dart b/lib/board/board_screen.dart index b234c0945..8db8db4bc 100644 --- a/lib/board/board_screen.dart +++ b/lib/board/board_screen.dart @@ -1,16 +1,17 @@ import 'dart:async'; import 'dart:collection'; import 'dart:convert'; -import 'package:flutter_bloc/flutter_bloc.dart'; + import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:intl/intl.dart'; import 'package:sudoku_brain/board/bloc.dart'; import 'package:sudoku_brain/utils/Constants.dart'; -import 'main_board_bloc.dart'; + import '../Board.dart'; +import 'main_board_bloc.dart'; class MainBoard extends StatefulWidget { - static final String id = 'main_board'; @override @@ -18,7 +19,6 @@ class MainBoard extends StatefulWidget { } class _MainBoardState extends State { - MainBoardBloc _mainBoardBloc; //Widgets @@ -27,7 +27,7 @@ class _MainBoardState extends State { int row = 0; int col = 0; - String timerText='00:00'; + String timerText = '00:00'; static int count = 0; static int cursor = 0; @@ -39,27 +39,21 @@ class _MainBoardState extends State { List> _initList = constantList; HashSet conflicts = new HashSet(); - - - - void changeConflicts() { conflicts = Conflict.getConflicts(imgList); } static void changeCursor(i) { cursor = i; - - } // Resets the whole board. void reset() { -// setState(() { -// imgList = new List>.generate( -// 9, (i) => new List.from(initList[i])); -// changeConflicts(); -// }); + setState(() { + imgList = new List>.generate( + 9, (i) => new List.from(_initList[i])); + changeConflicts(); + }); } Color getHighlightColor(int r, int c) { @@ -70,8 +64,6 @@ class _MainBoardState extends State { return Color(kBoardCellSelected); } - - if (isConflict && !isChangeAble) return Colors.red[900]; else if (isConflict) @@ -198,7 +190,7 @@ class _MainBoardState extends State { print('readJson'); String data = - await DefaultAssetBundle.of(context).loadString("assets/brain.json"); + await DefaultAssetBundle.of(context).loadString("assets/brain.json"); // print('data: $data'); var decodedData = jsonDecode(data); @@ -216,60 +208,47 @@ class _MainBoardState extends State { void initState() { // TODO: implement initState super.initState(); - + // init main board bloc here _mainBoardBloc = BlocProvider.of(context); - //Reading data from json File - readJson().then((value) { - - setState(() { - imgList=List.from(value); - print('imgList: $imgList'); - - }); - }, onError: (error) { - print(error); - }); + _mainBoardBloc.add(BoardInitISCalled(context: context)); - //=============== - - readJson().then((value) { - _initList=List.from(value); - - print('_initList: $_initList'); - - }, onError: (error) { - print(error); - }); - - //========== - - _timer=Timer.periodic(Duration(seconds: 1), (timer) { + _timer = Timer.periodic(Duration(seconds: 1), (timer) { final df = new DateFormat('mm:ss'); setState(() { - timerText=df.format(new DateTime.fromMillisecondsSinceEpoch(timer.tick*1000)); + timerText = df + .format(new DateTime.fromMillisecondsSinceEpoch(timer.tick * 1000)); }); - - }); - } - @override Widget build(BuildContext context) { + print('build'); + return BlocListener( bloc: BlocProvider.of(context), listener: (BuildContext context, state) { + print('BlocListener'); + if (state is InitialMainBoardState) { -// if screen state changes then update UI here -// TODO + print('state: ${state.error}'); + } else if (state is FetchingLevel) { + print('FetchingLevel'); + } else if (state is LevelFetched) { + print('LevelFetched: ${state.boardList}'); + + imgList = List.from(state.boardList); + _initList = List.from(json.decode(state.boardList.toString()).cast()); + print('imgList: $imgList'); + } }, - child: BlocBuilder( - builder: (context, state) { + child: + BlocBuilder(builder: (context, state) { + print('BlocBuilder'); return SafeArea( child: Scaffold( backgroundColor: Color(kPrimaryColor), @@ -285,24 +264,22 @@ class _MainBoardState extends State { print('settings'); setState(() { - imgList[0][0]=6; + imgList[0][0] = 6; }); - - - - - }, child: Icon(Icons.settings, size: 25.0)), + }, + child: Icon(Icons.settings, size: 25.0)), Text( '$timerText', style: TextStyle(fontSize: 19.0), ), - InkWell(onTap: (){ - print('Pause'); - if(_timer!=null){ - _timer.cancel(); - } - - },child: Icon(Icons.pause, size: 30.0)), + InkWell( + onTap: () { + print('Pause'); + if (_timer != null) { + _timer.cancel(); + } + }, + child: Icon(Icons.pause, size: 30.0)), ], ), ), @@ -325,8 +302,7 @@ class _MainBoardState extends State { )) ])), ); - } - ), + }), ); } } diff --git a/lib/board/main_board_bloc.dart b/lib/board/main_board_bloc.dart index 2335d5376..526e8cc2f 100644 --- a/lib/board/main_board_bloc.dart +++ b/lib/board/main_board_bloc.dart @@ -1,5 +1,9 @@ import 'dart:async'; +import 'dart:convert'; + import 'package:bloc/bloc.dart'; +import 'package:flutter/cupertino.dart'; + import './bloc.dart'; class MainBoardBloc extends Bloc { @@ -10,6 +14,35 @@ class MainBoardBloc extends Bloc { Stream mapEventToState( MainBoardEvent event, ) async* { - // TODO: Add Logic + if (event is BoardInitISCalled) { + yield FetchingLevel(); + final list = await readJson(event.context); + yield LevelFetched(boardList: list); + } + } +} + +Future>> readJson(BuildContext context) async { + print('readJson'); + + List>> finalList=List(); + + String data = + await DefaultAssetBundle.of(context).loadString("assets/brain.json"); +// print('data: $data'); + + var decodedData = jsonDecode(data); + List list = decodedData['easy']; + print('list: $list'); + + List> ques = []; + List> ans = []; + for (int i = 0; i < list.length; i++) { + ques.add(list[i].cast()); + ans.add(list[i].cast()); } + + finalList.add(ques); + finalList.add(ans); + return ques; } diff --git a/lib/board/main_board_event.dart b/lib/board/main_board_event.dart index 043558df4..bdb71d5a2 100644 --- a/lib/board/main_board_event.dart +++ b/lib/board/main_board_event.dart @@ -1,4 +1,11 @@ +import 'package:flutter/cupertino.dart'; import 'package:meta/meta.dart'; @immutable abstract class MainBoardEvent {} + +class BoardInitISCalled extends MainBoardEvent { + final BuildContext context; + + BoardInitISCalled({this.context}); +} diff --git a/lib/board/main_board_state.dart b/lib/board/main_board_state.dart index 75eb8a84f..8eb658e11 100644 --- a/lib/board/main_board_state.dart +++ b/lib/board/main_board_state.dart @@ -3,4 +3,24 @@ import 'package:meta/meta.dart'; @immutable abstract class MainBoardState {} -class InitialMainBoardState extends MainBoardState {} +class InitialMainBoardState extends MainBoardState { + final String error; + + InitialMainBoardState({this.error}); +} + +class FetchingLevel extends MainBoardState {} + +class LevelFetched extends MainBoardState { + final List> boardList; + + LevelFetched({this.boardList}); +} + +class SolutionFetched extends MainBoardState {} + +class ErrorFetched extends MainBoardState { + final String error; + + ErrorFetched({this.error}); +} From d3f881a46a1642333ecd15904dbaf61a4be45529 Mon Sep 17 00:00:00 2001 From: zahidch052 Date: Fri, 17 Jan 2020 20:21:01 +0500 Subject: [PATCH 06/57] formatted code to bloc --- lib/board/main_board_bloc.dart | 48 --- lib/board/main_board_event.dart | 11 - lib/board/main_board_state.dart | 26 -- lib/main.dart | 11 +- lib/{ => screens}/board/bloc.dart | 0 lib/{ => screens}/board/board_screen.dart | 350 +++++++++++----------- lib/screens/board/main_board_bloc.dart | 155 ++++++++++ lib/screens/board/main_board_event.dart | 50 ++++ lib/screens/board/main_board_state.dart | 69 +++++ 9 files changed, 452 insertions(+), 268 deletions(-) delete mode 100644 lib/board/main_board_bloc.dart delete mode 100644 lib/board/main_board_event.dart delete mode 100644 lib/board/main_board_state.dart rename lib/{ => screens}/board/bloc.dart (100%) rename lib/{ => screens}/board/board_screen.dart (59%) create mode 100644 lib/screens/board/main_board_bloc.dart create mode 100644 lib/screens/board/main_board_event.dart create mode 100644 lib/screens/board/main_board_state.dart diff --git a/lib/board/main_board_bloc.dart b/lib/board/main_board_bloc.dart deleted file mode 100644 index 526e8cc2f..000000000 --- a/lib/board/main_board_bloc.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'dart:async'; -import 'dart:convert'; - -import 'package:bloc/bloc.dart'; -import 'package:flutter/cupertino.dart'; - -import './bloc.dart'; - -class MainBoardBloc extends Bloc { - @override - MainBoardState get initialState => InitialMainBoardState(); - - @override - Stream mapEventToState( - MainBoardEvent event, - ) async* { - if (event is BoardInitISCalled) { - yield FetchingLevel(); - final list = await readJson(event.context); - yield LevelFetched(boardList: list); - } - } -} - -Future>> readJson(BuildContext context) async { - print('readJson'); - - List>> finalList=List(); - - String data = - await DefaultAssetBundle.of(context).loadString("assets/brain.json"); -// print('data: $data'); - - var decodedData = jsonDecode(data); - List list = decodedData['easy']; - print('list: $list'); - - List> ques = []; - List> ans = []; - for (int i = 0; i < list.length; i++) { - ques.add(list[i].cast()); - ans.add(list[i].cast()); - } - - finalList.add(ques); - finalList.add(ans); - return ques; -} diff --git a/lib/board/main_board_event.dart b/lib/board/main_board_event.dart deleted file mode 100644 index bdb71d5a2..000000000 --- a/lib/board/main_board_event.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:meta/meta.dart'; - -@immutable -abstract class MainBoardEvent {} - -class BoardInitISCalled extends MainBoardEvent { - final BuildContext context; - - BoardInitISCalled({this.context}); -} diff --git a/lib/board/main_board_state.dart b/lib/board/main_board_state.dart deleted file mode 100644 index 8eb658e11..000000000 --- a/lib/board/main_board_state.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:meta/meta.dart'; - -@immutable -abstract class MainBoardState {} - -class InitialMainBoardState extends MainBoardState { - final String error; - - InitialMainBoardState({this.error}); -} - -class FetchingLevel extends MainBoardState {} - -class LevelFetched extends MainBoardState { - final List> boardList; - - LevelFetched({this.boardList}); -} - -class SolutionFetched extends MainBoardState {} - -class ErrorFetched extends MainBoardState { - final String error; - - ErrorFetched({this.error}); -} diff --git a/lib/main.dart b/lib/main.dart index 9b173344c..b49814f2b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,10 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:sudoku_brain/board/bloc.dart'; +import 'package:sudoku_brain/screens/board/board_screen.dart'; +import 'package:sudoku_brain/screens/board/main_board_bloc.dart'; import 'package:sudoku_brain/utils/Constants.dart'; -import 'board/board_screen.dart'; - void main() => runApp(new MyApp()); class MyApp extends StatelessWidget { @@ -20,9 +19,9 @@ class MyApp extends StatelessWidget { initialRoute: MainBoard.id, routes: { MainBoard.id: (context) => BlocProvider( - create: (BuildContext context) => MainBoardBloc(), - child: MainBoard(), - ), + create: (BuildContext context) => MainBoardBloc(), + child: MainBoard(), + ), }, ); } diff --git a/lib/board/bloc.dart b/lib/screens/board/bloc.dart similarity index 100% rename from lib/board/bloc.dart rename to lib/screens/board/bloc.dart diff --git a/lib/board/board_screen.dart b/lib/screens/board/board_screen.dart similarity index 59% rename from lib/board/board_screen.dart rename to lib/screens/board/board_screen.dart index 8db8db4bc..242fc39e5 100644 --- a/lib/board/board_screen.dart +++ b/lib/screens/board/board_screen.dart @@ -4,12 +4,12 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:intl/intl.dart'; -import 'package:sudoku_brain/board/bloc.dart'; import 'package:sudoku_brain/utils/Constants.dart'; -import '../Board.dart'; +import '../../Board.dart'; import 'main_board_bloc.dart'; +import 'main_board_event.dart'; +import 'main_board_state.dart'; class MainBoard extends StatefulWidget { static final String id = 'main_board'; @@ -21,46 +21,156 @@ class MainBoard extends StatefulWidget { class _MainBoardState extends State { MainBoardBloc _mainBoardBloc; - //Widgets - Timer _timer; + int _row = 0; + int _col = 0; + int currentTimerValue = 0; - int row = 0; - int col = 0; - - String timerText = '00:00'; + String _timerText = '00:00'; static int count = 0; - static int cursor = 0; + int _cursor = 0; - bool isShowRowBorder = false; - bool isShowColumnBorder = false; + bool isTimerPaused = false; - List> imgList = constantList; - List> _initList = constantList; - HashSet conflicts = new HashSet(); + List> _boardList = constantList; + List> _initBoardList = constantList; + HashSet _conflicts = new HashSet(); - void changeConflicts() { - conflicts = Conflict.getConflicts(imgList); + @override + void initState() { + // TODO: implement initState + super.initState(); + + // init main screens.board bloc here + _mainBoardBloc = BlocProvider.of(context); + _mainBoardBloc.add(BoardInitISCalled(context: context)); + + readJson().then((value) { + // TODO remove this method later + _initBoardList = List.from(value); + + print('_initList: $_initBoardList'); + }, onError: (error) { + print(error); + }); + + _mainBoardBloc.add(TimerTick(tickValue: currentTimerValue)); + } + + @override + Widget build(BuildContext context) { + return BlocListener( + bloc: BlocProvider.of(context), + listener: (BuildContext context, state) { + if (state is InitialMainBoardState) { + print('state: ${state.error}'); + } else if (state is FetchingLevel) { + print('FetchingLevel'); + } else if (state is LevelFetched) { + print('LevelFetched: ${state.boardList}'); + + _boardList = List.from(state.boardList); +// _initList.clear(); TODO: copy list to another list without same reference +// _initList.addAll(state.boardList.map((element) => element).toList()); + print('imgList: $_boardList'); + } else if (state is ConflictsChanged) { + print('ConflictsChanged'); + _conflicts = state.conflicts; + } else if (state is CursorChangedState) { + _cursor = state.val; + print('cursor: $_cursor'); + } else if (state is UpdateCellState) { + _boardList[_row][_col] = state.val; + print('_boardList: ${state.val}'); + } else if (state is UpdateRowColState) { + print('UpdateRowColState'); + _row = state.row; + _col = state.col; + } else if (state is TimerTickState) { + _timerText = state.tickValue; + print('TimerTickState: $_timerText'); + } + }, + child: + BlocBuilder(builder: (context, state) { + print('BlocBuilder'); + return SafeArea( + child: Scaffold( + backgroundColor: Color(kPrimaryColor), + body: Column(children: [ + Container( + height: 40.0, + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + InkWell( + onTap: () { + print('settings'); + }, + child: Icon(Icons.settings, size: 25.0)), + Text( + '$_timerText', + style: TextStyle(fontSize: 19.0), + ), + InkWell( + onTap: () { + print('Pause'); + if (isTimerPaused) { + _mainBoardBloc + .add(TimerTick(tickValue: currentTimerValue)); + isTimerPaused = false; + } else { + _mainBoardBloc.add(PauseTimer()); + isTimerPaused = true; + } + }, + child: Icon( + isTimerPaused == true + ? Icons.play_arrow + : Icons.pause, + size: 30.0)), + ], + ), + ), + Card( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(20.0), + ), + child: Table( + children: getTableRowLst(), // main board + border: new TableBorder.all(color: Color(kPrimaryColor)), + ), + ), + Padding( + padding: new EdgeInsets.only(top: 40.0), + child: new Table( + children: getKeyRowlst(), + border: new TableBorder.all( + color: Color(kNumPadBorder), + ), + )) + ])), + ); + }), + ); } - static void changeCursor(i) { - cursor = i; +// Methods + + void changeConflicts() { + _mainBoardBloc.add(ChangeConflictsCalled(list: _boardList)); } - // Resets the whole board. - void reset() { - setState(() { - imgList = new List>.generate( - 9, (i) => new List.from(_initList[i])); - changeConflicts(); - }); + void changeCursor(i) { + _mainBoardBloc.add(CursorChanged(val: i)); } Color getHighlightColor(int r, int c) { - bool isConflict = conflicts.contains(new RowCol(r, c)); - bool isChangeAble = _initList[r][c] == 0; + bool isConflict = _conflicts.contains(new RowCol(r, c)); + bool isChangeAble = _initBoardList[r][c] == 0; - if (r == row && c == col) { + if (r == _row && c == _col) { return Color(kBoardCellSelected); } @@ -83,46 +193,31 @@ class _MainBoardState extends State { } TableRow getTableRow(r) { - if (r == 3 || r == 6) { - isShowRowBorder = true; - } else { - isShowRowBorder = false; - } List lst = new List(); for (int c = 0; c < 9; c++) { - if (c == 3 || c == 6) { - isShowColumnBorder = true; - } else { - isShowColumnBorder = false; - } - - lst.add(new Container( - height: 36.0, - color: getHighlightColor(r, c), - child: Column( - children: [ - Visibility( - visible: isShowRowBorder, - child: Divider( - color: Color(kPrimaryColor), - height: 1.0, - thickness: 2.0, + lst.add(InkWell( + onTap: () { + print('screens.board cell:[$r][$c]'); + _mainBoardBloc + .add(UpdateRowCol(row: r, col: c, list: _initBoardList)); + }, + child: new Container( + height: 36.0, + color: getHighlightColor(r, c), + child: Column( + children: [ + Visibility( + visible: isShowRowBorder(r), + child: Divider( + color: Color(kPrimaryColor), + height: 1.0, + thickness: 2.0, + ), ), - ), - InkWell( - onTap: () { - print('board cell:[$r][$c]'); - if (_initList[r][c] == 0) { - setState(() { - row = r; - col = c; - }); - } - }, - child: Row( + Row( children: [ Visibility( - visible: isShowColumnBorder, + visible: isShowColBorder(c), child: Container( height: 35.0, width: 2.0, @@ -130,14 +225,14 @@ class _MainBoardState extends State { ), ), Text( - imgList[r][c] == 0 ? '' : '${imgList[r][c]}', + _boardList[r][c] == 0 ? '' : '${_boardList[r][c]}', style: TextStyle( fontSize: 20.0, color: Color(kBoardTextColor)), ) ], ), - ), - ], + ], + ), ), )); } @@ -155,23 +250,16 @@ class _MainBoardState extends State { List lst = new List(); for (int i = 0; i <= 4; i++) { Color containerColor = Color(kPrimaryColor); - if (cursor == i + c) containerColor = Color(kNumPadBorder); + if (_cursor == i + c) containerColor = Color(kNumPadBorder); lst.add( new Container( color: containerColor, child: InkWell( onTap: () { print((i + c).toString()); - - setState(() { - changeCursor(i + c); - - imgList[row][col] = i + c; - changeConflicts(); - - print('test: $_initList'); - print('img: $imgList'); - }); + changeCursor(i + c); + _mainBoardBloc.add(UpdateCellValue(val: i + c)); + changeConflicts(); }, child: Center( child: Text( @@ -186,6 +274,7 @@ class _MainBoardState extends State { return new TableRow(children: lst); } + // TODO: remove it later Future>> readJson() async { print('readJson'); @@ -204,105 +293,12 @@ class _MainBoardState extends State { return ques; } - @override - void initState() { - // TODO: implement initState - super.initState(); - - // init main board bloc here - _mainBoardBloc = BlocProvider.of(context); - _mainBoardBloc.add(BoardInitISCalled(context: context)); - - - - _timer = Timer.periodic(Duration(seconds: 1), (timer) { - final df = new DateFormat('mm:ss'); - setState(() { - timerText = df - .format(new DateTime.fromMillisecondsSinceEpoch(timer.tick * 1000)); - }); + // Resets the whole screens.board. TODO: move it to bloc class + void reset() { + setState(() { + _boardList = new List>.generate( + 9, (i) => new List.from(_initBoardList[i])); + changeConflicts(); }); } - - @override - Widget build(BuildContext context) { - print('build'); - - return BlocListener( - bloc: BlocProvider.of(context), - listener: (BuildContext context, state) { - print('BlocListener'); - - if (state is InitialMainBoardState) { - print('state: ${state.error}'); - } else if (state is FetchingLevel) { - print('FetchingLevel'); - } else if (state is LevelFetched) { - print('LevelFetched: ${state.boardList}'); - - imgList = List.from(state.boardList); - _initList = List.from(json.decode(state.boardList.toString()).cast()); - print('imgList: $imgList'); - - } - }, - child: - BlocBuilder(builder: (context, state) { - print('BlocBuilder'); - return SafeArea( - child: Scaffold( - backgroundColor: Color(kPrimaryColor), - body: Column(children: [ - Container( - height: 40.0, - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - InkWell( - onTap: () { - print('settings'); - - setState(() { - imgList[0][0] = 6; - }); - }, - child: Icon(Icons.settings, size: 25.0)), - Text( - '$timerText', - style: TextStyle(fontSize: 19.0), - ), - InkWell( - onTap: () { - print('Pause'); - if (_timer != null) { - _timer.cancel(); - } - }, - child: Icon(Icons.pause, size: 30.0)), - ], - ), - ), - Card( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(20.0), - ), - child: Table( - children: getTableRowLst(), // main board - border: new TableBorder.all(color: Color(kPrimaryColor)), - ), - ), - Padding( - padding: new EdgeInsets.only(top: 40.0), - child: new Table( - children: getKeyRowlst(), - border: new TableBorder.all( - color: Color(kNumPadBorder), - ), - )) - ])), - ); - }), - ); - } } diff --git a/lib/screens/board/main_board_bloc.dart b/lib/screens/board/main_board_bloc.dart new file mode 100644 index 000000000..936bdbed3 --- /dev/null +++ b/lib/screens/board/main_board_bloc.dart @@ -0,0 +1,155 @@ +import 'dart:async'; +import 'dart:collection'; +import 'dart:convert'; + +import 'package:bloc/bloc.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; + +import './bloc.dart'; +import '../../Board.dart'; + +class MainBoardBloc extends Bloc { + Timer _timer; + int currentTimerValue = 0; + + @override + MainBoardState get initialState => InitialMainBoardState(); + + @override + Stream mapEventToState( + MainBoardEvent event, + ) async* { + if (event is BoardInitISCalled) { + yield FetchingLevel(); + final list = await _readJson(event.context); + yield LevelFetched(boardList: list); + } else if (event is ChangeConflictsCalled) { + final conflicts = _changeConflicts(event.list); + yield ConflictsChanged(conflicts: conflicts); + } else if (event is CursorChanged) { + final cursor = _changeCursor(event.val); + yield CursorChangedState(val: cursor); + } else if (event is UpdateCellValue) { + final value = _changeCellValue(event.val); + yield UpdateCellState(val: value); + } else if (event is UpdateRowCol) { + final list = _changeRowCol(event.row, event.col, event.list); + if (list != null) yield UpdateRowColState(row: list[0], col: list[1]); + } else if (event is TimerTick) { + _startTimer(); + } else if (event is PauseTimer) { + _stopTimer(); + } else if (event is RestartTimer) { + _startTimer(); + } + } + + void _stopTimer() { + if (_timer != null) { + _timer.cancel(); + } + } + + Stream _startTimer() { + _timer = Timer.periodic(Duration(seconds: 1), (timer) { + currentTimerValue = currentTimerValue + 1; + final df = new DateFormat('mm:ss'); + String _timerText = df.format( + new DateTime.fromMillisecondsSinceEpoch((currentTimerValue) * 1000)); + }); + } +} + +// Read data from JSON File +Future>> _readJson(BuildContext context) async { + print('readJson'); + + List>> finalList = List(); + + String data = + await DefaultAssetBundle.of(context).loadString("assets/brain.json"); +// print('data: $data'); + + var decodedData = jsonDecode(data); + List list = decodedData['easy']; + print('list: $list'); + + List> ques = []; + List> ans = []; + for (int i = 0; i < list.length; i++) { + ques.add(list[i].cast()); + ans.add(list[i].cast()); + } + + finalList.add(ques); + finalList.add(ans); + return ques; +} + +// Change conflicts +HashSet _changeConflicts(List> boardList) { + HashSet _conflicts = Conflict.getConflicts(boardList); + return _conflicts; +} + +// Change cursor +int _changeCursor(int val) { + return val; +} + +// Change cell value +int _changeCellValue(int val) { + return val; +} + +// +List _changeRowCol(int row, int col, List> list) { + List retList = List(); + if (list[row][col] == 0) { + retList.add(row); + retList.add(col); + } + return retList; +} + +// + +// +Color getHighlightColorBloc(int selRow, int selCol, int row, int col, + HashSet conflicts, List> initBoardList) { + bool isConflict = conflicts.contains(new RowCol(row, col)); + bool isChangeAble = initBoardList[row][col] == 0; + + if (row == selCol && col == selCol) { + return Color(kBoardCellSelected); + } + + if (isConflict && !isChangeAble) + return Colors.red[900]; + else if (isConflict) + return Colors.red[100]; + else if (!isChangeAble) + return Color(kBoardPreFilled); + else + return Color(kBoardCellEmpty); +} + +// showRow Border or Not +bool isShowRowBorder(int r) { + if (r == 3 || r == 6) { + return true; + } else { + return false; + } +} + +bool isShowColBorder(int c) { + if (c == 3 || c == 6) { + return true; + } else { + return false; + } +} diff --git a/lib/screens/board/main_board_event.dart b/lib/screens/board/main_board_event.dart new file mode 100644 index 000000000..ccc0a860a --- /dev/null +++ b/lib/screens/board/main_board_event.dart @@ -0,0 +1,50 @@ +import 'package:flutter/cupertino.dart'; +import 'package:meta/meta.dart'; + +@immutable +abstract class MainBoardEvent {} + +class BoardInitISCalled extends MainBoardEvent { + final BuildContext context; + + BoardInitISCalled({this.context}); +} + +class ChangeConflictsCalled extends MainBoardEvent { + final List> list; + + ChangeConflictsCalled({this.list}); +} + +class CursorChanged extends MainBoardEvent { + final int val; + + CursorChanged({this.val}); +} + +class UpdateCellValue extends MainBoardEvent { + final int val; + + UpdateCellValue({this.val}); +} + +class UpdateRowCol extends MainBoardEvent { + final int row; + final int col; + final List> list; + + UpdateRowCol({this.row, this.col, this.list}); +} + +//================================== TIMER =========================================// +class StartTimer extends MainBoardEvent {} + +class PauseTimer extends MainBoardEvent {} + +class RestartTimer extends MainBoardEvent {} + +class TimerTick extends MainBoardEvent { + final int tickValue; + + TimerTick({this.tickValue}); +} diff --git a/lib/screens/board/main_board_state.dart b/lib/screens/board/main_board_state.dart new file mode 100644 index 000000000..4f67e94bc --- /dev/null +++ b/lib/screens/board/main_board_state.dart @@ -0,0 +1,69 @@ +import 'dart:collection'; + +import 'package:flutter/cupertino.dart'; +import 'package:meta/meta.dart'; + +import '../../Board.dart'; + +@immutable +abstract class MainBoardState {} + +class InitialMainBoardState extends MainBoardState { + final String error; + + InitialMainBoardState({this.error}); +} + +class FetchingLevel extends MainBoardState {} + +class LevelFetched extends MainBoardState { + final List> boardList; + + LevelFetched({this.boardList}); +} + +class SolutionFetched extends MainBoardState {} + +class ErrorFetched extends MainBoardState { + final String error; + + ErrorFetched({this.error}); +} + +class ConflictsChanged extends MainBoardState { + final HashSet conflicts; + + ConflictsChanged({this.conflicts}); +} + +class CursorChangedState extends MainBoardState { + final int val; + + CursorChangedState({this.val}); +} + +class UpdateCellState extends MainBoardState { + final int val; + + UpdateCellState({this.val}); +} + +class UpdateRowColState extends MainBoardState { + final int row; + final int col; + + UpdateRowColState({this.row, this.col}); +} + +// ========================= TIMER ============================= // +class StartTimerState extends MainBoardState {} + +class PauseTimerState extends MainBoardState {} + +class RestartTimerState extends MainBoardState {} + +class TimerTickState extends MainBoardState { + final String tickValue; + + TimerTickState({this.tickValue}); +} From 0823511466d1e35d4894b60ab96c6fb9bbfbdffe Mon Sep 17 00:00:00 2001 From: zahidch052 Date: Sat, 18 Jan 2020 14:15:59 +0500 Subject: [PATCH 07/57] timer stream/ widgets exported --- lib/components/play_pause_widget.dart | 31 ++++++++++++++ lib/components/timer_widget.dart | 26 +++++++++++ lib/screens/board/board_screen.dart | 57 +++++++++---------------- lib/screens/board/main_board_bloc.dart | 35 +++++++++++---- lib/screens/board/main_board_state.dart | 6 ++- 5 files changed, 108 insertions(+), 47 deletions(-) create mode 100644 lib/components/play_pause_widget.dart create mode 100644 lib/components/timer_widget.dart diff --git a/lib/components/play_pause_widget.dart b/lib/components/play_pause_widget.dart new file mode 100644 index 000000000..c8a5ea996 --- /dev/null +++ b/lib/components/play_pause_widget.dart @@ -0,0 +1,31 @@ +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/screens/board/main_board_bloc.dart'; +import 'package:sudoku_brain/screens/board/main_board_event.dart'; + +class PlayPauseWidget extends StatelessWidget { + const PlayPauseWidget({ + Key key, + @required bool isTimerPaused, + @required MainBoardBloc mainBoardBloc, + }) : _isTimerPaused = isTimerPaused, + _mainBoardBloc = mainBoardBloc, + super(key: key); + + final bool _isTimerPaused; + final MainBoardBloc _mainBoardBloc; + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () { + print('Pause'); + if (_isTimerPaused) { + _mainBoardBloc.add(StartTimer()); + } else { + _mainBoardBloc.add(PauseTimer()); + } + }, + child: Icon(_isTimerPaused == true ? Icons.play_arrow : Icons.pause, + size: 30.0)); + } +} diff --git a/lib/components/timer_widget.dart b/lib/components/timer_widget.dart new file mode 100644 index 000000000..5d86f8f46 --- /dev/null +++ b/lib/components/timer_widget.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/screens/board/main_board_bloc.dart'; + +class CounterWidget extends StatelessWidget { + const CounterWidget({ + Key key, + @required MainBoardBloc mainBoardBloc, + }) : _mainBoardBloc = mainBoardBloc, + super(key: key); + + final MainBoardBloc _mainBoardBloc; + + @override + Widget build(BuildContext context) { + return StreamBuilder( + stream: _mainBoardBloc.outCounter, + initialData: '00:00', + builder: (BuildContext context, AsyncSnapshot snapshot) { + return Text( + '${snapshot.data}', + style: TextStyle(fontSize: 19.0), + ); + }, + ); + } +} diff --git a/lib/screens/board/board_screen.dart b/lib/screens/board/board_screen.dart index 242fc39e5..947f8676c 100644 --- a/lib/screens/board/board_screen.dart +++ b/lib/screens/board/board_screen.dart @@ -4,6 +4,8 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:sudoku_brain/components/play_pause_widget.dart'; +import 'package:sudoku_brain/components/timer_widget.dart'; import 'package:sudoku_brain/utils/Constants.dart'; import '../../Board.dart'; @@ -23,14 +25,10 @@ class _MainBoardState extends State { int _row = 0; int _col = 0; - int currentTimerValue = 0; - String _timerText = '00:00'; - - static int count = 0; int _cursor = 0; - bool isTimerPaused = false; + bool _isTimerPaused = false; List> _boardList = constantList; List> _initBoardList = constantList; @@ -38,12 +36,12 @@ class _MainBoardState extends State { @override void initState() { - // TODO: implement initState super.initState(); // init main screens.board bloc here _mainBoardBloc = BlocProvider.of(context); _mainBoardBloc.add(BoardInitISCalled(context: context)); + _mainBoardBloc.add(StartTimer()); readJson().then((value) { // TODO remove this method later @@ -53,8 +51,6 @@ class _MainBoardState extends State { }, onError: (error) { print(error); }); - - _mainBoardBloc.add(TimerTick(tickValue: currentTimerValue)); } @override @@ -68,7 +64,6 @@ class _MainBoardState extends State { print('FetchingLevel'); } else if (state is LevelFetched) { print('LevelFetched: ${state.boardList}'); - _boardList = List.from(state.boardList); // _initList.clear(); TODO: copy list to another list without same reference // _initList.addAll(state.boardList.map((element) => element).toList()); @@ -86,9 +81,8 @@ class _MainBoardState extends State { print('UpdateRowColState'); _row = state.row; _col = state.col; - } else if (state is TimerTickState) { - _timerText = state.tickValue; - print('TimerTickState: $_timerText'); + } else if (state is PauseTimerState) { + _isTimerPaused = state.isPaused; } }, child: @@ -109,27 +103,10 @@ class _MainBoardState extends State { print('settings'); }, child: Icon(Icons.settings, size: 25.0)), - Text( - '$_timerText', - style: TextStyle(fontSize: 19.0), - ), - InkWell( - onTap: () { - print('Pause'); - if (isTimerPaused) { - _mainBoardBloc - .add(TimerTick(tickValue: currentTimerValue)); - isTimerPaused = false; - } else { - _mainBoardBloc.add(PauseTimer()); - isTimerPaused = true; - } - }, - child: Icon( - isTimerPaused == true - ? Icons.play_arrow - : Icons.pause, - size: 30.0)), + CounterWidget(mainBoardBloc: _mainBoardBloc), + PlayPauseWidget( + isTimerPaused: _isTimerPaused, + mainBoardBloc: _mainBoardBloc), ], ), ), @@ -137,10 +114,7 @@ class _MainBoardState extends State { shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(20.0), ), - child: Table( - children: getTableRowLst(), // main board - border: new TableBorder.all(color: Color(kPrimaryColor)), - ), + child: buildTable(), ), Padding( padding: new EdgeInsets.only(top: 40.0), @@ -156,6 +130,13 @@ class _MainBoardState extends State { ); } + Table buildTable() { + return Table( + children: getTableBoardRow(), // main board + border: new TableBorder.all(color: Color(kPrimaryColor)), + ); + } + // Methods void changeConflicts() { @@ -184,7 +165,7 @@ class _MainBoardState extends State { return Color(kBoardCellEmpty); } - List getTableRowLst() { + List getTableBoardRow() { List lst = new List(); for (int r = 0; r < 9; r++) { lst.add(getTableRow(r)); diff --git a/lib/screens/board/main_board_bloc.dart b/lib/screens/board/main_board_bloc.dart index 936bdbed3..57ae52f3c 100644 --- a/lib/screens/board/main_board_bloc.dart +++ b/lib/screens/board/main_board_bloc.dart @@ -13,7 +13,14 @@ import '../../Board.dart'; class MainBoardBloc extends Bloc { Timer _timer; - int currentTimerValue = 0; + int _currentTimerValue = 0; + bool _isPaused = false; + + StreamController _timerController = StreamController(); + + StreamSink get _tickValue => _timerController.sink; + + Stream get outCounter => _timerController.stream; @override MainBoardState get initialState => InitialMainBoardState(); @@ -38,12 +45,14 @@ class MainBoardBloc extends Bloc { } else if (event is UpdateRowCol) { final list = _changeRowCol(event.row, event.col, event.list); if (list != null) yield UpdateRowColState(row: list[0], col: list[1]); - } else if (event is TimerTick) { + } else if (event is StartTimer) { _startTimer(); + _isPaused = false; + yield (PauseTimerState(isPaused: _isPaused)); } else if (event is PauseTimer) { _stopTimer(); - } else if (event is RestartTimer) { - _startTimer(); + _isPaused = true; + yield (PauseTimerState(isPaused: _isPaused)); } } @@ -53,14 +62,23 @@ class MainBoardBloc extends Bloc { } } - Stream _startTimer() { + void _startTimer() { _timer = Timer.periodic(Duration(seconds: 1), (timer) { - currentTimerValue = currentTimerValue + 1; + _currentTimerValue = _currentTimerValue + 1; final df = new DateFormat('mm:ss'); String _timerText = df.format( - new DateTime.fromMillisecondsSinceEpoch((currentTimerValue) * 1000)); + new DateTime.fromMillisecondsSinceEpoch((_currentTimerValue) * 1000)); + _handleLogic(_timerText); }); } + + void _handleLogic(data) { + _tickValue.add(data); + } + + void dispose() { + _timerController.close(); + } } // Read data from JSON File @@ -81,11 +99,12 @@ Future>> _readJson(BuildContext context) async { List> ans = []; for (int i = 0; i < list.length; i++) { ques.add(list[i].cast()); + } + for (int i = 0; i < ques.length; i++) { ans.add(list[i].cast()); } finalList.add(ques); - finalList.add(ans); return ques; } diff --git a/lib/screens/board/main_board_state.dart b/lib/screens/board/main_board_state.dart index 4f67e94bc..9bd57233c 100644 --- a/lib/screens/board/main_board_state.dart +++ b/lib/screens/board/main_board_state.dart @@ -58,7 +58,11 @@ class UpdateRowColState extends MainBoardState { // ========================= TIMER ============================= // class StartTimerState extends MainBoardState {} -class PauseTimerState extends MainBoardState {} +class PauseTimerState extends MainBoardState { + final bool isPaused; + + PauseTimerState({this.isPaused}); +} class RestartTimerState extends MainBoardState {} From 3fb82b7ecc22ec3a84bb735f0c0610ebb9b8790b Mon Sep 17 00:00:00 2001 From: New Pc First Commit <> Date: Mon, 20 Jan 2020 18:25:59 +0500 Subject: [PATCH 08/57] optmization --- lib/Board.dart | 27 ++----------------------- lib/models/row_col.dart | 22 ++++++++++++++++++++ lib/screens/board/board_screen.dart | 2 +- lib/screens/board/main_board_bloc.dart | 1 + lib/screens/board/main_board_state.dart | 3 +-- 5 files changed, 27 insertions(+), 28 deletions(-) create mode 100644 lib/models/row_col.dart diff --git a/lib/Board.dart b/lib/Board.dart index 11f959fd8..c92e6e949 100644 --- a/lib/Board.dart +++ b/lib/Board.dart @@ -1,5 +1,7 @@ import 'dart:collection'; +import 'models/row_col.dart'; + class Conflict { static HashSet getConflicts(List> grid) { HashSet result = new HashSet(); @@ -68,28 +70,3 @@ class Conflict { } } -class RowCol { - int r; - int c; - - RowCol(int r, int c) { - this.r = r; - this.c = c; - } - - @override - String toString() => "r:" + r.toString() + ",c:" + c.toString(); - - @override - // TODO: implement hashCode - int get hashCode => 10 * r + c; - - @override - bool operator ==(other) { - // TODO: implement == - return (this.r == other.r) && (this.c == other.c); - } -} - -void main() { -} diff --git a/lib/models/row_col.dart b/lib/models/row_col.dart new file mode 100644 index 000000000..156ceab7d --- /dev/null +++ b/lib/models/row_col.dart @@ -0,0 +1,22 @@ +class RowCol { + int r; + int c; + + RowCol(int r, int c) { + this.r = r; + this.c = c; + } + + @override + String toString() => "r:" + r.toString() + ",c:" + c.toString(); + + @override + // TODO: implement hashCode + int get hashCode => 10 * r + c; + + @override + bool operator ==(other) { + // TODO: implement == + return (this.r == other.r) && (this.c == other.c); + } +} diff --git a/lib/screens/board/board_screen.dart b/lib/screens/board/board_screen.dart index 947f8676c..09329fb30 100644 --- a/lib/screens/board/board_screen.dart +++ b/lib/screens/board/board_screen.dart @@ -6,9 +6,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:sudoku_brain/components/play_pause_widget.dart'; import 'package:sudoku_brain/components/timer_widget.dart'; +import 'package:sudoku_brain/models/row_col.dart'; import 'package:sudoku_brain/utils/Constants.dart'; -import '../../Board.dart'; import 'main_board_bloc.dart'; import 'main_board_event.dart'; import 'main_board_state.dart'; diff --git a/lib/screens/board/main_board_bloc.dart b/lib/screens/board/main_board_bloc.dart index 57ae52f3c..8c64c9b97 100644 --- a/lib/screens/board/main_board_bloc.dart +++ b/lib/screens/board/main_board_bloc.dart @@ -6,6 +6,7 @@ import 'package:bloc/bloc.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; +import 'package:sudoku_brain/models/row_col.dart'; import 'package:sudoku_brain/utils/Constants.dart'; import './bloc.dart'; diff --git a/lib/screens/board/main_board_state.dart b/lib/screens/board/main_board_state.dart index 9bd57233c..008b7fd9e 100644 --- a/lib/screens/board/main_board_state.dart +++ b/lib/screens/board/main_board_state.dart @@ -2,8 +2,7 @@ import 'dart:collection'; import 'package:flutter/cupertino.dart'; import 'package:meta/meta.dart'; - -import '../../Board.dart'; +import 'package:sudoku_brain/models/row_col.dart'; @immutable abstract class MainBoardState {} From 0efc4e138c9ef5cb167decd637623826db5ce642 Mon Sep 17 00:00:00 2001 From: New Pc First Commit <> Date: Tue, 21 Jan 2020 18:04:18 +0500 Subject: [PATCH 09/57] panel+ game finishing detection --- lib/Board.dart | 18 ++++++++++- lib/components/panel.dart | 47 +++++++++++++++++++++++++++++ lib/screens/board/board_screen.dart | 2 ++ lib/utils/Constants.dart | 7 +++++ 4 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 lib/components/panel.dart diff --git a/lib/Board.dart b/lib/Board.dart index c92e6e949..84473a3d9 100644 --- a/lib/Board.dart +++ b/lib/Board.dart @@ -8,6 +8,7 @@ class Conflict { computeRowConflicts(grid, result); computeColConflicts(grid, result); computeBlockConflicts(grid, result); + computeFinishGame(grid); return result; } @@ -16,6 +17,9 @@ class Conflict { HashMap usedNumToRowCol = new HashMap(); for (int c = 0; c < 9; c++) { int newNum = grid[r][c]; + +// print('[$r][$c]=${grid[r][c]}'); + if (newNum == 0) continue; if (usedNumToRowCol.containsKey(newNum)) { res.add(new RowCol(r, c)); @@ -41,6 +45,19 @@ class Conflict { } } + // Check to finish game + static void computeFinishGame(List> grid) { + for (int c = 0; c < 9; c++) { + for (int r = 0; r < 9; r++) { + int newNum = grid[r][c]; + if (newNum == 0) { + print('Not Finished'); + return; + } + } + } + } + static void computeBlockConflicts(List> grid, HashSet res) { blockConf(0, 0, grid, res); blockConf(0, 3, grid, res); @@ -69,4 +86,3 @@ class Conflict { } } } - diff --git a/lib/components/panel.dart b/lib/components/panel.dart new file mode 100644 index 000000000..9dccdc757 --- /dev/null +++ b/lib/components/panel.dart @@ -0,0 +1,47 @@ +// counter_page.dart +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; + +class Count extends StatelessWidget { + final Function(int) onCountChange; + final Color activeColor; + final Color inactiveColor; + + Count( + {Key key, + @required this.onCountChange, + this.activeColor, + this.inactiveColor}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + color: Colors.blue, + margin: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 10.0), + padding: EdgeInsets.fromLTRB(10.0, 0.0, 10.0, 0.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + IconButton( + icon: Icon( + Icons.update, + color: activeColor, + ), + onPressed: () { + onCountChange(2); + }, + ), + IconButton( + icon: Icon(Icons.remove), + onPressed: () { + onCountChange(3); + }, + ), + ], + ), + ); + } +} + + diff --git a/lib/screens/board/board_screen.dart b/lib/screens/board/board_screen.dart index 09329fb30..3f74884f8 100644 --- a/lib/screens/board/board_screen.dart +++ b/lib/screens/board/board_screen.dart @@ -4,6 +4,7 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:sudoku_brain/components/panel.dart'; import 'package:sudoku_brain/components/play_pause_widget.dart'; import 'package:sudoku_brain/components/timer_widget.dart'; import 'package:sudoku_brain/models/row_col.dart'; @@ -116,6 +117,7 @@ class _MainBoardState extends State { ), child: buildTable(), ), + Padding( padding: new EdgeInsets.only(top: 40.0), child: new Table( diff --git a/lib/utils/Constants.dart b/lib/utils/Constants.dart index 66d82e49e..4b015643b 100644 --- a/lib/utils/Constants.dart +++ b/lib/utils/Constants.dart @@ -1,5 +1,7 @@ // Colors +import 'package:flutter/foundation.dart'; + const kPrimaryColor = 0xFF220E4A; const kBoardTextColor = 0xFF737272; const kBoardCellSelected = 0xFF80C3FF; @@ -23,4 +25,9 @@ List> constantList = [ ]; +// Enums +//enum SelectionType{ +// +//} + From 9ac7b4fded265080449fdac32370dbf1c6a2121e Mon Sep 17 00:00:00 2001 From: New Pc First Commit <> Date: Wed, 22 Jan 2020 18:18:14 +0500 Subject: [PATCH 10/57] numpad widget design/functionality --- lib/components/num_pad.dart | 53 ++++++++++++++++++++++++++ lib/components/numpad_button.dart | 33 ++++++++++++++++ lib/screens/board/board_screen.dart | 52 ++++++++++++++++++++----- lib/screens/board/main_board_bloc.dart | 2 +- lib/{ => utils}/Board.dart | 4 +- 5 files changed, 131 insertions(+), 13 deletions(-) create mode 100644 lib/components/num_pad.dart create mode 100644 lib/components/numpad_button.dart rename lib/{ => utils}/Board.dart (98%) diff --git a/lib/components/num_pad.dart b/lib/components/num_pad.dart new file mode 100644 index 000000000..a3de55ec5 --- /dev/null +++ b/lib/components/num_pad.dart @@ -0,0 +1,53 @@ +import 'package:flutter/material.dart'; + +import 'numpad_button.dart'; + +class NumPad extends StatelessWidget { + final List values; + final double marginTop; + final double marginRight; + final double marginBottom; + final double marginLeft; + final MainAxisAlignment mainAxisAlignment; + final Function(int) onValueChanged; + + NumPad( + {@required this.values, + this.marginBottom, + this.marginLeft, + this.marginRight, + this.marginTop, + this.mainAxisAlignment, + @required this.onValueChanged}); + + @override + Widget build(BuildContext context) { + return Container( + margin: EdgeInsets.only( + top: marginTop, + right: marginRight, + left: marginLeft, + bottom: marginBottom), + width: double.infinity, + child: Row( + mainAxisAlignment: mainAxisAlignment, + children: generateButtons(values), + ), + ); + } + + List generateButtons(List values) { + List list = []; + for (int i = 0; i < values.length; i++) { + list.add( + NumPadButton( + value: values[i], + onClick: (int val) { + onValueChanged(val); + }, + ), + ); + } + return list; + } +} diff --git a/lib/components/numpad_button.dart b/lib/components/numpad_button.dart new file mode 100644 index 000000000..715c82a3b --- /dev/null +++ b/lib/components/numpad_button.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; + +class NumPadButton extends StatelessWidget { + final int value; + final Function(int) onClick; + + NumPadButton({@required this.value, @required this.onClick}); + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () { + onClick(value); + }, + child: Container( + width: 40.0, + height: 40.0, + decoration: new BoxDecoration( + color: Colors.transparent, + border: Border.all(width: 2.0, color: Color(kNumPadBorder))), + child: Center( + child: Text( + '$value', + style: TextStyle( + fontSize: 20.0, + color: Color(kNumPadBorder), + fontWeight: FontWeight.bold), + ), + )), + ); + } +} diff --git a/lib/screens/board/board_screen.dart b/lib/screens/board/board_screen.dart index 3f74884f8..ace1564e1 100644 --- a/lib/screens/board/board_screen.dart +++ b/lib/screens/board/board_screen.dart @@ -2,9 +2,10 @@ import 'dart:async'; import 'dart:collection'; import 'dart:convert'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:sudoku_brain/components/panel.dart'; +import 'package:sudoku_brain/components/num_pad.dart'; import 'package:sudoku_brain/components/play_pause_widget.dart'; import 'package:sudoku_brain/components/timer_widget.dart'; import 'package:sudoku_brain/models/row_col.dart'; @@ -96,7 +97,6 @@ class _MainBoardState extends State { Container( height: 40.0, child: Row( - crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ InkWell( @@ -117,15 +117,41 @@ class _MainBoardState extends State { ), child: buildTable(), ), + NumPad( + values: [1, 2, 3, 4, 5], + marginTop: 90.0, + marginRight: 30.0, + marginLeft: 30.0, + marginBottom: 0.0, + mainAxisAlignment: MainAxisAlignment.spaceAround, + onValueChanged: (int val) { + print('NumPad: $val'); - Padding( - padding: new EdgeInsets.only(top: 40.0), - child: new Table( - children: getKeyRowlst(), - border: new TableBorder.all( - color: Color(kNumPadBorder), - ), - )) + _numPadButtonClick(val); + }, + ), + NumPad( + values: [6, 7, 8, 9], + marginTop: 15.0, + marginRight: 35.0, + marginLeft: 35.0, + marginBottom: 0.0, + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + onValueChanged: (int val) { + print('NumPad: $val'); + _numPadButtonClick(val); + }), + Visibility( + visible: false, + child: Padding( + padding: new EdgeInsets.only(top: 40.0), + child: new Table( + children: getKeyRowlst(), + border: new TableBorder.all( + color: Color(kNumPadBorder), + ), + )), + ) ])), ); }), @@ -139,6 +165,12 @@ class _MainBoardState extends State { ); } + void _numPadButtonClick(int value) { + changeCursor(value); + _mainBoardBloc.add(UpdateCellValue(val: value)); + changeConflicts(); + } + // Methods void changeConflicts() { diff --git a/lib/screens/board/main_board_bloc.dart b/lib/screens/board/main_board_bloc.dart index 8c64c9b97..30a76728f 100644 --- a/lib/screens/board/main_board_bloc.dart +++ b/lib/screens/board/main_board_bloc.dart @@ -10,7 +10,7 @@ import 'package:sudoku_brain/models/row_col.dart'; import 'package:sudoku_brain/utils/Constants.dart'; import './bloc.dart'; -import '../../Board.dart'; +import '../../utils/Board.dart'; class MainBoardBloc extends Bloc { Timer _timer; diff --git a/lib/Board.dart b/lib/utils/Board.dart similarity index 98% rename from lib/Board.dart rename to lib/utils/Board.dart index 84473a3d9..10fa927f1 100644 --- a/lib/Board.dart +++ b/lib/utils/Board.dart @@ -1,6 +1,6 @@ import 'dart:collection'; -import 'models/row_col.dart'; +import '../models/row_col.dart'; class Conflict { static HashSet getConflicts(List> grid) { @@ -52,7 +52,7 @@ class Conflict { int newNum = grid[r][c]; if (newNum == 0) { print('Not Finished'); - return; + return; } } } From b77088052eb1922fe1b721ff8f8e71857968a244 Mon Sep 17 00:00:00 2001 From: New Pc First Commit <> Date: Thu, 23 Jan 2020 18:43:57 +0500 Subject: [PATCH 11/57] panel widget made generic/add and pause overlay/ reset option/ --- android/app/src/main/res/values/styles.xml | 2 + lib/components/animated.dart | 64 +++++++++ lib/components/panel.dart | 105 +++++++++----- lib/components/panel_button.dart | 27 ++++ lib/screens/board/board_screen.dart | 153 +++++++++++---------- lib/screens/board/main_board_bloc.dart | 29 +++- lib/screens/board/main_board_event.dart | 8 ++ lib/screens/board/main_board_state.dart | 12 ++ lib/utils/Constants.dart | 5 + 9 files changed, 295 insertions(+), 110 deletions(-) create mode 100644 lib/components/animated.dart create mode 100644 lib/components/panel_button.dart diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index 00fa4417c..730af6fb6 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -5,4 +5,6 @@ Flutter draws its first frame --> @drawable/launch_background + + diff --git a/lib/components/animated.dart b/lib/components/animated.dart new file mode 100644 index 000000000..2297f922a --- /dev/null +++ b/lib/components/animated.dart @@ -0,0 +1,64 @@ +import 'package:flutter/material.dart'; + +void main() => runApp(new App()); + +class App extends StatelessWidget { + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Title', + home: AnimateContentExample(), + ); + } +} + +class AnimateContentExample extends StatefulWidget { + @override + _AnimateContentExampleState createState() => + new _AnimateContentExampleState(); +} + +class _AnimateContentExampleState extends State { + double _animatedHeight = 100.0; + + @override + Widget build(BuildContext context) { + return new Scaffold( + appBar: new AppBar( + title: new Text("Animate Content"), + ), + body: new Column( + children: [ + new Card( + child: new Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + new GestureDetector( + onTap: () => setState(() { + _animatedHeight != 0.0 + ? _animatedHeight = 0.0 + : _animatedHeight = 100.0; + }), + child: new Container( + child: new Text("CLICK ME"), + color: Colors.blueAccent, + height: 25.0, + width: 100.0, + ), + ), + new AnimatedContainer( + duration: const Duration(milliseconds: 120), + child: new Text("Toggle Me"), + height: _animatedHeight, + color: Colors.tealAccent, + width: 100.0, + ) + ], + ), + ) + ], + ), + ); + } +} diff --git a/lib/components/panel.dart b/lib/components/panel.dart index 9dccdc757..a6e9d9453 100644 --- a/lib/components/panel.dart +++ b/lib/components/panel.dart @@ -1,47 +1,82 @@ // counter_page.dart -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:sudoku_brain/components/panel_button.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; -class Count extends StatelessWidget { - final Function(int) onCountChange; - final Color activeColor; - final Color inactiveColor; +class Panel extends StatefulWidget { + final Function(int) onSegmentChange; - Count( - {Key key, - @required this.onCountChange, - this.activeColor, - this.inactiveColor}) - : super(key: key); + Panel({@required this.onSegmentChange}); + + @override + _PanelState createState() => _PanelState(); +} + +class _PanelState extends State { + final List _icons = [ + Icons.fullscreen, + Icons.delete, + Icons.refresh, + Icons.lightbulb_outline, + Icons.edit + ]; + + List _selectedImageColor = [ + Colors.white, + Colors.white, + Colors.white, + Colors.white, + Colors.white + ]; + + int _segmentedControlValue = -1; @override Widget build(BuildContext context) { - return Container( - color: Colors.blue, - margin: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 10.0), - padding: EdgeInsets.fromLTRB(10.0, 0.0, 10.0, 0.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - IconButton( - icon: Icon( - Icons.update, - color: activeColor, - ), - onPressed: () { - onCountChange(2); - }, - ), - IconButton( - icon: Icon(Icons.remove), - onPressed: () { - onCountChange(3); - }, - ), - ], + return ClipRRect( + borderRadius: BorderRadius.circular(140.0), + child: Container( + color: Color(kPanelBg), + margin: EdgeInsets.fromLTRB(40.0, 20.0, 40.0, 10.0), + padding: EdgeInsets.fromLTRB(10.0, 0.0, 10.0, 0.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: generateIcons(), + ), ), ); } -} + List generateIcons() { + List list = []; + + for (int i = 0; i < _icons.length; i++) { + list.add( + PanelButton( + value: i, + icon: _icons[i], + color: _selectedImageColor[i], + onClick: (int val) { + _segmentedControlValue = i; + print('val: $val'); + setState(() { + widget.onSegmentChange(val); + changeSelectionColor(); + }); + }, + ), + ); + } + return list; + } + void changeSelectionColor() { + for (int i = 0; i < _selectedImageColor.length; i++) { + if (_segmentedControlValue == i) { + _selectedImageColor[i] = Color(kBoardCellSelected); + } else { + _selectedImageColor[i] = Colors.white; + } + } + } +} diff --git a/lib/components/panel_button.dart b/lib/components/panel_button.dart new file mode 100644 index 000000000..5e8be6174 --- /dev/null +++ b/lib/components/panel_button.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; + +class PanelButton extends StatelessWidget { + final int value; + final Function(int) onClick; + final IconData icon; + final Color color; + + PanelButton( + {@required this.value, + @required this.icon, + this.color, + @required this.onClick}); + + @override + Widget build(BuildContext context) { + return IconButton( + icon: Icon( + icon, + color: color, + ), + onPressed: () { + onClick(value); + }, + ); + } +} diff --git a/lib/screens/board/board_screen.dart b/lib/screens/board/board_screen.dart index ace1564e1..06b31240a 100644 --- a/lib/screens/board/board_screen.dart +++ b/lib/screens/board/board_screen.dart @@ -6,6 +6,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:sudoku_brain/components/num_pad.dart'; +import 'package:sudoku_brain/components/panel.dart'; import 'package:sudoku_brain/components/play_pause_widget.dart'; import 'package:sudoku_brain/components/timer_widget.dart'; import 'package:sudoku_brain/models/row_col.dart'; @@ -30,6 +31,8 @@ class _MainBoardState extends State { int _cursor = 0; + double _animatedHeight = 40.0; + bool _isTimerPaused = false; List> _boardList = constantList; @@ -85,6 +88,16 @@ class _MainBoardState extends State { _col = state.col; } else if (state is PauseTimerState) { _isTimerPaused = state.isPaused; + } else if (state is ResetState) { + _boardList = List.from(state.boardList); + changeConflicts(); + } else if (state is FullScreenState) { + print('state.isFull ${state.isFull}'); +// _isFullScreen = state.isFull; + + _animatedHeight != 0.0 + ? _animatedHeight = 0.0 + : _animatedHeight = 40.0; } }, child: @@ -94,32 +107,81 @@ class _MainBoardState extends State { child: Scaffold( backgroundColor: Color(kPrimaryColor), body: Column(children: [ + AnimatedContainer( + height: _animatedHeight, + duration: const Duration(milliseconds: 150), + child: Container( + margin: EdgeInsets.only(top: 5.0, left: 10.0, right: 10.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + InkWell( + onTap: () { + print('settings'); + }, + child: Icon(Icons.settings, size: 25.0)), + CounterWidget(mainBoardBloc: _mainBoardBloc), + PlayPauseWidget( + isTimerPaused: _isTimerPaused, + mainBoardBloc: _mainBoardBloc), + ], + ), + ), + ), Container( - height: 40.0, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + child: Stack( children: [ - InkWell( - onTap: () { - print('settings'); - }, - child: Icon(Icons.settings, size: 25.0)), - CounterWidget(mainBoardBloc: _mainBoardBloc), - PlayPauseWidget( - isTimerPaused: _isTimerPaused, - mainBoardBloc: _mainBoardBloc), + Positioned( + child: Container( + child: Card( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(20.0), + ), + child: buildTable(), + ), + ), + ), + Positioned( + child: Visibility( + visible: _isTimerPaused, + child: Container( + width: double.infinity, + height: MediaQuery.of(context).size.height * 0.5, + color: transparent, + child: Center( + child: Text( + 'PAUSE', + style: TextStyle( + fontSize: 40.0, + fontWeight: FontWeight.bold, + color: Colors.yellow), + )), + ), + ), + ) ], ), ), - Card( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(20.0), - ), - child: buildTable(), + Panel( + onSegmentChange: (int segmentValue) { + print('segmentValue: $segmentValue'); + + switch (segmentValue) { + case 0: + _mainBoardBloc.add(FullScreen()); + break; + case 1: + _numPadButtonClick(0); + break; + case 2: + _mainBoardBloc.add(ResetBoard(list: _initBoardList)); + break; + } + }, ), NumPad( values: [1, 2, 3, 4, 5], - marginTop: 90.0, + marginTop: 20.0, marginRight: 30.0, marginLeft: 30.0, marginBottom: 0.0, @@ -141,17 +203,6 @@ class _MainBoardState extends State { print('NumPad: $val'); _numPadButtonClick(val); }), - Visibility( - visible: false, - child: Padding( - padding: new EdgeInsets.only(top: 40.0), - child: new Table( - children: getKeyRowlst(), - border: new TableBorder.all( - color: Color(kNumPadBorder), - ), - )), - ) ])), ); }), @@ -254,41 +305,6 @@ class _MainBoardState extends State { return new TableRow(children: lst); } - List getKeyRowlst() { - List lst = new List(); - lst.add(getKeyRow(0)); - lst.add(getKeyRow(5)); - return lst; - } - - TableRow getKeyRow(int c) { - List lst = new List(); - for (int i = 0; i <= 4; i++) { - Color containerColor = Color(kPrimaryColor); - if (_cursor == i + c) containerColor = Color(kNumPadBorder); - lst.add( - new Container( - color: containerColor, - child: InkWell( - onTap: () { - print((i + c).toString()); - changeCursor(i + c); - _mainBoardBloc.add(UpdateCellValue(val: i + c)); - changeConflicts(); - }, - child: Center( - child: Text( - '${(i + c).toString()}', - style: TextStyle(fontSize: 30.0), - ), - ), - ), - ), - ); - } - return new TableRow(children: lst); - } - // TODO: remove it later Future>> readJson() async { print('readJson'); @@ -307,13 +323,4 @@ class _MainBoardState extends State { } return ques; } - - // Resets the whole screens.board. TODO: move it to bloc class - void reset() { - setState(() { - _boardList = new List>.generate( - 9, (i) => new List.from(_initBoardList[i])); - changeConflicts(); - }); - } } diff --git a/lib/screens/board/main_board_bloc.dart b/lib/screens/board/main_board_bloc.dart index 30a76728f..a9ef2e213 100644 --- a/lib/screens/board/main_board_bloc.dart +++ b/lib/screens/board/main_board_bloc.dart @@ -16,12 +16,14 @@ class MainBoardBloc extends Bloc { Timer _timer; int _currentTimerValue = 0; bool _isPaused = false; + bool _isFullScreen = true; - StreamController _timerController = StreamController(); + StreamController _timerController = + StreamController.broadcast(); StreamSink get _tickValue => _timerController.sink; - Stream get outCounter => _timerController.stream; + Stream get outCounter => _timerController.stream.asBroadcastStream(); @override MainBoardState get initialState => InitialMainBoardState(); @@ -54,6 +56,12 @@ class MainBoardBloc extends Bloc { _stopTimer(); _isPaused = true; yield (PauseTimerState(isPaused: _isPaused)); + } else if (event is ResetBoard) { + final list = reset(event.list); + yield ResetState(boardList: list); + } else if (event is FullScreen) { + final full = fullScreen(); + yield FullScreenState(isFull: full); } } @@ -79,6 +87,17 @@ class MainBoardBloc extends Bloc { void dispose() { _timerController.close(); + _tickValue.close(); + } + + bool fullScreen() { + if (_isFullScreen) { + _isFullScreen = false; + } else { + _isFullScreen = true; + } + + return _isFullScreen; } } @@ -136,6 +155,12 @@ List _changeRowCol(int row, int col, List> list) { } // +List> reset(List> _initBoardList) { + List> list = new List>.generate( + 9, (i) => new List.from(_initBoardList[i])); + + return list; +} // Color getHighlightColorBloc(int selRow, int selCol, int row, int col, diff --git a/lib/screens/board/main_board_event.dart b/lib/screens/board/main_board_event.dart index ccc0a860a..b88bf0523 100644 --- a/lib/screens/board/main_board_event.dart +++ b/lib/screens/board/main_board_event.dart @@ -36,6 +36,14 @@ class UpdateRowCol extends MainBoardEvent { UpdateRowCol({this.row, this.col, this.list}); } +class ResetBoard extends MainBoardEvent { + final List> list; + + ResetBoard({this.list}); +} + +class FullScreen extends MainBoardEvent {} + //================================== TIMER =========================================// class StartTimer extends MainBoardEvent {} diff --git a/lib/screens/board/main_board_state.dart b/lib/screens/board/main_board_state.dart index 008b7fd9e..6f2aea8e6 100644 --- a/lib/screens/board/main_board_state.dart +++ b/lib/screens/board/main_board_state.dart @@ -47,6 +47,12 @@ class UpdateCellState extends MainBoardState { UpdateCellState({this.val}); } +class FullScreenState extends MainBoardState { + final bool isFull; + + FullScreenState({this.isFull}); +} + class UpdateRowColState extends MainBoardState { final int row; final int col; @@ -54,6 +60,12 @@ class UpdateRowColState extends MainBoardState { UpdateRowColState({this.row, this.col}); } +class ResetState extends MainBoardState { + final List> boardList; + + ResetState({this.boardList}); +} + // ========================= TIMER ============================= // class StartTimerState extends MainBoardState {} diff --git a/lib/utils/Constants.dart b/lib/utils/Constants.dart index 4b015643b..d562a5242 100644 --- a/lib/utils/Constants.dart +++ b/lib/utils/Constants.dart @@ -1,6 +1,7 @@ // Colors import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; const kPrimaryColor = 0xFF220E4A; const kBoardTextColor = 0xFF737272; @@ -9,6 +10,10 @@ const kBoardCellEmpty = 0xFFFFF3D2; const kBoardBorder = 0xFFE2E6E7; const kBoardPreFilled = 0xFFFCD0A3; const kNumPadBorder = 0xFFABDCFF; +const kPanelBg = 0xFF38356e; +const transparent = Color(0xca000000); + + // init list From afdbb5db22c2a6db2c9e4f08a4c75ec0e95c21c4 Mon Sep 17 00:00:00 2001 From: New Pc First Commit <> Date: Mon, 27 Jan 2020 19:19:37 +0500 Subject: [PATCH 12/57] UI matching --- lib/screens/board/board_screen.dart | 76 ++++++++++++++++++++++--- lib/screens/board/main_board_bloc.dart | 35 ++++++++---- lib/screens/board/main_board_state.dart | 6 ++ lib/utils/Board.dart | 8 +-- lib/utils/Constants.dart | 48 ++++++++++------ pubspec.lock | 2 +- pubspec.yaml | 1 + 7 files changed, 136 insertions(+), 40 deletions(-) diff --git a/lib/screens/board/board_screen.dart b/lib/screens/board/board_screen.dart index 06b31240a..d9842bbc6 100644 --- a/lib/screens/board/board_screen.dart +++ b/lib/screens/board/board_screen.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'dart:collection'; import 'dart:convert'; +import 'dart:math'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -26,10 +27,12 @@ class MainBoard extends StatefulWidget { class _MainBoardState extends State { MainBoardBloc _mainBoardBloc; - int _row = 0; - int _col = 0; - + int _row = -1; + int _col = -1; int _cursor = 0; + int _cursorCopy = -1; + + String _dynamicText; double _animatedHeight = 40.0; @@ -69,6 +72,7 @@ class _MainBoardState extends State { print('FetchingLevel'); } else if (state is LevelFetched) { print('LevelFetched: ${state.boardList}'); +// _boardList = List.from(dummyList); _boardList = List.from(state.boardList); // _initList.clear(); TODO: copy list to another list without same reference // _initList.addAll(state.boardList.map((element) => element).toList()); @@ -78,6 +82,10 @@ class _MainBoardState extends State { _conflicts = state.conflicts; } else if (state is CursorChangedState) { _cursor = state.val; + _cursorCopy = state.val; + if (state.val == 0) { + _cursorCopy = -1; + } print('cursor: $_cursor'); } else if (state is UpdateCellState) { _boardList[_row][_col] = state.val; @@ -88,6 +96,7 @@ class _MainBoardState extends State { _col = state.col; } else if (state is PauseTimerState) { _isTimerPaused = state.isPaused; + _dynamicText = 'PAUSE'; } else if (state is ResetState) { _boardList = List.from(state.boardList); changeConflicts(); @@ -98,6 +107,15 @@ class _MainBoardState extends State { _animatedHeight != 0.0 ? _animatedHeight = 0.0 : _animatedHeight = 40.0; + } else if (state is GameFinishedState) { + print('game finished hurry'); + print('game won: ${state.isWon}'); + _isTimerPaused = true; + if (state.isWon) { + _dynamicText = 'You Won!'; + } else { + _dynamicText = 'You Lost!'; + } } }, child: @@ -150,7 +168,7 @@ class _MainBoardState extends State { color: transparent, child: Center( child: Text( - 'PAUSE', + '$_dynamicText', style: TextStyle( fontSize: 40.0, fontWeight: FontWeight.bold, @@ -235,21 +253,54 @@ class _MainBoardState extends State { Color getHighlightColor(int r, int c) { bool isConflict = _conflicts.contains(new RowCol(r, c)); bool isChangeAble = _initBoardList[r][c] == 0; + bool isToHighlight = _boardList[r][c] == _cursorCopy; if (r == _row && c == _col) { return Color(kBoardCellSelected); } + if (r == _row && !isConflict) { + return Colors.blue[100]; + } else if (r == _row && isConflict) { + return Colors.red[100]; + } + + if (c == _col && !isConflict) { + return Colors.blue[100]; + } else if (c == _col && isConflict) { + return Colors.red[100]; + } + if (isConflict && !isChangeAble) - return Colors.red[900]; - else if (isConflict) return Colors.red[100]; - else if (!isChangeAble) + else if (isConflict) + return Color(kBoardCellEmpty); + else if (isToHighlight) return Color(kBoardPreFilled); else return Color(kBoardCellEmpty); } + + + Color getTextColor(int r, int c) { + bool isConflict = _conflicts.contains(new RowCol(r, c)); + bool isChangeAble = _initBoardList[r][c] == 0; + + if (r == _row && c == _col && !isConflict) { + return Colors.black; + } + + if (isConflict && !isChangeAble) + return Colors.black; + else if (isConflict) + return Colors.red; + else if (!isChangeAble) + return Colors.black; + else + return Colors.black; + } + List getTableBoardRow() { List lst = new List(); for (int r = 0; r < 9; r++) { @@ -280,6 +331,7 @@ class _MainBoardState extends State { thickness: 2.0, ), ), + Spacer(), Row( children: [ Visibility( @@ -290,13 +342,19 @@ class _MainBoardState extends State { color: Color(kPrimaryColor), ), ), + Spacer(), Text( _boardList[r][c] == 0 ? '' : '${_boardList[r][c]}', + textAlign: TextAlign.center, style: TextStyle( - fontSize: 20.0, color: Color(kBoardTextColor)), - ) + fontSize: 20.0, + color: getTextColor(r, c), + ), + ), + Spacer(), ], ), + Spacer(), ], ), ), diff --git a/lib/screens/board/main_board_bloc.dart b/lib/screens/board/main_board_bloc.dart index a9ef2e213..62143973d 100644 --- a/lib/screens/board/main_board_bloc.dart +++ b/lib/screens/board/main_board_bloc.dart @@ -3,6 +3,7 @@ import 'dart:collection'; import 'dart:convert'; import 'package:bloc/bloc.dart'; +import 'package:collection/collection.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; @@ -17,6 +18,7 @@ class MainBoardBloc extends Bloc { int _currentTimerValue = 0; bool _isPaused = false; bool _isFullScreen = true; + List> _solution; StreamController _timerController = StreamController.broadcast(); @@ -34,11 +36,18 @@ class MainBoardBloc extends Bloc { ) async* { if (event is BoardInitISCalled) { yield FetchingLevel(); - final list = await _readJson(event.context); + final list = await _readJson(event.context, 'easy'); + _solution = await _readJson(event.context, 'easy_solution'); + print('_solution" $_solution'); yield LevelFetched(boardList: list); } else if (event is ChangeConflictsCalled) { final conflicts = _changeConflicts(event.list); + final gameFinished = _gameFinished(event.list); yield ConflictsChanged(conflicts: conflicts); + if (gameFinished) { + final isWon = compareLists(event.list); + yield GameFinishedState(isWon: isWon); + } } else if (event is CursorChanged) { final cursor = _changeCursor(event.val); yield CursorChangedState(val: cursor); @@ -99,32 +108,33 @@ class MainBoardBloc extends Bloc { return _isFullScreen; } + + bool compareLists(List> list) { + print('compareLists'); + Function deepEq = const DeepCollectionEquality().equals; + bool res = deepEq(list, _solution); + print(res); // => true + return res; + } } // Read data from JSON File -Future>> _readJson(BuildContext context) async { +Future>> _readJson(BuildContext context, String objName) async { print('readJson'); - List>> finalList = List(); - String data = await DefaultAssetBundle.of(context).loadString("assets/brain.json"); // print('data: $data'); var decodedData = jsonDecode(data); - List list = decodedData['easy']; + List list = decodedData['$objName']; print('list: $list'); List> ques = []; - List> ans = []; for (int i = 0; i < list.length; i++) { ques.add(list[i].cast()); } - for (int i = 0; i < ques.length; i++) { - ans.add(list[i].cast()); - } - finalList.add(ques); return ques; } @@ -134,6 +144,11 @@ HashSet _changeConflicts(List> boardList) { return _conflicts; } +bool _gameFinished(List> boardList) { + bool isFinished = Conflict.computeFinishGame(boardList); + return isFinished; +} + // Change cursor int _changeCursor(int val) { return val; diff --git a/lib/screens/board/main_board_state.dart b/lib/screens/board/main_board_state.dart index 6f2aea8e6..ab7ab9736 100644 --- a/lib/screens/board/main_board_state.dart +++ b/lib/screens/board/main_board_state.dart @@ -35,6 +35,12 @@ class ConflictsChanged extends MainBoardState { ConflictsChanged({this.conflicts}); } +class GameFinishedState extends MainBoardState { + final bool isWon; + + GameFinishedState({this.isWon}); +} + class CursorChangedState extends MainBoardState { final int val; diff --git a/lib/utils/Board.dart b/lib/utils/Board.dart index 10fa927f1..fbd031ea2 100644 --- a/lib/utils/Board.dart +++ b/lib/utils/Board.dart @@ -8,7 +8,6 @@ class Conflict { computeRowConflicts(grid, result); computeColConflicts(grid, result); computeBlockConflicts(grid, result); - computeFinishGame(grid); return result; } @@ -46,16 +45,17 @@ class Conflict { } // Check to finish game - static void computeFinishGame(List> grid) { + static bool computeFinishGame(List> grid) { + bool isGameFinished = true; for (int c = 0; c < 9; c++) { for (int r = 0; r < 9; r++) { int newNum = grid[r][c]; if (newNum == 0) { - print('Not Finished'); - return; + isGameFinished = false; } } } + return isGameFinished; } static void computeBlockConflicts(List> grid, HashSet res) { diff --git a/lib/utils/Constants.dart b/lib/utils/Constants.dart index d562a5242..3a3723a92 100644 --- a/lib/utils/Constants.dart +++ b/lib/utils/Constants.dart @@ -1,6 +1,4 @@ - // Colors -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; const kPrimaryColor = 0xFF220E4A; @@ -13,26 +11,44 @@ const kNumPadBorder = 0xFFABDCFF; const kPanelBg = 0xFF38356e; const transparent = Color(0xca000000); - - - // init list List> constantList = [ -[0, 0, 0, 0, 0, 0, 0, 0, 0], -[0, 0, 0, 0, 0, 0, 0, 0, 0], -[0, 0, 0, 0, 0, 0, 0, 0, 0], -[0, 0, 0, 0, 0, 0, 0, 0, 0], -[0, 0, 0, 0, 0, 0, 0, 0, 0], -[0, 0, 0, 0, 0, 0, 0, 0, 0], -[0, 0, 0, 0, 0, 0, 0, 0, 0], -[0, 0, 0, 0, 0, 0, 0, 0, 0], -[0, 0, 0, 0, 0, 0, 0, 0, 0] + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0] ]; +List> dummyList1 = [ + [8, 6, 2, 7, 3, 9, 1, 4, 5], + [4, 3, 1, 2, 5, 6, 7, 8, 9], + [9, 5, 7, 1, 4, 8, 6, 3, 2], + [2, 8, 3, 4, 6, 5, 9, 1, 7], + [5, 1, 6, 8, 9, 7, 4, 2, 3], + [7, 9, 4, 3, 1, 2, 8, 5, 6], + [1, 2, 9, 5, 7, 4, 3, 6, 8], + [6, 4, 5, 9, 8, 3, 2, 7, 1], + [3, 7, 8, 6, 2, 1, 5, 9, 4] +]; + +List> dummyList = [ + [8, 0, 2, 7, 3, 9, 1, 4, 5], + [4, 3, 1, 2, 5, 6, 7, 8, 9], + [9, 5, 7, 1, 4, 8, 6, 3, 2], + [2, 8, 3, 4, 0, 5, 9, 1, 7], + [5, 1, 6, 8, 9, 7, 4, 2, 3], + [7, 9, 4, 3, 1, 2, 8, 5, 6], + [1, 2, 9, 5, 7, 4, 3, 6, 8], + [6, 4, 5, 9, 8, 3, 2, 7, 1], + [3, 7, 8, 6, 2, 1, 5, 9, 0] +]; // Enums //enum SelectionType{ // //} - - diff --git a/pubspec.lock b/pubspec.lock index 3bea1b7b3..836bb0a4f 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -44,7 +44,7 @@ packages: source: hosted version: "1.1.2" collection: - dependency: transitive + dependency: "direct main" description: name: collection url: "https://pub.dartlang.org" diff --git a/pubspec.yaml b/pubspec.yaml index 5ffe380d5..817e89c4f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -25,6 +25,7 @@ dependencies: cupertino_icons: ^0.1.2 intl: ^0.16.1 flutter_bloc: ^3.1.0 + collection: ^1.14.11 dev_dependencies: flutter_test: From f38542be982e371fcb7aeec2a9572244bcf83d4e Mon Sep 17 00:00:00 2001 From: zahidch052 Date: Tue, 28 Jan 2020 23:05:58 +0500 Subject: [PATCH 13/57] UI matching --- assets/brain.json | 16 -------- lib/components/numpad_button.dart | 4 +- lib/components/panel.dart | 2 +- lib/screens/board/board_screen.dart | 51 +++++++++++++------------- lib/screens/board/main_board_bloc.dart | 2 +- lib/utils/Constants.dart | 4 +- 6 files changed, 33 insertions(+), 46 deletions(-) diff --git a/assets/brain.json b/assets/brain.json index c98a3843d..ce7d8a3f0 100644 --- a/assets/brain.json +++ b/assets/brain.json @@ -1,21 +1,5 @@ { - "test": [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 5 - ], - "test1": [ - [0,1,2], - [0,1,2], - [0,1,2] - ], "easy": [ [ 0, diff --git a/lib/components/numpad_button.dart b/lib/components/numpad_button.dart index 715c82a3b..32371500f 100644 --- a/lib/components/numpad_button.dart +++ b/lib/components/numpad_button.dart @@ -14,8 +14,8 @@ class NumPadButton extends StatelessWidget { onClick(value); }, child: Container( - width: 40.0, - height: 40.0, + width: MediaQuery.of(context).size.width * 0.11, + height: MediaQuery.of(context).size.height * 0.06, decoration: new BoxDecoration( color: Colors.transparent, border: Border.all(width: 2.0, color: Color(kNumPadBorder))), diff --git a/lib/components/panel.dart b/lib/components/panel.dart index a6e9d9453..7f92d8f7a 100644 --- a/lib/components/panel.dart +++ b/lib/components/panel.dart @@ -73,7 +73,7 @@ class _PanelState extends State { void changeSelectionColor() { for (int i = 0; i < _selectedImageColor.length; i++) { if (_segmentedControlValue == i) { - _selectedImageColor[i] = Color(kBoardCellSelected); + _selectedImageColor[i] = kBoardCellSelected; } else { _selectedImageColor[i] = Colors.white; } diff --git a/lib/screens/board/board_screen.dart b/lib/screens/board/board_screen.dart index d9842bbc6..b95e7ef48 100644 --- a/lib/screens/board/board_screen.dart +++ b/lib/screens/board/board_screen.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'dart:collection'; import 'dart:convert'; -import 'dart:math'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -34,7 +33,7 @@ class _MainBoardState extends State { String _dynamicText; - double _animatedHeight = 40.0; + double _animatedHeight = 50.0; bool _isTimerPaused = false; @@ -98,6 +97,7 @@ class _MainBoardState extends State { _isTimerPaused = state.isPaused; _dynamicText = 'PAUSE'; } else if (state is ResetState) { + _cursorCopy = -1; _boardList = List.from(state.boardList); changeConflicts(); } else if (state is FullScreenState) { @@ -164,7 +164,7 @@ class _MainBoardState extends State { visible: _isTimerPaused, child: Container( width: double.infinity, - height: MediaQuery.of(context).size.height * 0.5, + height: MediaQuery.of(context).size.height * 0.55, color: transparent, child: Center( child: Text( @@ -184,16 +184,18 @@ class _MainBoardState extends State { onSegmentChange: (int segmentValue) { print('segmentValue: $segmentValue'); - switch (segmentValue) { - case 0: - _mainBoardBloc.add(FullScreen()); - break; - case 1: - _numPadButtonClick(0); - break; - case 2: - _mainBoardBloc.add(ResetBoard(list: _initBoardList)); - break; + if (!_isTimerPaused) { + switch (segmentValue) { + case 0: + _mainBoardBloc.add(FullScreen()); + break; + case 1: + _numPadButtonClick(0); + break; + case 2: + _mainBoardBloc.add(ResetBoard(list: _initBoardList)); + break; + } } }, ), @@ -207,7 +209,7 @@ class _MainBoardState extends State { onValueChanged: (int val) { print('NumPad: $val'); - _numPadButtonClick(val); + if (!_isTimerPaused) _numPadButtonClick(val); }, ), NumPad( @@ -219,7 +221,7 @@ class _MainBoardState extends State { mainAxisAlignment: MainAxisAlignment.spaceEvenly, onValueChanged: (int val) { print('NumPad: $val'); - _numPadButtonClick(val); + if (!_isTimerPaused) _numPadButtonClick(val); }), ])), ); @@ -230,7 +232,7 @@ class _MainBoardState extends State { Table buildTable() { return Table( children: getTableBoardRow(), // main board - border: new TableBorder.all(color: Color(kPrimaryColor)), + border: new TableBorder.all(color: kBorderTest, width: 1.0), ); } @@ -256,17 +258,17 @@ class _MainBoardState extends State { bool isToHighlight = _boardList[r][c] == _cursorCopy; if (r == _row && c == _col) { - return Color(kBoardCellSelected); + return kBoardCellSelected; } if (r == _row && !isConflict) { - return Colors.blue[100]; + return lightBlue; } else if (r == _row && isConflict) { return Colors.red[100]; } if (c == _col && !isConflict) { - return Colors.blue[100]; + return lightBlue; } else if (c == _col && isConflict) { return Colors.red[100]; } @@ -281,8 +283,6 @@ class _MainBoardState extends State { return Color(kBoardCellEmpty); } - - Color getTextColor(int r, int c) { bool isConflict = _conflicts.contains(new RowCol(r, c)); bool isChangeAble = _initBoardList[r][c] == 0; @@ -319,7 +319,8 @@ class _MainBoardState extends State { .add(UpdateRowCol(row: r, col: c, list: _initBoardList)); }, child: new Container( - height: 36.0, + height: MediaQuery.of(context).size.height * 0.06, + width: MediaQuery.of(context).size.width * 0.05, color: getHighlightColor(r, c), child: Column( children: [ @@ -328,7 +329,7 @@ class _MainBoardState extends State { child: Divider( color: Color(kPrimaryColor), height: 1.0, - thickness: 2.0, + thickness: 3.0, ), ), Spacer(), @@ -337,8 +338,8 @@ class _MainBoardState extends State { Visibility( visible: isShowColBorder(c), child: Container( - height: 35.0, - width: 2.0, + height: MediaQuery.of(context).size.height * 0.0585, + width: 3.0, color: Color(kPrimaryColor), ), ), diff --git a/lib/screens/board/main_board_bloc.dart b/lib/screens/board/main_board_bloc.dart index 62143973d..551e18c8b 100644 --- a/lib/screens/board/main_board_bloc.dart +++ b/lib/screens/board/main_board_bloc.dart @@ -184,7 +184,7 @@ Color getHighlightColorBloc(int selRow, int selCol, int row, int col, bool isChangeAble = initBoardList[row][col] == 0; if (row == selCol && col == selCol) { - return Color(kBoardCellSelected); + return kBoardCellSelected; } if (isConflict && !isChangeAble) diff --git a/lib/utils/Constants.dart b/lib/utils/Constants.dart index 3a3723a92..e4fb00736 100644 --- a/lib/utils/Constants.dart +++ b/lib/utils/Constants.dart @@ -3,13 +3,15 @@ import 'package:flutter/material.dart'; const kPrimaryColor = 0xFF220E4A; const kBoardTextColor = 0xFF737272; -const kBoardCellSelected = 0xFF80C3FF; const kBoardCellEmpty = 0xFFFFF3D2; const kBoardBorder = 0xFFE2E6E7; const kBoardPreFilled = 0xFFFCD0A3; const kNumPadBorder = 0xFFABDCFF; const kPanelBg = 0xFF38356e; const transparent = Color(0xca000000); +const lightBlue = Color(0xFFDCF8FF); +const kBoardCellSelected = Color(0xFF80C3FF); +const kBorderTest = Color(0x60170D2E); // init list List> constantList = [ From 50a70eb6fe52782587956aadfaac70098df5c293 Mon Sep 17 00:00:00 2001 From: New Pc First Commit <> Date: Fri, 31 Jan 2020 20:09:17 +0500 Subject: [PATCH 14/57] model based --- assets/brain.json | 1 - .../xcshareddata/IDEWorkspaceChecks.plist | 8 ++ lib/models/board_data.dart | 8 ++ lib/screens/board/board_screen.dart | 102 +++++++++++------- lib/screens/board/main_board_bloc.dart | 53 +++------ lib/screens/board/main_board_event.dart | 7 +- lib/screens/board/main_board_state.dart | 5 +- lib/utils/Board.dart | 25 +++-- lib/utils/Constants.dart | 4 +- 9 files changed, 122 insertions(+), 91 deletions(-) create mode 100644 ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 lib/models/board_data.dart diff --git a/assets/brain.json b/assets/brain.json index ce7d8a3f0..b8f578df3 100644 --- a/assets/brain.json +++ b/assets/brain.json @@ -1,5 +1,4 @@ { - "easy": [ [ 0, diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/lib/models/board_data.dart b/lib/models/board_data.dart new file mode 100644 index 000000000..9b5ca5121 --- /dev/null +++ b/lib/models/board_data.dart @@ -0,0 +1,8 @@ +import 'package:sudoku_brain/utils/Constants.dart'; + +class BoardData { + int value; + PlayMode mode; + + BoardData({this.value, this.mode}); +} diff --git a/lib/screens/board/board_screen.dart b/lib/screens/board/board_screen.dart index b95e7ef48..b095e06aa 100644 --- a/lib/screens/board/board_screen.dart +++ b/lib/screens/board/board_screen.dart @@ -9,6 +9,7 @@ import 'package:sudoku_brain/components/num_pad.dart'; import 'package:sudoku_brain/components/panel.dart'; import 'package:sudoku_brain/components/play_pause_widget.dart'; import 'package:sudoku_brain/components/timer_widget.dart'; +import 'package:sudoku_brain/models/board_data.dart'; import 'package:sudoku_brain/models/row_col.dart'; import 'package:sudoku_brain/utils/Constants.dart'; @@ -37,8 +38,8 @@ class _MainBoardState extends State { bool _isTimerPaused = false; - List> _boardList = constantList; - List> _initBoardList = constantList; + List> _boardList = []; + List> _initBoardList = []; HashSet _conflicts = new HashSet(); @override @@ -87,7 +88,7 @@ class _MainBoardState extends State { } print('cursor: $_cursor'); } else if (state is UpdateCellState) { - _boardList[_row][_col] = state.val; + _boardList[_row][_col].value = state.val; print('_boardList: ${state.val}'); } else if (state is UpdateRowColState) { print('UpdateRowColState'); @@ -136,6 +137,7 @@ class _MainBoardState extends State { InkWell( onTap: () { print('settings'); + readJson(); }, child: Icon(Icons.settings, size: 25.0)), CounterWidget(mainBoardBloc: _mainBoardBloc), @@ -253,39 +255,47 @@ class _MainBoardState extends State { } Color getHighlightColor(int r, int c) { - bool isConflict = _conflicts.contains(new RowCol(r, c)); - bool isChangeAble = _initBoardList[r][c] == 0; - bool isToHighlight = _boardList[r][c] == _cursorCopy; - - if (r == _row && c == _col) { - return kBoardCellSelected; - } - - if (r == _row && !isConflict) { - return lightBlue; - } else if (r == _row && isConflict) { - return Colors.red[100]; - } - - if (c == _col && !isConflict) { - return lightBlue; - } else if (c == _col && isConflict) { - return Colors.red[100]; + if(_boardList.isNotEmpty && _initBoardList.isNotEmpty){ + + bool isConflict = _conflicts.contains(new RowCol(r, c)); + bool isChangeAble = _initBoardList[r][c].value == 0; + bool isToHighlight = _boardList[r][c].value == _cursorCopy; + + if (r == _row && c == _col) { + return kBoardCellSelected; + } + + if (r == _row && !isConflict) { + return lightBlue; + } else if (r == _row && isConflict) { + return Colors.red[100]; + } + + if (c == _col && !isConflict) { + return lightBlue; + } else if (c == _col && isConflict) { + return Colors.red[100]; + } + + if (isConflict && !isChangeAble) + return Colors.red[100]; + else if (isConflict) + return Color(kBoardCellEmpty); + else if (isToHighlight) + return Color(kBoardPreFilled); + else + return Color(kBoardCellEmpty); + + }else{ + return Color(kBoardCellEmpty); } - if (isConflict && !isChangeAble) - return Colors.red[100]; - else if (isConflict) - return Color(kBoardCellEmpty); - else if (isToHighlight) - return Color(kBoardPreFilled); - else - return Color(kBoardCellEmpty); } Color getTextColor(int r, int c) { + if(_boardList.isNotEmpty && _initBoardList.isNotEmpty){ bool isConflict = _conflicts.contains(new RowCol(r, c)); - bool isChangeAble = _initBoardList[r][c] == 0; + bool isChangeAble = _initBoardList[r][c].value == 0; if (r == _row && c == _col && !isConflict) { return Colors.black; @@ -299,6 +309,9 @@ class _MainBoardState extends State { return Colors.black; else return Colors.black; + }else{ + return Colors.black; + } } List getTableBoardRow() { @@ -319,8 +332,8 @@ class _MainBoardState extends State { .add(UpdateRowCol(row: r, col: c, list: _initBoardList)); }, child: new Container( - height: MediaQuery.of(context).size.height * 0.06, - width: MediaQuery.of(context).size.width * 0.05, + height: (MediaQuery.of(context).size.height / 2) / 9, + width: (MediaQuery.of(context).size.width / 2) / 9, color: getHighlightColor(r, c), child: Column( children: [ @@ -338,14 +351,15 @@ class _MainBoardState extends State { Visibility( visible: isShowColBorder(c), child: Container( - height: MediaQuery.of(context).size.height * 0.0585, + height: + ((MediaQuery.of(context).size.height / 2) / 9) - 1, width: 3.0, color: Color(kPrimaryColor), ), ), Spacer(), Text( - _boardList[r][c] == 0 ? '' : '${_boardList[r][c]}', + '', textAlign: TextAlign.center, style: TextStyle( fontSize: 20.0, @@ -365,7 +379,7 @@ class _MainBoardState extends State { } // TODO: remove it later - Future>> readJson() async { + Future>> readJson() async { print('readJson'); String data = @@ -376,10 +390,26 @@ class _MainBoardState extends State { List list = decodedData['easy']; print('list: $list'); - List> ques = []; + List> ques = []; for (int i = 0; i < list.length; i++) { ques.add(list[i].cast()); } + + List> test = []; + for (int i = 0; i < list.length; i++) { + List innerList = list[i]; + List dataList = []; + for (int j = 0; j < innerList.length; j++) { + dataList.add(BoardData(value: innerList[j], mode: PlayMode.PLAY)); + } + test.add(dataList); + } + + print('================ List ==============='); + print('list: ${test[1][1].value}'); + print('list: ${test[0][0].mode}'); + print('================ List ==============='); + return ques; } } diff --git a/lib/screens/board/main_board_bloc.dart b/lib/screens/board/main_board_bloc.dart index 551e18c8b..4896570bb 100644 --- a/lib/screens/board/main_board_bloc.dart +++ b/lib/screens/board/main_board_bloc.dart @@ -7,8 +7,8 @@ import 'package:collection/collection.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; +import 'package:sudoku_brain/models/board_data.dart'; import 'package:sudoku_brain/models/row_col.dart'; -import 'package:sudoku_brain/utils/Constants.dart'; import './bloc.dart'; import '../../utils/Board.dart'; @@ -37,7 +37,7 @@ class MainBoardBloc extends Bloc { if (event is BoardInitISCalled) { yield FetchingLevel(); final list = await _readJson(event.context, 'easy'); - _solution = await _readJson(event.context, 'easy_solution'); +// _solution = await _readJson(event.context, 'easy_solution'); print('_solution" $_solution'); yield LevelFetched(boardList: list); } else if (event is ChangeConflictsCalled) { @@ -45,8 +45,8 @@ class MainBoardBloc extends Bloc { final gameFinished = _gameFinished(event.list); yield ConflictsChanged(conflicts: conflicts); if (gameFinished) { - final isWon = compareLists(event.list); - yield GameFinishedState(isWon: isWon); +// final isWon = compareLists(event.list); +// yield GameFinishedState(isWon: isWon); } } else if (event is CursorChanged) { final cursor = _changeCursor(event.val); @@ -66,8 +66,8 @@ class MainBoardBloc extends Bloc { _isPaused = true; yield (PauseTimerState(isPaused: _isPaused)); } else if (event is ResetBoard) { - final list = reset(event.list); - yield ResetState(boardList: list); +// final list = reset(event.list); +// yield ResetState(boardList: list); } else if (event is FullScreen) { final full = fullScreen(); yield FullScreenState(isFull: full); @@ -119,7 +119,8 @@ class MainBoardBloc extends Bloc { } // Read data from JSON File -Future>> _readJson(BuildContext context, String objName) async { +Future>> _readJson( + BuildContext context, String objName) async { print('readJson'); String data = @@ -130,7 +131,7 @@ Future>> _readJson(BuildContext context, String objName) async { List list = decodedData['$objName']; print('list: $list'); - List> ques = []; + List> ques = []; for (int i = 0; i < list.length; i++) { ques.add(list[i].cast()); } @@ -139,12 +140,12 @@ Future>> _readJson(BuildContext context, String objName) async { } // Change conflicts -HashSet _changeConflicts(List> boardList) { +HashSet _changeConflicts(List> boardList) { HashSet _conflicts = Conflict.getConflicts(boardList); return _conflicts; } -bool _gameFinished(List> boardList) { +bool _gameFinished(List> boardList) { bool isFinished = Conflict.computeFinishGame(boardList); return isFinished; } @@ -160,9 +161,9 @@ int _changeCellValue(int val) { } // -List _changeRowCol(int row, int col, List> list) { +List _changeRowCol(int row, int col, List> list) { List retList = List(); - if (list[row][col] == 0) { + if (list[row][col].value == 0) { retList.add(row); retList.add(col); } @@ -170,31 +171,11 @@ List _changeRowCol(int row, int col, List> list) { } // -List> reset(List> _initBoardList) { - List> list = new List>.generate( - 9, (i) => new List.from(_initBoardList[i])); - - return list; -} - +List> reset(List> _initBoardList) { +// List> list = new List>.generate( +// 9, (i) => new List.from(_initBoardList[i])); // -Color getHighlightColorBloc(int selRow, int selCol, int row, int col, - HashSet conflicts, List> initBoardList) { - bool isConflict = conflicts.contains(new RowCol(row, col)); - bool isChangeAble = initBoardList[row][col] == 0; - - if (row == selCol && col == selCol) { - return kBoardCellSelected; - } - - if (isConflict && !isChangeAble) - return Colors.red[900]; - else if (isConflict) - return Colors.red[100]; - else if (!isChangeAble) - return Color(kBoardPreFilled); - else - return Color(kBoardCellEmpty); +// return list; } // showRow Border or Not diff --git a/lib/screens/board/main_board_event.dart b/lib/screens/board/main_board_event.dart index b88bf0523..1e5a6ada0 100644 --- a/lib/screens/board/main_board_event.dart +++ b/lib/screens/board/main_board_event.dart @@ -1,5 +1,6 @@ import 'package:flutter/cupertino.dart'; import 'package:meta/meta.dart'; +import 'package:sudoku_brain/models/board_data.dart'; @immutable abstract class MainBoardEvent {} @@ -11,7 +12,7 @@ class BoardInitISCalled extends MainBoardEvent { } class ChangeConflictsCalled extends MainBoardEvent { - final List> list; + final List> list; ChangeConflictsCalled({this.list}); } @@ -31,13 +32,13 @@ class UpdateCellValue extends MainBoardEvent { class UpdateRowCol extends MainBoardEvent { final int row; final int col; - final List> list; + final List> list; UpdateRowCol({this.row, this.col, this.list}); } class ResetBoard extends MainBoardEvent { - final List> list; + final List> list; ResetBoard({this.list}); } diff --git a/lib/screens/board/main_board_state.dart b/lib/screens/board/main_board_state.dart index ab7ab9736..bc2b7ebe4 100644 --- a/lib/screens/board/main_board_state.dart +++ b/lib/screens/board/main_board_state.dart @@ -2,6 +2,7 @@ import 'dart:collection'; import 'package:flutter/cupertino.dart'; import 'package:meta/meta.dart'; +import 'package:sudoku_brain/models/board_data.dart'; import 'package:sudoku_brain/models/row_col.dart'; @immutable @@ -16,7 +17,7 @@ class InitialMainBoardState extends MainBoardState { class FetchingLevel extends MainBoardState {} class LevelFetched extends MainBoardState { - final List> boardList; + final List> boardList; LevelFetched({this.boardList}); } @@ -67,7 +68,7 @@ class UpdateRowColState extends MainBoardState { } class ResetState extends MainBoardState { - final List> boardList; + final List> boardList; ResetState({this.boardList}); } diff --git a/lib/utils/Board.dart b/lib/utils/Board.dart index fbd031ea2..244c8987c 100644 --- a/lib/utils/Board.dart +++ b/lib/utils/Board.dart @@ -1,9 +1,11 @@ import 'dart:collection'; +import 'package:sudoku_brain/models/board_data.dart'; + import '../models/row_col.dart'; class Conflict { - static HashSet getConflicts(List> grid) { + static HashSet getConflicts(List> grid) { HashSet result = new HashSet(); computeRowConflicts(grid, result); computeColConflicts(grid, result); @@ -11,11 +13,12 @@ class Conflict { return result; } - static void computeRowConflicts(List> grid, HashSet res) { + static void computeRowConflicts( + List> grid, HashSet res) { for (int r = 0; r < 9; r++) { HashMap usedNumToRowCol = new HashMap(); for (int c = 0; c < 9; c++) { - int newNum = grid[r][c]; + int newNum = grid[r][c].value; // print('[$r][$c]=${grid[r][c]}'); @@ -29,11 +32,12 @@ class Conflict { } } - static void computeColConflicts(List> grid, HashSet res) { + static void computeColConflicts( + List> grid, HashSet res) { for (int c = 0; c < 9; c++) { HashMap usedNumToRowCol = new HashMap(); for (int r = 0; r < 9; r++) { - int newNum = grid[r][c]; + int newNum = grid[r][c].value; if (newNum == 0) continue; if (usedNumToRowCol.containsKey(newNum)) { res.add(new RowCol(r, c)); @@ -45,11 +49,11 @@ class Conflict { } // Check to finish game - static bool computeFinishGame(List> grid) { + static bool computeFinishGame(List> grid) { bool isGameFinished = true; for (int c = 0; c < 9; c++) { for (int r = 0; r < 9; r++) { - int newNum = grid[r][c]; + int newNum = grid[r][c].value; if (newNum == 0) { isGameFinished = false; } @@ -58,7 +62,8 @@ class Conflict { return isGameFinished; } - static void computeBlockConflicts(List> grid, HashSet res) { + static void computeBlockConflicts( + List> grid, HashSet res) { blockConf(0, 0, grid, res); blockConf(0, 3, grid, res); blockConf(0, 6, grid, res); @@ -71,11 +76,11 @@ class Conflict { } static void blockConf( - int row, int col, List> grid, HashSet res) { + int row, int col, List> grid, HashSet res) { HashMap usedNumToRowCol = new HashMap(); for (int r = row; r < row + 3; r++) { for (int c = col; c < col + 3; c++) { - int newNum = grid[r][c]; + int newNum = grid[r][c].value; if (newNum == 0) continue; if (usedNumToRowCol.containsKey(newNum)) { res.add(new RowCol(r, c)); diff --git a/lib/utils/Constants.dart b/lib/utils/Constants.dart index e4fb00736..364cc4fbf 100644 --- a/lib/utils/Constants.dart +++ b/lib/utils/Constants.dart @@ -51,6 +51,4 @@ List> dummyList = [ ]; // Enums -//enum SelectionType{ -// -//} +enum PlayMode { PENCIL, PLAY } From ad1abbbbbb751bacb408b870de07170da5bb67ad Mon Sep 17 00:00:00 2001 From: New Pc First Commit <> Date: Tue, 4 Feb 2020 18:11:31 +0500 Subject: [PATCH 15/57] convert to model --- lib/screens/board/board_screen.dart | 65 ++++++++++++++----------- lib/screens/board/main_board_bloc.dart | 26 ++++++---- lib/screens/board/main_board_event.dart | 4 +- 3 files changed, 55 insertions(+), 40 deletions(-) diff --git a/lib/screens/board/board_screen.dart b/lib/screens/board/board_screen.dart index b095e06aa..b1d20f696 100644 --- a/lib/screens/board/board_screen.dart +++ b/lib/screens/board/board_screen.dart @@ -98,6 +98,8 @@ class _MainBoardState extends State { _isTimerPaused = state.isPaused; _dynamicText = 'PAUSE'; } else if (state is ResetState) { + print('ResetState'); + print('ResetState: ${state.boardList}'); _cursorCopy = -1; _boardList = List.from(state.boardList); changeConflicts(); @@ -195,7 +197,8 @@ class _MainBoardState extends State { _numPadButtonClick(0); break; case 2: - _mainBoardBloc.add(ResetBoard(list: _initBoardList)); + _mainBoardBloc.add(ResetBoard( + list: _initBoardList, buildContext: context)); break; } } @@ -255,8 +258,7 @@ class _MainBoardState extends State { } Color getHighlightColor(int r, int c) { - if(_boardList.isNotEmpty && _initBoardList.isNotEmpty){ - + if (_boardList.isNotEmpty && _initBoardList.isNotEmpty) { bool isConflict = _conflicts.contains(new RowCol(r, c)); bool isChangeAble = _initBoardList[r][c].value == 0; bool isToHighlight = _boardList[r][c].value == _cursorCopy; @@ -285,31 +287,29 @@ class _MainBoardState extends State { return Color(kBoardPreFilled); else return Color(kBoardCellEmpty); - - }else{ + } else { return Color(kBoardCellEmpty); } - } Color getTextColor(int r, int c) { - if(_boardList.isNotEmpty && _initBoardList.isNotEmpty){ - bool isConflict = _conflicts.contains(new RowCol(r, c)); - bool isChangeAble = _initBoardList[r][c].value == 0; + if (_initBoardList.isNotEmpty) { + bool isConflict = _conflicts.contains(new RowCol(r, c)); + bool isChangeAble = _initBoardList[r][c].value == 0; - if (r == _row && c == _col && !isConflict) { - return Colors.black; - } + if (r == _row && c == _col && !isConflict) { + return Colors.black; + } - if (isConflict && !isChangeAble) - return Colors.black; - else if (isConflict) - return Colors.red; - else if (!isChangeAble) - return Colors.black; - else - return Colors.black; - }else{ + if (isConflict && !isChangeAble) + return Colors.black; + else if (isConflict) + return Colors.red; + else if (!isChangeAble) + return Colors.black; + else + return Colors.black; + } else { return Colors.black; } } @@ -359,7 +359,7 @@ class _MainBoardState extends State { ), Spacer(), Text( - '', + getText(r, c), textAlign: TextAlign.center, style: TextStyle( fontSize: 20.0, @@ -388,12 +388,7 @@ class _MainBoardState extends State { var decodedData = jsonDecode(data); List list = decodedData['easy']; - print('list: $list'); - - List> ques = []; - for (int i = 0; i < list.length; i++) { - ques.add(list[i].cast()); - } + print('main list: $list'); List> test = []; for (int i = 0; i < list.length; i++) { @@ -410,6 +405,18 @@ class _MainBoardState extends State { print('list: ${test[0][0].mode}'); print('================ List ==============='); - return ques; + return test; + } + + String getText(int r, int c) { + if (_boardList.isEmpty) { + return ''; + } else { + if (_boardList[r][c].value == 0) { + return ''; + } else { + return '${_boardList[r][c].value}'; + } + } } } diff --git a/lib/screens/board/main_board_bloc.dart b/lib/screens/board/main_board_bloc.dart index 4896570bb..388cbcfdf 100644 --- a/lib/screens/board/main_board_bloc.dart +++ b/lib/screens/board/main_board_bloc.dart @@ -9,6 +9,7 @@ import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:sudoku_brain/models/board_data.dart'; import 'package:sudoku_brain/models/row_col.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; import './bloc.dart'; import '../../utils/Board.dart'; @@ -66,8 +67,8 @@ class MainBoardBloc extends Bloc { _isPaused = true; yield (PauseTimerState(isPaused: _isPaused)); } else if (event is ResetBoard) { -// final list = reset(event.list); -// yield ResetState(boardList: list); + final list = await _readJson(event.buildContext, 'easy'); + yield ResetState(boardList: list); } else if (event is FullScreen) { final full = fullScreen(); yield FullScreenState(isFull: full); @@ -131,12 +132,17 @@ Future>> _readJson( List list = decodedData['$objName']; print('list: $list'); - List> ques = []; + List> test = []; for (int i = 0; i < list.length; i++) { - ques.add(list[i].cast()); + List innerList = list[i]; + List dataList = []; + for (int j = 0; j < innerList.length; j++) { + dataList.add(BoardData(value: innerList[j], mode: PlayMode.PLAY)); + } + test.add(dataList); } - return ques; + return test; } // Change conflicts @@ -171,11 +177,11 @@ List _changeRowCol(int row, int col, List> list) { } // -List> reset(List> _initBoardList) { -// List> list = new List>.generate( -// 9, (i) => new List.from(_initBoardList[i])); -// -// return list; +List> reset(List> _initBoardList) { + List> list = new List>.generate( + 9, (i) => new List.from(_initBoardList[i])); + + return list; } // showRow Border or Not diff --git a/lib/screens/board/main_board_event.dart b/lib/screens/board/main_board_event.dart index 1e5a6ada0..48da2f0b8 100644 --- a/lib/screens/board/main_board_event.dart +++ b/lib/screens/board/main_board_event.dart @@ -39,8 +39,10 @@ class UpdateRowCol extends MainBoardEvent { class ResetBoard extends MainBoardEvent { final List> list; + final BuildContext buildContext; - ResetBoard({this.list}); + + ResetBoard({this.list,this.buildContext}); } class FullScreen extends MainBoardEvent {} From 408613efb6b50f315e3d43114d757e543d064cb6 Mon Sep 17 00:00:00 2001 From: New Pc First Commit <> Date: Thu, 6 Feb 2020 18:08:22 +0500 Subject: [PATCH 16/57] pencil --- lib/main.dart | 3 +- lib/models/board_data.dart | 1 + lib/screens/board/board_screen.dart | 42 ++++++++++++++--- lib/test.dart | 72 +++++++++++++++++++++++++++++ 4 files changed, 111 insertions(+), 7 deletions(-) create mode 100644 lib/test.dart diff --git a/lib/main.dart b/lib/main.dart index b49814f2b..1dc493083 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,9 +2,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:sudoku_brain/screens/board/board_screen.dart'; import 'package:sudoku_brain/screens/board/main_board_bloc.dart'; +import 'package:sudoku_brain/test.dart'; import 'package:sudoku_brain/utils/Constants.dart'; -void main() => runApp(new MyApp()); +void main() => runApp(Test()); class MyApp extends StatelessWidget { // This widget is the root of your application. diff --git a/lib/models/board_data.dart b/lib/models/board_data.dart index 9b5ca5121..c7447acf1 100644 --- a/lib/models/board_data.dart +++ b/lib/models/board_data.dart @@ -3,6 +3,7 @@ import 'package:sudoku_brain/utils/Constants.dart'; class BoardData { int value; PlayMode mode; + List pencilValues = [0, 0, 0, 0, 0, 0, 0, 0, 0]; BoardData({this.value, this.mode}); } diff --git a/lib/screens/board/board_screen.dart b/lib/screens/board/board_screen.dart index b1d20f696..37762b0fc 100644 --- a/lib/screens/board/board_screen.dart +++ b/lib/screens/board/board_screen.dart @@ -358,14 +358,20 @@ class _MainBoardState extends State { ), ), Spacer(), - Text( - getText(r, c), - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 20.0, - color: getTextColor(r, c), + Visibility( + visible: false, + child: Text( + getText(r, c), + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 20.0, + color: getTextColor(r, c), + ), ), ), + Expanded( + child: _buildItemsList(), + ), Spacer(), ], ), @@ -419,4 +425,28 @@ class _MainBoardState extends State { } } } + +// ========= + Widget _buildItemsList() { + Widget itemCards; + List items = [1, 2, 3, 4, 5, 6, 7, 8, 9]; + return GridView.count( + primary: false, + padding: const EdgeInsets.all(20), + crossAxisSpacing: 5, + mainAxisSpacing: 5, + crossAxisCount: 2, + scrollDirection: Axis.vertical, + children: [ + Container( + child: const Text('abc'), + color: Colors.teal[100], + ), + Container( + child: const Text('400'), + color: Colors.teal[200], + ) + ], + ); + } } diff --git a/lib/test.dart b/lib/test.dart new file mode 100644 index 000000000..3389893b0 --- /dev/null +++ b/lib/test.dart @@ -0,0 +1,72 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; + +class Test extends StatelessWidget { + @override + Widget build(BuildContext context) { + return MaterialApp( + title: '', + theme: ThemeData.dark().copyWith( + primaryColor: Color(kPrimaryColor), + scaffoldBackgroundColor: Color(kPrimaryColor), + ), + home: Grid(), + ); + } +} + +class Grid extends StatefulWidget { + @override + _GridState createState() => _GridState(); +} + +class _GridState extends State { + @override + Widget build(BuildContext context) { + return Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Container( + color: Colors.white, + width: 30.0, + height: 30.0, + child: GridView.count( + primary: false, + crossAxisCount: 3, + + children: [ + Container( + width: 50.0, + height: 50.0, + child: const Text('1',textAlign: TextAlign.center,style: TextStyle(color: Colors.black,fontSize: 10.0),), + color: Colors.teal[100], + ), + Container( + width: 50.0, + height: 50.0, + child: const Text('400'), + color: Colors.teal[200], + ), + Container( + width: 50.0, + height: 50.0, + child: const Text('cdf'), + color: Colors.teal[100], + ), + Container( + width: 50.0, + height: 50.0, + child: const Text('400'), + color: Colors.teal[200], + ), + ], + ), + ), + Container(), + Container() + ], + ); + } +} From c339eb53e348bda5ba444a04267d38bcc0e1c8f7 Mon Sep 17 00:00:00 2001 From: New Pc First Commit <> Date: Mon, 10 Feb 2020 18:25:32 +0500 Subject: [PATCH 17/57] pencil mode 80% --- lib/main.dart | 2 +- lib/models/board_data.dart | 2 +- lib/screens/board/board_screen.dart | 102 +++++++++++++++++------- lib/screens/board/main_board_event.dart | 10 ++- lib/test.dart | 99 +++++++++++++++++++---- 5 files changed, 165 insertions(+), 50 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 1dc493083..2c215f91f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -5,7 +5,7 @@ import 'package:sudoku_brain/screens/board/main_board_bloc.dart'; import 'package:sudoku_brain/test.dart'; import 'package:sudoku_brain/utils/Constants.dart'; -void main() => runApp(Test()); +void main() => runApp(MyApp()); class MyApp extends StatelessWidget { // This widget is the root of your application. diff --git a/lib/models/board_data.dart b/lib/models/board_data.dart index c7447acf1..9af750790 100644 --- a/lib/models/board_data.dart +++ b/lib/models/board_data.dart @@ -3,7 +3,7 @@ import 'package:sudoku_brain/utils/Constants.dart'; class BoardData { int value; PlayMode mode; - List pencilValues = [0, 0, 0, 0, 0, 0, 0, 0, 0]; + List pencilValues = [0, 0, 0, 0, 0, 0, 0, 0, 0]; BoardData({this.value, this.mode}); } diff --git a/lib/screens/board/board_screen.dart b/lib/screens/board/board_screen.dart index 37762b0fc..8f25d7521 100644 --- a/lib/screens/board/board_screen.dart +++ b/lib/screens/board/board_screen.dart @@ -37,6 +37,7 @@ class _MainBoardState extends State { double _animatedHeight = 50.0; bool _isTimerPaused = false; + bool _isPencilON = false; List> _boardList = []; List> _initBoardList = []; @@ -88,7 +89,17 @@ class _MainBoardState extends State { } print('cursor: $_cursor'); } else if (state is UpdateCellState) { - _boardList[_row][_col].value = state.val; + if (_isPencilON) { + bool isConflict = _conflicts.contains(new RowCol(_row, _col)); + print('isConflict: $isConflict'); + _boardList[_row][_col].mode = PlayMode.PENCIL; + _boardList[_row][_col].pencilValues[state.val - 1] = state.val; + } else { + _boardList[_row][_col].mode = PlayMode.PLAY; + _boardList[_row][_col].value = state.val; + } + print('mode: ${_boardList[_row][_col].mode}'); + print('_boardList: ${state.val}'); } else if (state is UpdateRowColState) { print('UpdateRowColState'); @@ -200,6 +211,17 @@ class _MainBoardState extends State { _mainBoardBloc.add(ResetBoard( list: _initBoardList, buildContext: context)); break; + case 3: + _mainBoardBloc.add(Hint(row: _row, col: _col)); + break; + case 4: + if (_isPencilON) { + _isPencilON = false; + } else { + _isPencilON = true; + } + + break; } } }, @@ -242,9 +264,13 @@ class _MainBoardState extends State { } void _numPadButtonClick(int value) { - changeCursor(value); - _mainBoardBloc.add(UpdateCellValue(val: value)); - changeConflicts(); + if (_isPencilON) { + _mainBoardBloc.add(UpdateCellValue(val: value)); + } else { + changeCursor(value); + _mainBoardBloc.add(UpdateCellValue(val: value)); + changeConflicts(); + } } // Methods @@ -261,6 +287,7 @@ class _MainBoardState extends State { if (_boardList.isNotEmpty && _initBoardList.isNotEmpty) { bool isConflict = _conflicts.contains(new RowCol(r, c)); bool isChangeAble = _initBoardList[r][c].value == 0; + bool isToHighlight = _boardList[r][c].value == _cursorCopy; if (r == _row && c == _col) { @@ -283,7 +310,7 @@ class _MainBoardState extends State { return Colors.red[100]; else if (isConflict) return Color(kBoardCellEmpty); - else if (isToHighlight) + else if (isToHighlight && !_isPencilON) return Color(kBoardPreFilled); else return Color(kBoardCellEmpty); @@ -359,7 +386,8 @@ class _MainBoardState extends State { ), Spacer(), Visibility( - visible: false, + visible: + _boardList[r][c].mode == PlayMode.PENCIL ? false : true, child: Text( getText(r, c), textAlign: TextAlign.center, @@ -369,8 +397,12 @@ class _MainBoardState extends State { ), ), ), - Expanded( - child: _buildItemsList(), + Visibility( + visible: + _boardList[r][c].mode == PlayMode.PENCIL ? true : false, + child: _buildItemsList(_boardList.isNotEmpty + ? _boardList[r][c].pencilValues + : null), ), Spacer(), ], @@ -427,26 +459,38 @@ class _MainBoardState extends State { } // ========= - Widget _buildItemsList() { - Widget itemCards; - List items = [1, 2, 3, 4, 5, 6, 7, 8, 9]; - return GridView.count( - primary: false, - padding: const EdgeInsets.all(20), - crossAxisSpacing: 5, - mainAxisSpacing: 5, - crossAxisCount: 2, - scrollDirection: Axis.vertical, - children: [ - Container( - child: const Text('abc'), - color: Colors.teal[100], - ), - Container( - child: const Text('400'), - color: Colors.teal[200], - ) - ], - ); + Widget _buildItemsList(List pencilValues) { + List items = [1, 2, 3, 0, 5, 6, 0, 8, 9]; + if (pencilValues != null) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + width: 30.0, + height: 30.0, + child: GridView.count( + primary: false, + crossAxisCount: 3, + children: List.generate(pencilValues.length, (index) { + return Container( + width: 30.0, + height: 30.0, + child: Text( + '${pencilValues[index] == 0 ? '' : pencilValues[index]}', + textAlign: TextAlign.center, + style: TextStyle(color: Colors.black, fontSize: 10.0), + ), + ); + })), + ), + ], + ); + } else { + return Container( + width: 30.0, + height: 30.0, + ); + } } } diff --git a/lib/screens/board/main_board_event.dart b/lib/screens/board/main_board_event.dart index 48da2f0b8..d79d7f5e3 100644 --- a/lib/screens/board/main_board_event.dart +++ b/lib/screens/board/main_board_event.dart @@ -37,12 +37,18 @@ class UpdateRowCol extends MainBoardEvent { UpdateRowCol({this.row, this.col, this.list}); } +class Hint extends MainBoardEvent { + final int row; + final int col; + + Hint({this.row, this.col}); +} + class ResetBoard extends MainBoardEvent { final List> list; final BuildContext buildContext; - - ResetBoard({this.list,this.buildContext}); + ResetBoard({this.list, this.buildContext}); } class FullScreen extends MainBoardEvent {} diff --git a/lib/test.dart b/lib/test.dart index 3389893b0..ed2882345 100644 --- a/lib/test.dart +++ b/lib/test.dart @@ -25,8 +25,8 @@ class _GridState extends State { @override Widget build(BuildContext context) { return Column( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.end, + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( color: Colors.white, @@ -35,31 +35,96 @@ class _GridState extends State { child: GridView.count( primary: false, crossAxisCount: 3, - children: [ Container( - width: 50.0, - height: 50.0, - child: const Text('1',textAlign: TextAlign.center,style: TextStyle(color: Colors.black,fontSize: 10.0),), + width: 30.0, + height: 30.0, + child: const Text( + '1', + textAlign: TextAlign.center, + style: TextStyle(color: Colors.black, fontSize: 10.0), + ), + color: Colors.teal[100], + ), + Container( + width: 30.0, + height: 30.0, + child: const Text( + '2', + textAlign: TextAlign.center, + style: TextStyle(color: Colors.black, fontSize: 10.0), + ), + color: Colors.teal[100], + ), + Container( + width: 30.0, + height: 30.0, + child: const Text( + '3', + textAlign: TextAlign.center, + style: TextStyle(color: Colors.black, fontSize: 10.0), + ), + color: Colors.teal[100], + ), + Container( + width: 30.0, + height: 30.0, + child: const Text( + '4', + textAlign: TextAlign.center, + style: TextStyle(color: Colors.black, fontSize: 10.0), + ), color: Colors.teal[100], ), Container( - width: 50.0, - height: 50.0, - child: const Text('400'), - color: Colors.teal[200], + width: 30.0, + height: 30.0, + child: const Text( + '5', + textAlign: TextAlign.center, + style: TextStyle(color: Colors.black, fontSize: 10.0), + ), + color: Colors.teal[100], + ), + Container( + width: 30.0, + height: 30.0, + child: const Text( + '6', + textAlign: TextAlign.center, + style: TextStyle(color: Colors.black, fontSize: 10.0), + ), + color: Colors.teal[100], ), Container( - width: 50.0, - height: 50.0, - child: const Text('cdf'), + width: 30.0, + height: 30.0, + child: const Text( + '7', + textAlign: TextAlign.center, + style: TextStyle(color: Colors.black, fontSize: 10.0), + ), color: Colors.teal[100], ), Container( - width: 50.0, - height: 50.0, - child: const Text('400'), - color: Colors.teal[200], + width: 30.0, + height: 30.0, + child: const Text( + '8', + textAlign: TextAlign.center, + style: TextStyle(color: Colors.black, fontSize: 10.0), + ), + color: Colors.teal[100], + ), + Container( + width: 30.0, + height: 30.0, + child: const Text( + '9', + textAlign: TextAlign.center, + style: TextStyle(color: Colors.black, fontSize: 10.0), + ), + color: Colors.teal[100], ), ], ), From c5bf69f138846ac8fb122a869497c24d48fe41d7 Mon Sep 17 00:00:00 2001 From: New Pc First Commit <> Date: Tue, 11 Feb 2020 18:22:12 +0500 Subject: [PATCH 18/57] panel setting/home screen --- lib/components/panel.dart | 94 ++++++++++++----------------- lib/components/panel_button.dart | 13 ++-- lib/components/switch_button.dart | 44 ++++++++++++++ lib/main.dart | 13 ++-- lib/screens/board/board_screen.dart | 30 ++++----- lib/screens/home/bloc.dart | 3 + lib/screens/home/home_bloc.dart | 15 +++++ lib/screens/home/home_event.dart | 4 ++ lib/screens/home/home_screen.dart | 24 ++++++++ lib/screens/home/home_state.dart | 6 ++ lib/test.dart | 4 +- lib/utils/Constants.dart | 2 +- 12 files changed, 173 insertions(+), 79 deletions(-) create mode 100644 lib/components/switch_button.dart create mode 100644 lib/screens/home/bloc.dart create mode 100644 lib/screens/home/home_bloc.dart create mode 100644 lib/screens/home/home_event.dart create mode 100644 lib/screens/home/home_screen.dart create mode 100644 lib/screens/home/home_state.dart diff --git a/lib/components/panel.dart b/lib/components/panel.dart index 7f92d8f7a..33e907a97 100644 --- a/lib/components/panel.dart +++ b/lib/components/panel.dart @@ -1,10 +1,10 @@ // counter_page.dart import 'package:flutter/material.dart'; -import 'package:sudoku_brain/components/panel_button.dart'; +import 'package:sudoku_brain/components/switch_button.dart'; import 'package:sudoku_brain/utils/Constants.dart'; class Panel extends StatefulWidget { - final Function(int) onSegmentChange; + final Function(int, bool) onSegmentChange; Panel({@required this.onSegmentChange}); @@ -13,24 +13,6 @@ class Panel extends StatefulWidget { } class _PanelState extends State { - final List _icons = [ - Icons.fullscreen, - Icons.delete, - Icons.refresh, - Icons.lightbulb_outline, - Icons.edit - ]; - - List _selectedImageColor = [ - Colors.white, - Colors.white, - Colors.white, - Colors.white, - Colors.white - ]; - - int _segmentedControlValue = -1; - @override Widget build(BuildContext context) { return ClipRRect( @@ -41,42 +23,46 @@ class _PanelState extends State { padding: EdgeInsets.fromLTRB(10.0, 0.0, 10.0, 0.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: generateIcons(), + children: [ + SwitchButton( + value: 0, + iconActive: Icons.fullscreen_exit, + iconInActive: Icons.fullscreen, + onClick: (int val, bool isSel) { + widget.onSegmentChange(val, isSel); + }, + ), + IconButton( + icon: Icon(Icons.delete), + onPressed: () { + widget.onSegmentChange(1, false); + }, + ), + IconButton( + icon: Icon(Icons.refresh), + onPressed: () { + widget.onSegmentChange(2, false); + }, + ), + SwitchButton( + value: 3, + iconActive: Icons.lightbulb_outline, + iconInActive: Icons.lightbulb_outline, + onClick: (int val, bool isSel) { + widget.onSegmentChange(val, isSel); + }, + ), + SwitchButton( + value: 4, + iconActive: Icons.edit, + iconInActive: Icons.edit, + onClick: (int val, bool isSel) { + widget.onSegmentChange(val, isSel); + }, + ), + ], ), ), ); } - - List generateIcons() { - List list = []; - - for (int i = 0; i < _icons.length; i++) { - list.add( - PanelButton( - value: i, - icon: _icons[i], - color: _selectedImageColor[i], - onClick: (int val) { - _segmentedControlValue = i; - print('val: $val'); - setState(() { - widget.onSegmentChange(val); - changeSelectionColor(); - }); - }, - ), - ); - } - return list; - } - - void changeSelectionColor() { - for (int i = 0; i < _selectedImageColor.length; i++) { - if (_segmentedControlValue == i) { - _selectedImageColor[i] = kBoardCellSelected; - } else { - _selectedImageColor[i] = Colors.white; - } - } - } } diff --git a/lib/components/panel_button.dart b/lib/components/panel_button.dart index 5e8be6174..3e7ba5704 100644 --- a/lib/components/panel_button.dart +++ b/lib/components/panel_button.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -class PanelButton extends StatelessWidget { +class PanelButton extends StatefulWidget { final int value; final Function(int) onClick; final IconData icon; @@ -12,15 +12,20 @@ class PanelButton extends StatelessWidget { this.color, @required this.onClick}); + @override + _PanelButtonState createState() => _PanelButtonState(); +} + +class _PanelButtonState extends State { @override Widget build(BuildContext context) { return IconButton( icon: Icon( - icon, - color: color, + widget.icon, + color: widget.color, ), onPressed: () { - onClick(value); + widget.onClick(widget.value); }, ); } diff --git a/lib/components/switch_button.dart b/lib/components/switch_button.dart new file mode 100644 index 000000000..9ace0ef40 --- /dev/null +++ b/lib/components/switch_button.dart @@ -0,0 +1,44 @@ +import 'package:flutter/material.dart'; + +class SwitchButton extends StatefulWidget { + final int value; + final Function(int, bool) onClick; + final IconData iconActive; + final IconData iconInActive; + final Color color; + + SwitchButton( + {@required this.value, + @required this.iconActive, + @required this.iconInActive, + this.color, + @required this.onClick}); + + @override + _SwitchButtonState createState() => _SwitchButtonState(); +} + +class _SwitchButtonState extends State { + bool _isSelected = false; + + @override + Widget build(BuildContext context) { + return IconButton( + icon: Icon( + _isSelected == true ? widget.iconActive : widget.iconInActive, + color: _isSelected == true ? Colors.blue[200] : Colors.white, + ), + onPressed: () { + setState(() { + if (_isSelected) { + _isSelected = false; + } else { + _isSelected = true; + } + }); + + widget.onClick(widget.value, _isSelected); + }, + ); + } +} diff --git a/lib/main.dart b/lib/main.dart index 2c215f91f..f433c0c79 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,7 +2,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:sudoku_brain/screens/board/board_screen.dart'; import 'package:sudoku_brain/screens/board/main_board_bloc.dart'; -import 'package:sudoku_brain/test.dart'; +import 'package:sudoku_brain/screens/home/bloc.dart'; +import 'package:sudoku_brain/screens/home/home_screen.dart'; import 'package:sudoku_brain/utils/Constants.dart'; void main() => runApp(MyApp()); @@ -14,11 +15,15 @@ class MyApp extends StatelessWidget { return new MaterialApp( title: '', theme: ThemeData.dark().copyWith( - primaryColor: Color(kPrimaryColor), - scaffoldBackgroundColor: Color(kPrimaryColor), + primaryColor: kPrimaryColor, + scaffoldBackgroundColor: kPrimaryColor, ), - initialRoute: MainBoard.id, + initialRoute: HomeScreen.id, routes: { + HomeScreen.id: (context) => BlocProvider( + create: (BuildContext context) => HomeBloc(), + child: HomeScreen(), + ), MainBoard.id: (context) => BlocProvider( create: (BuildContext context) => MainBoardBloc(), child: MainBoard(), diff --git a/lib/screens/board/board_screen.dart b/lib/screens/board/board_screen.dart index 8f25d7521..192884142 100644 --- a/lib/screens/board/board_screen.dart +++ b/lib/screens/board/board_screen.dart @@ -137,7 +137,7 @@ class _MainBoardState extends State { print('BlocBuilder'); return SafeArea( child: Scaffold( - backgroundColor: Color(kPrimaryColor), + backgroundColor: kPrimaryColor, body: Column(children: [ AnimatedContainer( height: _animatedHeight, @@ -196,8 +196,9 @@ class _MainBoardState extends State { ), ), Panel( - onSegmentChange: (int segmentValue) { + onSegmentChange: (int segmentValue, bool isSelected) { print('segmentValue: $segmentValue'); + print('isSelected: $isSelected'); if (!_isTimerPaused) { switch (segmentValue) { @@ -215,12 +216,7 @@ class _MainBoardState extends State { _mainBoardBloc.add(Hint(row: _row, col: _col)); break; case 4: - if (_isPencilON) { - _isPencilON = false; - } else { - _isPencilON = true; - } - + _isPencilON = isSelected; break; } } @@ -367,7 +363,7 @@ class _MainBoardState extends State { Visibility( visible: isShowRowBorder(r), child: Divider( - color: Color(kPrimaryColor), + color: kPrimaryColor, height: 1.0, thickness: 3.0, ), @@ -381,13 +377,16 @@ class _MainBoardState extends State { height: ((MediaQuery.of(context).size.height / 2) / 9) - 1, width: 3.0, - color: Color(kPrimaryColor), + color: kPrimaryColor, ), ), Spacer(), Visibility( - visible: - _boardList[r][c].mode == PlayMode.PENCIL ? false : true, + visible: (_boardList.isEmpty + ? false + : _boardList[r][c].mode == PlayMode.PENCIL + ? false + : true), child: Text( getText(r, c), textAlign: TextAlign.center, @@ -398,8 +397,11 @@ class _MainBoardState extends State { ), ), Visibility( - visible: - _boardList[r][c].mode == PlayMode.PENCIL ? true : false, + visible: (_boardList.isEmpty + ? false + : _boardList[r][c].mode == PlayMode.PENCIL + ? true + : false), child: _buildItemsList(_boardList.isNotEmpty ? _boardList[r][c].pencilValues : null), diff --git a/lib/screens/home/bloc.dart b/lib/screens/home/bloc.dart new file mode 100644 index 000000000..3b1874415 --- /dev/null +++ b/lib/screens/home/bloc.dart @@ -0,0 +1,3 @@ +export 'home_bloc.dart'; +export 'home_event.dart'; +export 'home_state.dart'; \ No newline at end of file diff --git a/lib/screens/home/home_bloc.dart b/lib/screens/home/home_bloc.dart new file mode 100644 index 000000000..0793d5f23 --- /dev/null +++ b/lib/screens/home/home_bloc.dart @@ -0,0 +1,15 @@ +import 'dart:async'; +import 'package:bloc/bloc.dart'; +import './bloc.dart'; + +class HomeBloc extends Bloc { + @override + HomeState get initialState => InitialHomeState(); + + @override + Stream mapEventToState( + HomeEvent event, + ) async* { + // TODO: Add Logic + } +} diff --git a/lib/screens/home/home_event.dart b/lib/screens/home/home_event.dart new file mode 100644 index 000000000..1eee85652 --- /dev/null +++ b/lib/screens/home/home_event.dart @@ -0,0 +1,4 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class HomeEvent {} diff --git a/lib/screens/home/home_screen.dart b/lib/screens/home/home_screen.dart new file mode 100644 index 000000000..938a0cae5 --- /dev/null +++ b/lib/screens/home/home_screen.dart @@ -0,0 +1,24 @@ +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; + +class HomeScreen extends StatelessWidget { + + static final String id = 'home_screen'; + + + @override + Widget build(BuildContext context) { + return SafeArea( + + child: Container( + color: kPrimaryColor, + child: Column( + children: [ + Icon(Icons.blur_circular,size: 80.0,), + + ], + ), + ), + ); + } +} diff --git a/lib/screens/home/home_state.dart b/lib/screens/home/home_state.dart new file mode 100644 index 000000000..cf879ad92 --- /dev/null +++ b/lib/screens/home/home_state.dart @@ -0,0 +1,6 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class HomeState {} + +class InitialHomeState extends HomeState {} diff --git a/lib/test.dart b/lib/test.dart index ed2882345..95036e73c 100644 --- a/lib/test.dart +++ b/lib/test.dart @@ -8,8 +8,8 @@ class Test extends StatelessWidget { return MaterialApp( title: '', theme: ThemeData.dark().copyWith( - primaryColor: Color(kPrimaryColor), - scaffoldBackgroundColor: Color(kPrimaryColor), + primaryColor: kPrimaryColor, + scaffoldBackgroundColor: kPrimaryColor, ), home: Grid(), ); diff --git a/lib/utils/Constants.dart b/lib/utils/Constants.dart index 364cc4fbf..451ca2a85 100644 --- a/lib/utils/Constants.dart +++ b/lib/utils/Constants.dart @@ -1,7 +1,7 @@ // Colors import 'package:flutter/material.dart'; -const kPrimaryColor = 0xFF220E4A; +const kPrimaryColor = Color(0xFF220E4A); const kBoardTextColor = 0xFF737272; const kBoardCellEmpty = 0xFFFFF3D2; const kBoardBorder = 0xFFE2E6E7; From 360e0ba1dd681bec3b28d28e6815b7cb59034bff Mon Sep 17 00:00:00 2001 From: New Pc First Commit <> Date: Wed, 12 Feb 2020 17:56:08 +0500 Subject: [PATCH 19/57] UI --- assets/fonts/Staatliches-Regular.ttf | Bin 0 -> 61312 bytes assets/images/2.0x/header.png | Bin 0 -> 10107 bytes assets/images/2.0x/ic_help.png | Bin 0 -> 5613 bytes assets/images/2.0x/ic_logo.png | Bin 0 -> 14874 bytes assets/images/2.0x/ic_setting.png | Bin 0 -> 2334 bytes assets/images/2.0x/pencil.png | Bin 0 -> 1684 bytes assets/images/2.0x/subheader.png | Bin 0 -> 3954 bytes assets/images/3.0x/header.png | Bin 0 -> 19605 bytes assets/images/3.0x/ic_help.png | Bin 0 -> 8489 bytes assets/images/3.0x/ic_logo.png | Bin 0 -> 27309 bytes assets/images/3.0x/ic_setting.png | Bin 0 -> 3325 bytes assets/images/3.0x/pencil.png | Bin 0 -> 2277 bytes assets/images/3.0x/subheader.png | Bin 0 -> 7412 bytes assets/images/header.png | Bin 0 -> 3704 bytes assets/images/ic_help.png | Bin 0 -> 2717 bytes assets/images/ic_logo.png | Bin 0 -> 5135 bytes assets/images/ic_setting.png | Bin 0 -> 1196 bytes assets/images/pencil.png | Bin 0 -> 956 bytes assets/images/subheader.png | Bin 0 -> 1455 bytes lib/components/gradient_button.dart | 64 +++++++++++++++++++++++++++ lib/components/top_container.dart | 45 +++++++++++++++++++ lib/main.dart | 13 +++++- lib/screens/help/bloc.dart | 3 ++ lib/screens/help/help_bloc.dart | 15 +++++++ lib/screens/help/help_event.dart | 4 ++ lib/screens/help/help_screen.dart | 59 ++++++++++++++++++++++++ lib/screens/help/help_state.dart | 6 +++ lib/screens/home/home_screen.dart | 44 +++++++++++++++--- lib/screens/level/bloc.dart | 3 ++ lib/screens/level/level_bloc.dart | 15 +++++++ lib/screens/level/level_event.dart | 4 ++ lib/screens/level/level_screen.dart | 56 +++++++++++++++++++++++ lib/screens/level/level_state.dart | 6 +++ pubspec.yaml | 20 ++++----- 34 files changed, 339 insertions(+), 18 deletions(-) create mode 100755 assets/fonts/Staatliches-Regular.ttf create mode 100755 assets/images/2.0x/header.png create mode 100755 assets/images/2.0x/ic_help.png create mode 100755 assets/images/2.0x/ic_logo.png create mode 100755 assets/images/2.0x/ic_setting.png create mode 100755 assets/images/2.0x/pencil.png create mode 100755 assets/images/2.0x/subheader.png create mode 100755 assets/images/3.0x/header.png create mode 100755 assets/images/3.0x/ic_help.png create mode 100755 assets/images/3.0x/ic_logo.png create mode 100755 assets/images/3.0x/ic_setting.png create mode 100755 assets/images/3.0x/pencil.png create mode 100755 assets/images/3.0x/subheader.png create mode 100755 assets/images/header.png create mode 100755 assets/images/ic_help.png create mode 100755 assets/images/ic_logo.png create mode 100755 assets/images/ic_setting.png create mode 100755 assets/images/pencil.png create mode 100755 assets/images/subheader.png create mode 100644 lib/components/gradient_button.dart create mode 100644 lib/components/top_container.dart create mode 100644 lib/screens/help/bloc.dart create mode 100644 lib/screens/help/help_bloc.dart create mode 100644 lib/screens/help/help_event.dart create mode 100644 lib/screens/help/help_screen.dart create mode 100644 lib/screens/help/help_state.dart create mode 100644 lib/screens/level/bloc.dart create mode 100644 lib/screens/level/level_bloc.dart create mode 100644 lib/screens/level/level_event.dart create mode 100644 lib/screens/level/level_screen.dart create mode 100644 lib/screens/level/level_state.dart diff --git a/assets/fonts/Staatliches-Regular.ttf b/assets/fonts/Staatliches-Regular.ttf new file mode 100755 index 0000000000000000000000000000000000000000..5d8ae49cc2e092c10a65c56de81e2814cdd45d5b GIT binary patch literal 61312 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 aJ*1BBr*HF^9B8A%5WZUJk(}}6_5T1B+dts| literal 0 HcmV?d00001 diff --git a/assets/images/2.0x/header.png b/assets/images/2.0x/header.png new file mode 100755 index 0000000000000000000000000000000000000000..147b27e0d54c38793cb8c1058f639dc63ddc899f GIT binary patch literal 10107 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 literal 0 HcmV?d00001 diff --git a/assets/images/2.0x/ic_help.png b/assets/images/2.0x/ic_help.png new file mode 100755 index 0000000000000000000000000000000000000000..e4b0c3899d038e84b1a2a714c06e97be93f5dbac GIT binary patch literal 5613 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 Hu0mjfo7ezR literal 0 HcmV?d00001 diff --git a/assets/images/2.0x/ic_logo.png b/assets/images/2.0x/ic_logo.png new file mode 100755 index 0000000000000000000000000000000000000000..52ee07c74659045bb891ab141f453faf34359bde GIT binary patch literal 14874 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 lfkOX9Go#p7fN7Xm^PBUh4G{(}A z$}a`pEPg|j0U;04Z{+|eih);9{+$#eGc8^Tj7qg|>S+P6T>RUlwTPz%vUQfZNBDhY)t*1{6%qR;z{{dazG`DMfPBlW2* zuuQE7%V;bTTDD3c)x2LXfvH2S@So_ScImDI5;NEnv?ZMNx-4e+bdu^dXPFO};d5b( z)yd|S*H9i{;ew?c%|^{Xr~KN$oAsLEHEak3O$5s=Ew#<8W!&qh2(r4fK&KDt?a+_( z9(h)RksF&vGnL_`<%?+unTMymsmYe^VIe&BE0*69czrepz-J?BlQv85bm6Dx)h#}S z>Sz&50s=`&>eno}_Nypgi>y!WALc)!1--e;sQ>8O0`zoh(Tz>7n_04yn9 z{n`TZ%Psv2I_z+tj${?ko%QNGl|OkTBPH1*s#C-37+KEVw#l1cxF~5p|yiNn5W0Vh=$atnPry`tZC7H2zMm zOFe4?XdK2Ow*M7{8$VYkg)0WZ08E1x0x+OpeXzP<*ZF-9T&uw}-3n%X;iMyE)~BC6 z!ivHFb;a+X8URb3C8%m30!KJ(<6iUmI@bVFfhnIOe(fJ-U3&1%I*+g>_kV5iX8}80 z-Aq1ylp2*K=?{XzG7hWD9I*eF!2YS?gJFRAi;FoR#^3+H{J&iO5A0r4o$Q>K(*OVf M07*qoM6N<$f+X!lkpKVy literal 0 HcmV?d00001 diff --git a/assets/images/2.0x/ic_setting.png b/assets/images/2.0x/ic_setting.png new file mode 100755 index 0000000000000000000000000000000000000000..4771e0a914b617b62079df3657ae26fc0fe55bdb GIT binary patch literal 2334 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 Ef<%m6Q~&?~ literal 0 HcmV?d00001 diff --git a/assets/images/2.0x/pencil.png b/assets/images/2.0x/pencil.png new file mode 100755 index 0000000000000000000000000000000000000000..ddf7629a996cc5637e601d9f9369f9bf5a467913 GIT binary patch literal 1684 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 literal 0 HcmV?d00001 diff --git a/assets/images/3.0x/ic_help.png b/assets/images/3.0x/ic_help.png new file mode 100755 index 0000000000000000000000000000000000000000..dc367a5fe884f5c187f64c636f6aede1fac74794 GIT binary patch literal 8489 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 XPJ!3HmX9u)00000NkvXXu0mjfCo9$p literal 0 HcmV?d00001 diff --git a/assets/images/3.0x/ic_logo.png b/assets/images/3.0x/ic_logo.png new file mode 100755 index 0000000000000000000000000000000000000000..56e3ccb86e65fda29845ce97085c822827ff9f63 GIT binary patch literal 27309 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 Ye@{&KT?OJAr2qf`07*qoM6N<$f=~^8O8@`> literal 0 HcmV?d00001 diff --git a/assets/images/3.0x/ic_setting.png b/assets/images/3.0x/ic_setting.png new file mode 100755 index 0000000000000000000000000000000000000000..84419632d42400a8bad8156384a7ce766b266dfe GIT binary patch literal 3325 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 Hu0mjfVEQ6c literal 0 HcmV?d00001 diff --git a/assets/images/3.0x/pencil.png b/assets/images/3.0x/pencil.png new file mode 100755 index 0000000000000000000000000000000000000000..73da03be2f65ab18f73b46832b0a82b6617ecad8 GIT binary patch literal 2277 zcmW-jcQhMn8^A-*fvZN*D%vY{2^F=aYJ^(Ri(ZQGsT-?mwbZOFgiuv#k5)R2qb-U` zh=kS-MQ_a{Mre_!k&<$g?~mvAj`MrZd7tOJ=Q%G5?f?@$ef~5601&pZwz$a|6S#3w zfJ3Uni%iaND%9F70sy$A&kY{Sr`q0}O`eFGujupcul= zP6b@zjW#8S=e@ir2Cq#oE`BP-Ou89&rpC7u>&DSbLE52p6PTh zfCFM~`&00%Kg!AnubiZ>5A30P9+qfN@s_%HODVMF=cKs@xB z-$Tu|@=X9URQ70myJbq@)t3-$f=-p#YUMfL{h89v{T(0*{e~eOf8EowDD#e)G?9*n zLcZL<9Ft#39}Q&f225ym@;YvuO%%_PfAN;0kZrm>182WP%b0G{#YmV`U)I+eTM1}n zA051yUKUW2;hUXHv;u|LQMY(O5{e3@I}K4y{!1BkcZf7Y&r*7(Rf4}20dcz-Xa1`| zM-9$~qf?P}?ZT0k%)-Hpesbfa#8xU*y-=iS*B@-fEYuDiZv6fKnO5=VD|rwJs8;V% zJ--B}9}FeIOl11s1h+h`Hu<}cDs{j;Eq%)M3nviIS*DA9<@~4qtQ9f- zR(#BMXiTCWKBCZK9p-DRSNbVC9eP%r%P$xK#dvFve{Rk&ShEJ+!wKO-`>HrSX|F@y zxjT_@m^!-(J0|eTBb|m`Os=LA+neax6)yqN^@>DM50RljhvalM%c22NrEyS#6m%wl z=UlI~@G_2P_(P7S0V&bXOMa;I!65I;TGk)v6@|lh(eC2@grLY*`leQi4-V{qX=GC| zg@_SKdvFyGo~($*ucReW>5na$wmBCfqJHnTjqv(P5<&ivkhUXzJNt6=sDgTyO+&B) zQZjJ%lem6abHkZ}%o>Gkt0SNy?BAodx4*S24unLrv|^fr8!+t0*kCuc7E#7^0a28y z;oHFYC5%DAO5b+N)4L^}KG6Ao>8`(9U12zysM~@* z$O^oNwx39_ev%Fgq1{4rQh=+7VAM#7G3%fxvSL<~hYE!p&6IE6>M7L|>G1^~Co4-J zUX2lI$xQ8ok|0FSlWO%vLDDUyFAVFxrq%uWYur;7bSbN^9bukVk*n^vJfX$H7i7sd z9Z_Sjk3^_@AkSCNs`U~h$Tkpl*|>&vkO|>1CexThX0{@iSsGlTbh*ql;gCG>Czs<& zT$0te9Mj~GGI52=@vB^t4Y?dM<#1h*>jx@w{dEx64+L@j9!0L-1LFEeid_E)#P#Q0 zETb)$T{c6uXjj7gv99`&K?A@SJhGTQg8cFIz9in{o*o}um*QkkZ2SI5#F#&?G;gJ= zGai32(j^V%B8#w++DcQBQF`#m(M3wm#g9Ese~50LT>Q%=9p-X&;Zls*KQH&c3$frW z6eky=JT#_)XK4COy325QV;NC%SIq)UN3y3bw0hTKi&C1_MZt>UOP!qN^EBR9!1y(a zq2k1xgN@RLW`*P?iOvYS=SP?OD;fG&G(=$=A?&f*Ra9kh zSeVQecNONSeJ;o_{9PTEL4%*iQ?wU#rpzVCf@+Oxs&VITPXGT|ax2SC^($;!bYv%UPFpw`%?KKC?5G|5B)oXUQ+(^Noe$ zFLSC;EaQ^QrpcI(u|7x*m=&FqTTyDl>Br_!$l$1IoCTx0JKg!j;KC{PC~rcIZM#QE zj|~sBj-lOcg8bhb_t{g$-%}Kv^5~fnxZgyScsWZu4dX->@F8U+SCIt|Vq;>qCrr|& zEhyDh69Fl3ryXPM!S`~|gpZ|!ApZ~h-laVNWYX0_vS0`4<-He-^Sy4~q}a~Zow*O~ z?r3L02~nAc!xE;KBsJWhh{_;kspgI{sScqE7=p5$VR@@i?DBYgE{pl0%wZ c@XSQ_v(rz-BTm_HekA}KO9zX_>)y%#0aNXStN;K2 literal 0 HcmV?d00001 diff --git a/assets/images/3.0x/subheader.png b/assets/images/3.0x/subheader.png new file mode 100755 index 0000000000000000000000000000000000000000..eb898d614ed09c1ae92c4efcdd892de2f10bb4d3 GIT binary patch literal 7412 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¬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 XyRtR$2r;i#00000NkvXXu0mjf*d#se literal 0 HcmV?d00001 diff --git a/assets/images/ic_logo.png b/assets/images/ic_logo.png new file mode 100755 index 0000000000000000000000000000000000000000..bd2095531fe9d68741918057e47cd6781a2b047d GIT binary patch literal 5135 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 literal 0 HcmV?d00001 diff --git a/assets/images/ic_setting.png b/assets/images/ic_setting.png new file mode 100755 index 0000000000000000000000000000000000000000..bbc22386b909aa072ff252a5a52c9c0a933c34fb GIT binary patch literal 1196 zcmV;d1XKHoP)500009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP%CtbP*L2jUqYX6hec|N1&&+LIM?paJWzoDD(gvY(M>e$}3-AA%KJ3F)U+nM)y zXBME2X6NSv-(LCt#^t3S!|(uv>)n(n4X$l&1aypv}6S%Y{p2)Tr^N zU(QF|E@^u3k$#Xwk@cWaO-FO5LZfMDLD^hRk&qArph43#;(dPqWJ8$RK#(>OIXf{n zb`uCiMEHLt2&=vL(#f$%(=a6!HLc>w zLI7+imCMQZflx?e16|j4vLuMm?dbwLss-}m_%q>JZ7pkGNiM4ov+H!(gIZwE*jMrE0mh>+s8-38LB8nK)Jhh-l;e8{`M z^VR21j)vL+QikDLOkRs3KvTTDy|crBidKEMy9+!n7YpFMz~#`Ip|fBXK$67x3(t;D zwhB@OqpGS*M0bi+HFU_zU+chg4hQ5}+2eMVft-SHm0y?nE6@Bs!hK(_!%pFj1;W*} zl>(lX3q>u=H_}!>xN7cAmy*jtOlg3yJc1F*GZW``Tcgv2&@+Ez*1?y#4nseG0+}aX zfm9$2kM|G2@QJ7L2vOMy$bm5Rw77IF&K&pl*6%+-VDV$C?(e~IP(GN4hq^rA6okw6 zcEAVe$*m-Ye~Fgsj;<{M`RYRpq);dV!ia(c*`ApjXF!nzP+9g>_TSrnasqA*zjI$u zH!E8+QwxOeRX$k;H?#kt-@b$6*FUQYYOtZEVGaWEdcBs#dwO~-AiiXe{ra^dpr&9N zft0j9^cr*5DJXOwu@a+QpoTHiEJ*(N%QsU`pAW3D?S!4$%JsDp<3Ymh0AbddIq}iL zh+C2pgMIzhURIKw8A9y<8Teu=Qo1hXAty70+6mGs5NbC_D?q3dAWnf$r$C$lp-zI> z1+rjny$Vr`V5$=!b%7|&i&%t5`;N*kQJk?xV<7oXf^hNOeqSESV*!u6`^M|O%x3l~ z#=?|U%MNZ)%1(Hl0;vro@Xw;OH9kv>?2Dv2fRFfPmC-7l0I5`I$uj?Jqz%(Z`@O!P zzqfa;%G%lUvO+1E1%iSsnCChHQW87bM%dAIiXClvB+rS4Cwdn`g83EV$PzpN0000< KMNUMnLSTYM6fArI literal 0 HcmV?d00001 diff --git a/assets/images/pencil.png b/assets/images/pencil.png new file mode 100755 index 0000000000000000000000000000000000000000..e9a99f85ebcf81bcb5d881c62543eca232a34d4f GIT binary patch literal 956 zcmV;t14I0YP)EBx@gx$KlSlEW7Z8jlUVOyFgNZGPfJQDF zqaJ-E#=rqQDj`CM0ug1gkqUHooLShi_ThF*cb9+Cc4v2H_m^pRX1WMT`CfZ2C;+rl zKtBL=BZWZI>7y8^a1xF+*L65ZY4mtg90oNCIkrOoU-YC$NOS zP1iNv%m&G$C>WVO(a;1o2d6@3MI<2<`gDCgQo^Q1swfwY zDyBmg5(&KP-hvAkmUmi&RR{di7u^wtZ3Z()7zJ;<16(kh+Q0%V(Ka$+Gb7u=~7S1k}X)0yhFo&sPRMp`XZ2JIdN>`*gNq4>{v!>u>nic z?c~_u9c9h4u|M!>XjsK^WW~q(;Od)aC`@f+F&6)K@J_f#L_rAq;zMwFQa9YX*sCVa z#wMEDNMI9P@ey|Bg4AOKMJ&IZ(?SM~D!jbcE*_Jfr>?GS#u`F-==DP)tLi8=D=4f2 zY}Qb47;6d&4q{D1!69r;P;da7GZbvbt_TV?Vpj}>JY#8WvxIZPF05|;XEC34t~VRJ z)E{A&NL|k|BlNklUK`NZ7JzxTTY(}mxq4op`M@qBH!PkD@g!IUT?v*(g#>ab!G(b* zL9hzSV-`!Xmc3P`RA;bYQaS(07ONuBm;M}x7xZOIpz4JTuvD(gh+K+W|Mgo2<;jGl z-Vi`Rm0^1Uu~pl)6v~r~rBw`Bw%@Sb_|yzEv^@y={eJb?nB`C&4QmE@{zeyk9-D;i zo7^pYpDj=xj>T=|B??vlj=u&2$lR0=UllJuZ6xgSI2I$Rnw{hF`jm|sAG zaPa!0xB7N{Kisc->Ggfdx(LMd&g1BgqJP)^>5yO!QpDlA@G;17bPn7Z-J7P-TavmaHPJvSOl3W9<;rQz6O#D6e9G3IxnR3z)l` zyN{ZHzBMYz$ey>}Zx}hzoFQ(SfGY+#%7dla!!dEv`mB+7UXM)ov;Q=0-24gk|wjZQ1GZ#g&=1SNz~Re$UV7^e+K$m}`ht`H)Vi1?vktgd zk@P|u&Ey8*Z#(3s;U~;9V9*yMV8QIXLo-Iz4oO|dPO07W@j>`Im`w)$(+&Fb@)u#@ z7seU-vEy8`@DxnVJ56j0N+EdfxOK#DqY_vs^?;5Kl+Y8^b;~j^NphMS(mjBsSfwOm zJt6g!G4S)= z>z16_$mPd|t9w7`*+p)Ht>|6eAd3WvEnZ*Cd*3-ym_dU8&pT3Nw6*cl0l&sB)z9C| z-qbi>UO(lNX&J1x)=US(KO07U5DZ3d(Ak z_2iSNDr{+$q[ + Column( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Container( + margin: EdgeInsets.only(top: 30.0), + child: Icon(Icons.backspace)), + Text( + text, + style: TextStyle( + fontFamily: 'Staatliches', + fontSize: 25.0, + color: Colors.white, + decoration: TextDecoration.none), + ), + ], + ), + Icon( + icon, + size: 150.0, + color: Colors.pink[500], + ) + ], + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index f433c0c79..2a20b2f9c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,8 +2,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:sudoku_brain/screens/board/board_screen.dart'; import 'package:sudoku_brain/screens/board/main_board_bloc.dart'; +import 'package:sudoku_brain/screens/help/bloc.dart'; +import 'package:sudoku_brain/screens/help/help_screen.dart'; import 'package:sudoku_brain/screens/home/bloc.dart'; import 'package:sudoku_brain/screens/home/home_screen.dart'; +import 'package:sudoku_brain/screens/level/bloc.dart'; +import 'package:sudoku_brain/screens/level/level_screen.dart'; import 'package:sudoku_brain/utils/Constants.dart'; void main() => runApp(MyApp()); @@ -18,7 +22,7 @@ class MyApp extends StatelessWidget { primaryColor: kPrimaryColor, scaffoldBackgroundColor: kPrimaryColor, ), - initialRoute: HomeScreen.id, + initialRoute: HelpScreen.id, routes: { HomeScreen.id: (context) => BlocProvider( create: (BuildContext context) => HomeBloc(), @@ -28,6 +32,13 @@ class MyApp extends StatelessWidget { create: (BuildContext context) => MainBoardBloc(), child: MainBoard(), ), + LevelScreen.id: (context) => BlocProvider( + create: (BuildContext context) => LevelBloc(), + child: LevelScreen(), + ), HelpScreen.id: (context) => BlocProvider( + create: (BuildContext context) => HelpBloc(), + child: HelpScreen(), + ), }, ); } diff --git a/lib/screens/help/bloc.dart b/lib/screens/help/bloc.dart new file mode 100644 index 000000000..fd88585ea --- /dev/null +++ b/lib/screens/help/bloc.dart @@ -0,0 +1,3 @@ +export 'help_bloc.dart'; +export 'help_event.dart'; +export 'help_state.dart'; \ No newline at end of file diff --git a/lib/screens/help/help_bloc.dart b/lib/screens/help/help_bloc.dart new file mode 100644 index 000000000..378dd0636 --- /dev/null +++ b/lib/screens/help/help_bloc.dart @@ -0,0 +1,15 @@ +import 'dart:async'; +import 'package:bloc/bloc.dart'; +import './bloc.dart'; + +class HelpBloc extends Bloc { + @override + HelpState get initialState => InitialHelpState(); + + @override + Stream mapEventToState( + HelpEvent event, + ) async* { + // TODO: Add Logic + } +} diff --git a/lib/screens/help/help_event.dart b/lib/screens/help/help_event.dart new file mode 100644 index 000000000..a1708a8c5 --- /dev/null +++ b/lib/screens/help/help_event.dart @@ -0,0 +1,4 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class HelpEvent {} diff --git a/lib/screens/help/help_screen.dart b/lib/screens/help/help_screen.dart new file mode 100644 index 000000000..773285fcd --- /dev/null +++ b/lib/screens/help/help_screen.dart @@ -0,0 +1,59 @@ +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/components/gradient_button.dart'; +import 'package:sudoku_brain/components/top_container.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; + +class HelpScreen extends StatelessWidget { + static final String id = 'help_screen'; + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Column( + children: [ + TopContainer( + text: 'HELP', + icon: Icons.account_circle, + ), + Expanded( + flex: 2, + child: Container( + color: kPrimaryColor, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + RaisedGradientButton( + text: 'TUTORIAL', + gradient: LinearGradient( + colors: [Color(0xFFFABB69), Color(0xFFFE3E16)], + ), + onPressed: () { + print('button clicked'); + }), + RaisedGradientButton( + text: 'CONTACT US', + gradient: LinearGradient( + colors: [Color(0xFF82FFF4), Color(0xFF05AB9C)], + ), + onPressed: () { + print('button clicked'); + }), + RaisedGradientButton( + text: 'TERMS OF USE', + gradient: LinearGradient( + colors: [Color(0xFFBEE4FF), Color(0xFF1E9FFE)], + ), + onPressed: () { + print('button clicked'); + }), + ], + ), + ), + ), + ], + ), + ); + } +} + + diff --git a/lib/screens/help/help_state.dart b/lib/screens/help/help_state.dart new file mode 100644 index 000000000..cb3a98b86 --- /dev/null +++ b/lib/screens/help/help_state.dart @@ -0,0 +1,6 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class HelpState {} + +class InitialHelpState extends HelpState {} diff --git a/lib/screens/home/home_screen.dart b/lib/screens/home/home_screen.dart index 938a0cae5..a3a4bbe15 100644 --- a/lib/screens/home/home_screen.dart +++ b/lib/screens/home/home_screen.dart @@ -1,21 +1,55 @@ import 'package:flutter/material.dart'; +import 'package:sudoku_brain/components/gradient_button.dart'; import 'package:sudoku_brain/utils/Constants.dart'; class HomeScreen extends StatelessWidget { - static final String id = 'home_screen'; - @override Widget build(BuildContext context) { return SafeArea( - child: Container( color: kPrimaryColor, child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - Icon(Icons.blur_circular,size: 80.0,), - + Image( + image: AssetImage('assets/images/ic_logo.png'), + ), + RaisedGradientButton( + text: 'CONTINUE', + icon: Icons.blur_circular, + gradient: LinearGradient( + colors: [Color(0xFF1E9FFE), Color(0xFF4F5FFE)], + ), + onPressed: () { + print('button clicked'); + }), RaisedGradientButton( + text: 'NEW GAME', + icon: Icons.blur_circular, + gradient: LinearGradient( + colors: [Color(0xFFA193FF), Color(0xFF6442FD)], + ), + onPressed: () { + print('button clicked'); + }), + RaisedGradientButton( + text: 'SETTINGS', + icon: Icons.blur_circular, + gradient: LinearGradient( + colors: [Color(0xFF91E786), Color(0xFF0AB8AD)], + ), + onPressed: () { + print('button clicked'); + }), RaisedGradientButton( + text: 'HELP', + icon: Icons.blur_circular, + gradient: LinearGradient( + colors: [Color(0xFFFE23A7), Color(0xFFE2297E)], + ), + onPressed: () { + print('button clicked'); + }), ], ), ), diff --git a/lib/screens/level/bloc.dart b/lib/screens/level/bloc.dart new file mode 100644 index 000000000..616d281e2 --- /dev/null +++ b/lib/screens/level/bloc.dart @@ -0,0 +1,3 @@ +export 'level_bloc.dart'; +export 'level_event.dart'; +export 'level_state.dart'; \ No newline at end of file diff --git a/lib/screens/level/level_bloc.dart b/lib/screens/level/level_bloc.dart new file mode 100644 index 000000000..1d44dd293 --- /dev/null +++ b/lib/screens/level/level_bloc.dart @@ -0,0 +1,15 @@ +import 'dart:async'; +import 'package:bloc/bloc.dart'; +import './bloc.dart'; + +class LevelBloc extends Bloc { + @override + LevelState get initialState => InitialLevelState(); + + @override + Stream mapEventToState( + LevelEvent event, + ) async* { + // TODO: Add Logic + } +} diff --git a/lib/screens/level/level_event.dart b/lib/screens/level/level_event.dart new file mode 100644 index 000000000..171cf6b8c --- /dev/null +++ b/lib/screens/level/level_event.dart @@ -0,0 +1,4 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class LevelEvent {} diff --git a/lib/screens/level/level_screen.dart b/lib/screens/level/level_screen.dart new file mode 100644 index 000000000..ddbd84357 --- /dev/null +++ b/lib/screens/level/level_screen.dart @@ -0,0 +1,56 @@ +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/components/gradient_button.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; + +class LevelScreen extends StatelessWidget { + static final String id = 'level_screen'; + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Container( + color: kPrimaryColor, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Image( + image: AssetImage('assets/images/ic_logo.png'), + ), + RaisedGradientButton( + text: 'EASY', + gradient: LinearGradient( + colors: [Color(0xFF91E786), Color(0xFF0AB8AD)], + ), + onPressed: () { + print('button clicked'); + }), + RaisedGradientButton( + text: 'MEDIUM', + gradient: LinearGradient( + colors: [Color(0xFF1E9FFE), Color(0xFF4F5FFE)], + ), + onPressed: () { + print('button clicked'); + }), + RaisedGradientButton( + text: 'HARD', + gradient: LinearGradient( + colors: [Color(0xFFA193FF), Color(0xFF6442FD)], + ), + onPressed: () { + print('button clicked'); + }), + RaisedGradientButton( + text: 'EXPERT', + gradient: LinearGradient( + colors: [Color(0xFFFE23A7), Color(0xFFE2297E)], + ), + onPressed: () { + print('button clicked'); + }), + ], + ), + ), + ); + } +} diff --git a/lib/screens/level/level_state.dart b/lib/screens/level/level_state.dart new file mode 100644 index 000000000..c39e69e46 --- /dev/null +++ b/lib/screens/level/level_state.dart @@ -0,0 +1,6 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class LevelState {} + +class InitialLevelState extends LevelState {} diff --git a/pubspec.yaml b/pubspec.yaml index 817e89c4f..317d5afcf 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -46,27 +46,23 @@ flutter: # To add assets to your application, add an assets section, like this: assets: - assets/brain.json + - assets/images/ - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware. - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages # To add custom fonts to your application, add a fonts section here, # in this "flutter" section. Each entry in this list should have a # "family" key with the font family name, and a "fonts" key with a # list giving the asset and other descriptors for the font. For # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic + fonts: + - family: Staatliches + fonts: + - asset: assets/fonts/Staatliches-Regular.ttf + + # - family: Trajan Pro # fonts: - # - asset: fonts/TrajanPro.ttf + # - asset: fonts/Staatliches-Regular.ttf # - asset: fonts/TrajanPro_Bold.ttf # weight: 700 # From 5ce5e475c8d93fbcc0afc028992c7ada28995c77 Mon Sep 17 00:00:00 2001 From: zahidch052 Date: Wed, 12 Feb 2020 22:17:17 +0500 Subject: [PATCH 20/57] UI/images integration --- lib/components/gradient_button.dart | 17 +++++++++-------- lib/main.dart | 2 +- lib/screens/home/home_screen.dart | 16 +++++++++------- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/lib/components/gradient_button.dart b/lib/components/gradient_button.dart index 47580c69e..1a699b413 100644 --- a/lib/components/gradient_button.dart +++ b/lib/components/gradient_button.dart @@ -7,7 +7,7 @@ class RaisedGradientButton extends StatelessWidget { final double height; final Function onPressed; final String text; - final IconData icon; + final String icon; const RaisedGradientButton( {Key key, @@ -49,13 +49,14 @@ class RaisedGradientButton extends StatelessWidget { fontSize: 28.0), ), ), - leading: icon == null - ? null - : Icon( - icon, - color: Colors.white, - size: 65.0, - ), + leading: new Container( + width: 150.0, + decoration: new BoxDecoration( + color: Color(0xFF6B4CFD), + shape: BoxShape.circle, + ), + child: Image(image: AssetImage(icon),), + ), ), ), ), diff --git a/lib/main.dart b/lib/main.dart index 2a20b2f9c..4503af307 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -22,7 +22,7 @@ class MyApp extends StatelessWidget { primaryColor: kPrimaryColor, scaffoldBackgroundColor: kPrimaryColor, ), - initialRoute: HelpScreen.id, + initialRoute: HomeScreen.id, routes: { HomeScreen.id: (context) => BlocProvider( create: (BuildContext context) => HomeBloc(), diff --git a/lib/screens/home/home_screen.dart b/lib/screens/home/home_screen.dart index a3a4bbe15..0d07d829d 100644 --- a/lib/screens/home/home_screen.dart +++ b/lib/screens/home/home_screen.dart @@ -14,19 +14,20 @@ class HomeScreen extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Image( - image: AssetImage('assets/images/ic_logo.png'), + image: AssetImage('assets/images/header.png'), ), RaisedGradientButton( text: 'CONTINUE', - icon: Icons.blur_circular, + icon: 'assets/images/pencil.png', gradient: LinearGradient( colors: [Color(0xFF1E9FFE), Color(0xFF4F5FFE)], ), onPressed: () { print('button clicked'); - }), RaisedGradientButton( + }), + RaisedGradientButton( text: 'NEW GAME', - icon: Icons.blur_circular, + icon: 'assets/images/pencil.png', gradient: LinearGradient( colors: [Color(0xFFA193FF), Color(0xFF6442FD)], ), @@ -35,15 +36,16 @@ class HomeScreen extends StatelessWidget { }), RaisedGradientButton( text: 'SETTINGS', - icon: Icons.blur_circular, + icon: 'assets/images/ic_setting.png', gradient: LinearGradient( colors: [Color(0xFF91E786), Color(0xFF0AB8AD)], ), onPressed: () { print('button clicked'); - }), RaisedGradientButton( + }), + RaisedGradientButton( text: 'HELP', - icon: Icons.blur_circular, + icon: 'assets/images/ic_help.png', gradient: LinearGradient( colors: [Color(0xFFFE23A7), Color(0xFFE2297E)], ), From a7387a9b5cec175e6bb57925b4a4634ee8dfac81 Mon Sep 17 00:00:00 2001 From: New Pc First Commit <> Date: Thu, 13 Feb 2020 17:53:30 +0500 Subject: [PATCH 21/57] assets/UI --- assets/images/2.0x/ic_back.png | Bin 0 -> 615 bytes assets/images/2.0x/ic_bell.png | Bin 0 -> 2760 bytes assets/images/2.0x/ic_board.png | Bin 0 -> 1245 bytes assets/images/2.0x/ic_help_ pink.png | Bin 0 -> 8785 bytes assets/images/2.0x/ic_help_orange.png | Bin 0 -> 8780 bytes assets/images/2.0x/ic_setting_large.png | Bin 0 -> 3396 bytes assets/images/3.0x/ic_back.png | Bin 0 -> 908 bytes assets/images/3.0x/ic_bell.png | Bin 0 -> 4030 bytes assets/images/3.0x/ic_board.png | Bin 0 -> 817 bytes assets/images/3.0x/ic_help_ pink.png | Bin 0 -> 13110 bytes assets/images/3.0x/ic_help_orange.png | Bin 0 -> 13113 bytes assets/images/3.0x/ic_setting_large.png | Bin 0 -> 4735 bytes assets/images/ic_back.png | Bin 0 -> 365 bytes assets/images/ic_bell.png | Bin 0 -> 1422 bytes assets/images/ic_board.png | Bin 0 -> 778 bytes assets/images/ic_help_ pink.png | Bin 0 -> 4191 bytes assets/images/ic_help_orange.png | Bin 0 -> 4191 bytes assets/images/ic_setting_large.png | Bin 0 -> 1793 bytes lib/components/gradient_button.dart | 33 ++++-- lib/components/top_container.dart | 49 +++++--- lib/main.dart | 11 +- lib/screens/help/help_screen.dart | 12 +- lib/screens/home/home_screen.dart | 134 +++++++++++++++------- lib/screens/level/level_screen.dart | 114 ++++++++++++------ lib/screens/tutorial/bloc.dart | 3 + lib/screens/tutorial/tutorial_bloc.dart | 15 +++ lib/screens/tutorial/tutorial_event.dart | 4 + lib/screens/tutorial/tutorial_screen.dart | 27 +++++ lib/screens/tutorial/tutorial_state.dart | 6 + 29 files changed, 306 insertions(+), 102 deletions(-) create mode 100755 assets/images/2.0x/ic_back.png create mode 100755 assets/images/2.0x/ic_bell.png create mode 100755 assets/images/2.0x/ic_board.png create mode 100755 assets/images/2.0x/ic_help_ pink.png create mode 100755 assets/images/2.0x/ic_help_orange.png create mode 100755 assets/images/2.0x/ic_setting_large.png create mode 100755 assets/images/3.0x/ic_back.png create mode 100755 assets/images/3.0x/ic_bell.png create mode 100755 assets/images/3.0x/ic_board.png create mode 100755 assets/images/3.0x/ic_help_ pink.png create mode 100755 assets/images/3.0x/ic_help_orange.png create mode 100755 assets/images/3.0x/ic_setting_large.png create mode 100755 assets/images/ic_back.png create mode 100755 assets/images/ic_bell.png create mode 100755 assets/images/ic_board.png create mode 100755 assets/images/ic_help_ pink.png create mode 100755 assets/images/ic_help_orange.png create mode 100755 assets/images/ic_setting_large.png create mode 100644 lib/screens/tutorial/bloc.dart create mode 100644 lib/screens/tutorial/tutorial_bloc.dart create mode 100644 lib/screens/tutorial/tutorial_event.dart create mode 100644 lib/screens/tutorial/tutorial_screen.dart create mode 100644 lib/screens/tutorial/tutorial_state.dart diff --git a/assets/images/2.0x/ic_back.png b/assets/images/2.0x/ic_back.png new file mode 100755 index 0000000000000000000000000000000000000000..b4ffd3e1e1c0e8c567d58dd775dbd95b4bdd82ca GIT binary patch literal 615 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 O0000``W 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 Hu0mjfn!}#^ literal 0 HcmV?d00001 diff --git a/assets/images/2.0x/ic_help_orange.png b/assets/images/2.0x/ic_help_orange.png new file mode 100755 index 0000000000000000000000000000000000000000..ab3bd3332774433f52a59981668f230cd7ab2861 GIT binary patch literal 8780 zcmV-SBD39zP)m0xK~#7F?Ooe% zT*rC;<}A5f>bkNn7DdWh8Au#BaU>NroCIw|C5Rn250(+wNzfLi{sKurE)M!2@}aPi zo9UOnib5MCu~SHXNEEwBv~HW5UBr|VJ8@E&YfB;}Su$4_lB?zJnSQ@>c9yfV=Q3w^ zDf7}FKiR`gxDjc121gCJC;{KH=n1+|IqJJ;RaJt&39IgYc-Qz$93wR>lB zNme0I^v}b@a@}{#`@Ma)vB)@g?i>iPpDX_$-)vh?ty^*E(mQMO(-+tB14@ImgaLAF z9+)lOap&w{cc#)hS*0B3hhp5VR8H*Nxie3Tj71>?lpvkS9PR`OfSGG)dhgsi?{zsM zyKRov-*JmJY%Wnd5WZ^W%S0o)`}zvB2O>IYh$o5R@Z{BHX%voA;MXF*Hb`T6 zR_ralx9-^c7uRIn%F1wcx_hd$xqqh6v+mXl>(*BreGV=!et@!dlY$2+x(xHOQW@#A zYILlmFHB7x3nhZ@2b|y=&R5Ije3V^;Z?J9yvAWQa58N+UEGU1YOe4ClVdDJd%X_I( z8RYVNghEUtpJ%L-iqSS9Y8QPx#5Cl&Qb%_7_2uKvvnq%X07uYprA#NHhyhGYP35|M zQXHcIC!8yCxWBJ&gxW+~gqXZ|@vtl9XuwIWS-V<^&;V8px5{eqxEQn9{ruF_5Csqe zJ_eWjfp*lQB|><-=r*Q_Bwx8 z_P3R9`P&uNZt!2%toL8Dn+4l`qD@=KdtFq37%m-p_%V^U**%aLY@WGAa`di&fiY?U zi3w4Yt~2IEaNBugV8@P8n{#-ou%3={K<6NJ7^vI}6C7T=BKePBugZoBZwDX*2$E%T zY~A6%Dgt#999bQU^Dh)?^)bwEpJ+HoizXxyA%e(|RHlCVBYChZMaMg39#GlST=A0= z(j&s`4N12X9znJe?Yc+MwtngylA4jp$s^=A$8@K@6;fCeB2XFFM9h~;kJ?1jrl+T~ zulyp*7feT}1Gs#F=$*Gfg3c*GyMTi9?-m^;2RogkpZlUXYO`<11Dl8xR)m1h(4EP= zMvY`RG0@jHWOF=|A;&LgF1($|U6{yFt3bv7`E^Nuc|AD^P+4o&`@TWC2e1CEuU+3* z1T!^-fzl}dqIi`O{~ms8*GB~9m>lhxmHxX+OtMme-yYbsX;UF?|8_}XMTiR*FP=0U z$RuQdZG&&&Ng0!Zl9EEHLE%q!=D>eai8gK#w5ewE+jR&%Vz6nNW}oD}3%-9cd&BP7 z924W-zfMk!8X43_sPG{s#i_XCLezYS>+D3_v9W~k0#3fu;vXQyss8QTA0-Pg8Q=jA zH=Wax6d=NzuW|)UMiaqz_K0@eEvP>y7RAvEf^u35f5bJ$@1KMi1{rh=Gbv)9_9jxW z<3BIuzBpe`Se$f1+qqCKmG)Ws49EFpC~SKaDQ0f?M2J&_tvh@Y?7l}Vev>c;UhAe{ zM~*mRM36yYlt~fmS9n1~*F95rG`XXUTY~$dj)^1$w{t;;oWG|X!{9vf%Sp26jSM2i z8?Q$D2&niEe_YUqKK{XzAPkDom)W$0nH5|+?%|{NH&%fK85G9&?*qC*9rPEjR1${q0S2t=|r|e2JY^qk3CSPhrU#9 z+6FoO!aq24@BPc03;>#+g9n`^69GK*O6H2;x)x4bX0L0_7FvYF9tqCqA)bKR=htQFa0o0Fa9X)Ig9sy#<^{+h1(7I z7{5C0dS()2c+hwlT<*|l0b{HZk@eKz6NadS2smhnUyiHK^B`D+Bgtfd!;&ca7(@nz z-~DHr1469_ua*Wg1|Q4`%8$()`wZQRITnC7#L_s)Ctn4W9kjmA%+atw_{|$ zlL0%rediL1MK2=YK;mA*)F7&yB5DJMg83Mz+qs zJ3T}JL8mCdMh4v^o&>#M?)vZ?ZRso1N`={)z`X~lL5rjqW>SQjZ&|HATR(p)b-3v_ z^$+JJCr9}L4%apm*mu|+bkbVi1o}3tdo05orYLEA`^`0UWvcze+G>SpZjPul>&G|H zM^P?AG5zgs?bS*7uWA0tRLbx3fHRxv71Xo}_l4TZy3_-t(-+K3dCB5~!^hi<;QKA+ikbz}n>r<%uak;LL zrf6=LLK}7{>$(ON_kej*X!QVexd#)Gp5k+<0%Rac9<6v)S~D_p;RgrDwRs!x$gVKO}g)a zo3vDcYr{3-T5-+u^Yhd$qLjkMr}Kt8=*QOP!0@)EQXAF#g=VLgtt(Th`pz$%l!s-t z(NqKh7j=c@a^K%JI)5#OU>lAvbI`yn5EMA@``@m!I*&j3hsaCmo)shuu5=64RJHic zr+W+feos9)mrGSsSw}cI-ap5MzTY#Imh(+0GUx!As~q&`>FH@D&{PM?LO&kw-*}~m zZeF(t_47Ua?0I?Q^N)$q+OZ1}ODz}~8ESzeDP6nJG&*da|Ch99L-n4^cFAz-)~(QU zSdfAVAYYg%J7dG6A~wql&i8GA zGw>zu4E)^VlCoRk&&h`!V+V8W(L;SM`0$93)b9S_ zl?{cnzv(&jwWquDbQ|%lCo4mH9+)|H-vcwbB*(Qwit%4&==9srL(K#l%-N%-!fZXfq-k>R_hIL$>rxCtFg$HYOkguJ!2l z?c1$}5#BB^F$?|u{X?u4=s&Q!E*n1yFv}6ix%V0-0(F5wL>9;vFRgo`{z(f`ErhNe zr~c*pQ){i7Sf=0L4PU#b*^b4LLV4hpDDb}fc36%y{~*9>fiwanB^ToMjcZ8(VdeMX zfW+fBUbRz+>5IJ!gMziXuM@(pg{!Y$&9MBWVow;P4)@+4KKLYx6mbQj0c1G9s!*UM z4yXl82w9Q>v6di2m75ydp#y`2Y*eCJaq5$}>78AUc2Rk}UVE>XY!IXl7?Bi(pqqo4 zuptBQGY(}~4rEXODR9lS5Yq?+n&_rKVPkHCRHE<}SphTq0Tn%Jsor2RFet^n;{IM;CxP4J3Nn2+@D)Hyn?R<&zf63DjJYk%@k>>oG=|N3v%#_qRVe1NBdjp#hRP}mBL&;iv8CL!Y!x5**!I!lmF`pK z_lgVv$Z+LivQ9y$gc-fGbuKZ9yn3%?Owl7Y2V+hr9Z7r#pj?}YMMnTB;6#ql3Ptbw zn+S8)O@~efg{zm6s|4oC&|y3O7FHBc?{yy{HW&qSVg3Ln*-C<$8^Ot_Iw`mbHnNgT zg$X#B%5(&g0cb@f%!yO{X^`U2A*7)YKY32>wFy-RnTw>OvM)!>u2LgKVW7oHH7n!=4Z*9^1&lSD%CJzD-bg`nr;8aEeQ!R9lagNE$B|B zRRVO^i;6r4(;(@2p)aBLR`Dj9E`&J&q)wRh^lZ`jXEf}G2P|f zD6|C5CF;dA;}`ZMo>m#U%1&g{8f8|Rp+wkWsD!EP zL69{LIG#gk0rRA0n>P+|>cAKDf|&um8gSIl`^-n}bFG-nY-A1PE?Sx$IF?SAW0ypW z2|9IPhS(&Sn~mNsg?oxtDUcZ+wf#oIUYt!vOCxM%KNFRkw9krd;f;RG>ol~hJop9Qx z(p=0Aj%$^evyy@Frcv8lSsz5ltVP5V{-o8^sWXQCS+kxx3R&%1w%Jgf0tO#PZBMEY zrpcJMJRXF|(IO+xWH@PxiBhb5R8!rN4~3hsE4(F0ONB7yW^IQR;;a8GR=rbM8%*3W zm`O|J1PZa}aF_6GFUtk(&X_Y_vTLQ>7DD_#mJh55(eBa&P6uXyUF}HSrZQ}a5Hpsm z(b?iV|0H9BV=En)goHW>GqGmv2D{i12vML#Mk;2gs9UBMCJJ6zNLA+}1BBh}Px&1W zK?N&?FauGu2^AtPkY&@sw$dS_h$KWRe*ARom;U{!gNy@G+9SWI_74CaQ4tD2bV!)UTf0sf>zQMTuIl^xfL4} z%5H8>+)RSrHPH?Y$MFYgwL?Zbm2qWg!c1sNr!9{6dY!ZU8(R|7%>y0X5z<1*U@r9lV>tyJRyP-E{X}#!{HFc*}zKL9iml=RJA%7wH*&s z5~s4&geKuKA>4Vg>UuVlVx}$g^b|J4JpV!ntFfgk5ss6Jy!YN1g*9QC3)_UI3QWes zU$N^{G4u4US)_LB*tjX$hVc_HxEjrdACQsW*ZWQ?M!pNwLktCQR9F|2ySkijXR(}*PO|l zWZWTcY<0trC3eYn34xlc1E;Tr~L)TkIxukuG^jzW&(GGFc6hF;!yn?c|xjao+Ood*+YR zD#6D;ITNW4cnFg!MB$H(pKbkz28DoQDJ-Vq?cd$_86$#{hDbMW58s9*20ryrG54o8 zFRplB;{5sZLm&UdOfG6=pgVUYQwMKesYzqXhI{M+QgA5oc43}MNiW152ez3rluW#p zOeMD5DFRhOUvFYV);*>#9k|jkH8quUYQ96*a#1Mfq^XLg3HRomvT!IlTAf$#waL$; z2b`)OFh>?AH5(vJeNW?O%&nZ%Z0ITxwh~Qt%lyH~$;lOGI#?Zsq?AME_c|%OseuyCy@CFvmdpiE z4N!;!j|vPr&&M5$NlIItHB|v**v99vSe6K;BS$L)FcnOOXTr8CQowgest!SOk6Xqc z@_KNxAwg#I_P8NdK7wXVO{x-mK3SqYpNbs?obBo9IkOT-Q6s|{qUfQM-149g-Ip-o zgfO8?BO!KK&i}RbuEqzlfe_nvT^}S11kIY7L?zUUw`sdh{#=a|%ht)9o}SKfU(HFf z7!-w7`=Zu54?=+*dovhiYc8_e<^}`T{yul^++eCp(%Oyj7Xp)E&Om3Y68iGTSX~Z_ zky#+e66nrkfBt^VYB}P z2e18IlQSp;lp+prE`wHv3sZ@xh0$R;EEhNR%m)W`tmeh~AOW9Y&jWMTWPqs%LKG>` zvS?Ku(yR>Y@2D$vJ%w>$u4~7skB!*0eb#C;wz*DZm`X&Ep>{z@R=h<}=QS?yW3)tZ z`SRr_*nxbFEPMu=dk-T8mZ@k}9q#C#DX90Zl=T3)zQj`9vB++{IbsvahDw;e1e!m3 zFK8SY6i^`P1ev6Ky~7-*SW+eg&e@x}(mlz@ zpnw8OND5CaUOahy0^P}UoAK?h&JX_h`0NC$!YEm)0+5sp3V6s+wq_CxLIJkxmdJS; z5w2UWTfGZD)V)XK(pDwlOX#82hrV2gWcIsXm&fp1+&Vi`_){hqvocT}$~3k@1_hMuLtk1b-=IZZLm_D-Ds3`yOfghq zzDkFs1@rI!jG+H`PI_c`uy(PydCT=Un}7m?35i?N(_C*t`cCI@NA}Qnz9CP!ZuNy~ zYChlYw1*(U+O#_)g!2gB)n2nq)HOtPXD4)?1EHGe4}RG%;}?IFru~mt&g#IvgF8=S z&EJdS!Y(zOpPHH=B^}l3A+=`3PoI}ZQi7f#3#{8vqK`e$s0^sgR!O0b$0Da#*V07T z;v>QE`uhtK)Bm~dxD>Kjov#+ZIoe2+r;g0!Hg8R3uU~U=l0*)p%CHt0-$l;mSHilp zJ3$5Br^!DeCLa}Zfp zpEH0^VdfY00W_EoHWji=BTeUkLez-XQ1|N1yp|jTPo1NHyYv&F8LG>UolJF3DNH+w z1d?ssmvT3E^A7A5AE;u02zPSS_9OQR@0#@appq`z+;H9yGDP`fX1%!8=4PhX-OZha z^>YeQ4^l0x{fz~|wdMy`<^l7^l<7zkfegC%q@;){R1gD-@evNp?D~-K-rtT%&hQ)f zt-Co~{Ly{QM9|R+DOw?ef~p_Xm1{%M?^oE~~{!RPYe5P##3kyL*H;`nnYY zn27T!!X6wTAsJ9-2f{Wo83ya;tyWLy+Zt}MQYwvi_x2VEJ)iv7-P1F~Uyqt6WKtBE z6!0fbk|n}Op+1|WXon0YP>~4l`r{nhZvwZ2Fj9n(p~V=^A=FXOhFbg~r#@Fxsl2|u zL7Sik%$^h4Rff)6z(0tz{Siulu$x0c=rY+!GAu=y_lJA$AQ?t#brXgswD)<>cht~q ztc1`{Hh6AoYLG&}KRnD*X4L_vfEx^xKNQUPf3IvZD1a2W*D!yfMKU~#Itkl2F*TJV z6^*85a{)A6P0i!XtIxt8WfY3dn>QbEbycxM5Gh{#VVb`GOqx5%+{8;9FDD?mC4WkK z_lnLb6DXS&$Z&$m5IL|ZtxY|EK;&HkYpe$vRHy=PIHO(Qqj&Z9hssc`<$?VZ=Q=9e z2{OE76b`y{kxp*g&%e~6QVh*ZC-hvZ?(7x=cZee#fWsfQgO`VzO1-8&vpO8ICWLna zt+NYkDwj(8%oc}^c1SV)%M5-0d%;ODs;@uk!t+ZBiU?6j$cLUR^L@4y(TpVnp!a6$ zy_+V&BSfjxQS}y)OKyEcnvU899U!us#7qIU6y3Lf_m58C^t+JPSAQYtr~m4DNu|pP zsQfor4Sw=(uBQq?WWa=ApL^V)o7Y?Novg@k!A~*Fsn6AFHMB7h`PiMCoE&92KdgN< z#6gTme*sFtvNx&)xWX?qpf!Pl`*XyT(y>)(Q2Qe{GD_;ZWHAk%T~CsymZeh)N=~U8x)x7#N6EfvZ=qf)t0twnsHBRYq}~ zB5d6OQ{oSM|Dbz6)m#~qZ#R#^HUaY&MQ96BJR9dg0yQ$gjOXy#GySY6W>Zr~tYP*} zD#UA4OVhVGsRFCTFa@+yY~u{J!~hgIHg56zGj0da62c@MAOYrfitBa7z^0Gh?^un> zjv&QIRMS$ydzgEA&gh+3ag77O%2Runqg#&3uA#)FI7t4n9-&$ZIwc_n0J8#Opx`kB z8wk>_f}pZ7Lo6yDb97=_M%!+8C<0nbHbl^2kOHRRP)yLtLl7CbAJ z(P2F%k&qNQemTQr$h8x60x{lUQcMJlSc-!;3CCvNw4k3tIk0Pu6>w*6_@u-6(bs_$ z31@C5&$&=O0){BGL&h2@3gkPFg}D8L$iO(kzTXg8AW>Vc9Z~>4`?17WkHgdfV768a zbWQT4E;dl{n3yehkCRvp!hkO92R>UIj&mLX&%8@{vVjazjt}hEv5zc~xN&ci!gDlT zcSKLhjl${Yl5>((vc)&09p?JdEKZ&JVV+b zVVDpEJ%U1_K{)-q9OS;8JjVBUC zua6?8X&G}Z?IXy9)K2aZ14$Thrle*@hS-cmhR9bEKm?4RE#0KiIP-wkLswVV-asPw z$j@`L)Yid|xTemarWV6Qp?*Q0&C3hyfaaqjopt}hq5UgWF>Hz8H6gpZ53*UXaD;b*5=B$ zS|2IBlz^$4Fgp(>WJ#yz8y*Tw*utUyELS`REANti`Q<`S#%0FGJX@QCPG- zWlb^m6SeoGU%#568}Ii}@p3OMN37XcrfoZKTFvlhfjqL*I;99E7L5=(YN|2BkHH?( zBTj;HsjGPHz0CNfch}*<2WbfdvjT4!n8|MIpV{klwLV&{2G87bOku2(Y7m6mLI@q6 zbCk*K#Z-96v(RQh%hh+n;8T`F*hg2&YXT#SQmOHQZQJTH>-icfCWWBErQmOPEd@cR zWR+en&Cn_38>stblQ@X+l(o6Ma(sW;2A{w;qd2A@ylD&MS&XPcCj4TPz_^c zd#lLS0zm|UWGyR^CB~(oadPRb?4nZ-KWev_-BQPjAw&>B66sJ*vU>2-n`74$&KidA z&QIu3|QZP~5$bikRj34??LDcdPp%nY2YDFWk)ILa1YG0~AAB&fv3*0l zp{|a9+R23sjMjuX$2C#M&z>Ctg~laGg3TMcKqG6Ktv}Y^w_^-y*v1u6Z=XILm84LD zFBi#L{A4Cf8SU@ec@k<^;#x$#efkWGCNjd84P`C<2CKd~ypc?{t_6sP*iTzqTgqq~ zSNka2vee&%jxA)!vDGH*t7Nh}M5OZ+Ai`u!NmPj$$&$cD-g@&uTv6yKUseTuBT^JIVCO#d6Rl>uWCx@A&1WLkX_Smhk00#A_{RV3t55v*WF|?Qn%RDb(?LIOwPa;xBoXqvh}f8 zY`ZGU)uvC2qh^ppVX#hy8;Qv)Bd`LvmrU+slCD}wx^?>w`_pMRmD7nt;;PyVdKOWf zvLXv%(bd1JX9xny!g_Fr;=FY`Vtlg*ag zPa^UO2mqLR6HV%EhLt4NR~;MJwPVaTQAm0rJ;cH~pMs*SyASV|-ibowFB22{Ku|FC zevq0yPifAwmT4u4{jJk`dUvS(ny;dUhlWx_B2(IRbLn}Qo1ZVapG3lkK~S31jE-9V zBiWH8$27-}zKdcM)wM9HtjL7s zgl+yxVMmez%IKcH*Dh$+i6E*7OenCwDuqNzHv|lOkp$xdy*uOj^&*HeY{GIDqS%pO z1OkK|N!TxivS4^n@4Ki_h-`y$AfyEZM3Us)`gOJ>;l4TL^_WRrvp^J%%z}p;J#nIy zQiwts5CJ2Km5Hz-9@nn3D+&9hSZwE%+3R^xIL85p&wr0|9Xz70uFf8R?teG{f*)=vafF+d9fX~>LL~+DgIi=s95P2#VduA2CQJErzH4@6G<2~{jr_XPyy0FZ_hYZX!#116sQ&*&rLNZEOTv5MtQ@R~x@1A^9A5V0TX(bSZB&WMOvqyZ7H`QA8}q zXWE-vAS}yZ2dZfSyueRMNWr(F5Ex?S3YsRP1mpObvyp{``B65WG;Q>zSaAr4!-MQt zXfLMV?8g%9oA_thfl%)%6MjoVisnpwGI<4ukE8na4`xz%S^1p_jI;5i%Y0duV2c83 zRohWz8=Ji6yEfU5ro|8UW>%62l8~ZrhOp`_mEnedy*{$k-;G6!B#|gzwy1X-f|53O zb~%%@NEBQ~6iG-?od!RQjW8GHBzcG72ssk|e~ipe8Hx zV_?!*S3?%|M_ujf%Z;QwI3wv|;z|UnjA)V&(|LWDCjNGW_1H(vUY~jLL~RB$xzf|S zv|t2bX4kaFW(sZx0@Di_h*fKTx`>jHk`pk^5(_Pl=jPza*H6{qbG@{BR$Q%P5wnJs zgq~s52Fb0Viz>+yRT5HC)W?%oqWW~*FYq5>F8#Ioh<#dpxW2I2tWcK7k`T)&&6g(s zdY*0O+l(I+gOf6iW+t_*ZHCUab;~QtlqI?(#Ih}tvSb)Mt^#mS5>9hAn?9C&JPXrb z-dUcp#473#F&7=ruR@vS$O?)i#8&T)bwEn#Dew>! zH1qU{t!>MZ6(mWB?KEsp-;P1{HMla`Ys7pe?QDAovVtZFag;B!LB=@y8e-tV#FA1? zo}76Ko38&EI&V%CthXa8h?0=9Ph`6^ab=JdWe-x9YHrx<8J&XDFn1qb{p43n)||RL z-`D}ydVdXR_L$#>rSEuBT>iLiDI5IWtFIgkq9ml^GY%8%zcm-4-RzyB?9H|iAULTq zlK%j*7=3iqeVk`Uic4b_7Y${t3v!Z7Q@;T0|4_{TfYd26C*|5CELx;o+64IKsB2T2kl%yiWL zzMhlniCdcf4~xH8AJp>YmOjJ%u}R!E`5UO8TW&6~&uVB|6L?98Q1gcIOVZ1FuA@_} z8FFUUe+xd}`eVcW^|D@m@kRLN3ojIG6GTafa1*@svapZY!iGb*EX?>iZ(cUtpUc|1 zp$T4j>7|0#f+`6Sawfi+tY;t#TbYEWnbK4GP}aJ0KZo4ITlsZn(~K389THsMBDkd zB2FZ6P}aR4jDgbJm0yPk(;@8{BLR>lyr`@DpfxN*f;ybpq$S5BC4YEamBlOap`|Ou z1Vxt6qN*W@gR<`LJq9=Cm&;RT6$}w&342;!H6cRren_G~r_zmdd!>>PtGVvw z;Ko65MG@tfq=iNnNn@$1UQ$8y$SPaZN|MA8Syox1R-z=1sInZ3TFH_)BFb_kYBfmW zh$hQ+)^~M3bgvdkh-lfMt%yQN^5TW%9p3;lh?2C35?Pj_R6UPuG#y@vUCz3F)I0mO9)7jB2n8fK&sT$m}`>Eu`5ea>|OAG z`2xta)$llK+lOjY70Ieevc`_AP>7gbo`FSDlt1V9)xu(c=`hE)KZH1FWYr|u$A+wf zYT}>+?+wWsI`w9sxGg`PB7{s?R?k_w9%qt9YLc8|kqxruj}EiPDQRILm6hel(rww* zZSh8EElq3H_c2V*jkxoZ_Bg>SC_7-aOX3*Gx_$qi>5X9!yy$WM4yr6F`}=yHw>84M z>D@fm+{HA%}DHG_CC+tuEo-a=4|dZ5cnNXwFFO5GP6&Y7?iStu06LX86Sk;TEX z5rTKFE4X8wDv8Eov7J-6=xC-a3Q#~9HhaA$$s8V8`nv{UW`{poN$h(ZmvUq~mxPox zukY?pTO*1hvFM_^*;_=|8)H^-YU8_)#-N5JOSj30vu}Uf@*TQKiiOQMt4y34=`owW5O)Hr6C@j;KuKM7vP4k{2|~?x zhtpl83xS_clOVu5X9Yqa;+h^A*~UIUj(qx?>_YakTCL6ynWzF#&^bN6fC)N>*Kr0T z$WIAD-VE0?SwZ%U;klAkWEp6KYn!Y_IVu%GuoKpqR8*Ks2rBpi<23cTun&(Q1)5r~ zQ6EQ~*&1fg0#pEx=tnS9nMNA2JDM>XpN~Jl3@G?5J!;S!Jd=?cC- zR~JB|<`I_3J#~lE*vm-)&8hSA*04erBkFX=@JPu@g2nR3K{T54T7CI?ccxA_zuNV%FDf1Da!gQ1a{)7~v z@~Qn)ln%d+7>*ni)_&>mslc$*+G<}i_?ESn+D{SuaJguJUvQ~VcRXZMj6U6Z&0r0Tk3A%5@-tkFKyux{a;=1Ogjd|{<*8A z&)?7ruz`4}4W4NQ$RG}?gJ)*#3eQA+@JuWL77;uXO8|7d6U#~PA(jB8t?3(V%Q%1% zVvYfe5TO;IfjFoaA+`XF{+2)vZZJNDqx=#R(K@h38Pti;b)ZHWG>K4mXMtZJgQhXz zU(6`KC8nVzkH>9+8KzB;C?W;#mmpyae#EpC7(O@gCPij7Ap)PA zq7%0`NKYml6+>c9uFJUzK3W-}~9rmIP_cV&)y z?Frgk+a-#ycjXDshPuNRb=(k{f_?PLcX-W(i41fPj18C!@r%#Lv$w@xt*8wj>2lej$1)6pk* i+vREAy*SCxP1%66h}}p)x@b_qV{~2A`2-rFyKZbXNP(;(uL2}-Brm(t zJ1K1vU$4(9IA~*`_{~R^%|rQ1}S9w!{V%>sml(cIE2FZ()i+| zTaYqRCyw1uPR$ztEBL=fUk7riOuqB|0;GskiGwT#)6{k7my`)affRwlxC=pGP~N#c zb`w%UYAnb0?NepOU=@N>Z?N{v%woL`3FpWy$L8i{aeI4vmi~nZL1DZP;ZV#ON*N-g zb3Sx9Vgie!Gq~l44i+)z0{($Dm*eb&Q8x@@acXL+0wJ*Z zK~c};mFtX5|MS>D@4m-04F=C&gu!z&frMe9ioxzivkCWx=PFeQfzG)ifgFnCaIlx$ z1cDdtO}uc)omj_bWnyAt5q#iF9OM$nr-5aFad7Y8;5wQ;7h%*;P}iIUCCb)E#ge8e zR}Id};9&CeXU@Vaug``l3S01mu5k|c2HUX4<|={QBwq1LC*1OG^CP#8!UUD*|yw@Db&})|utc6VQJJr#mtU(iQ z73L~6=o2S_V0>|HdV0F*bex0huj4tN6Fuj`;^=&swe(y?C0=tojv{6Xj4Yc23FAM1 zntH$W?pqk-J``151;K3LC@h8>oWTlf!kvCZVkZ#1=r%CWoO3%4$6y7=peKv;vN~Oa zQdt^gI2>o(avNZZGdh8hnR-9MAQ!T;JhrU#)AJ^Q?Tm#>$F=agumQ4DW`rBH?! z@3Px*9T!qHZxgW|p5nl=_`GFP&C6feS(=XOh3PcqRKRCb&cMVpD1{-21DMfV-$ys& zM<7_^sF6#zY%Y1tZQ;dw$9jy{WT&S%@Ryd%uWi0q4=(YEaL#WMhHnZNEoi>2>Qs@fL= z6H^dlN_$_FmqmBBizD#DoOe40X<0sp~g z7s^ny(bEuTDAoOOy<8IAAFaos*uyOg>9`g%MXX<)ciP`e9J=|1jq+a5nLjC+x8au; zuH)}6pFWiO`XPU29FhP|{j7?{9}ZcFW7|Y0+o_qi;RWwlE%g#dkJ+)C5;k!tLlLRM z5#&yc!zFfK#N4I41nVGAbG}*{?^#~EW+5ns&&;n;EV|Raj^ZFoVBLm+rDOks->jx* z-@NMQWE_HAiaI<3Nx_eM!I-WBy;(>xm&-Y(wKz`JtkJ()X|-CqWs_qn+Nsd>?C+J; zblLjobctI2App6tc*h!cXquSyAXk9{-eWy5Fm)6MzE?B9M$0kkxG#uPclp4QWm8o& z5LHzkxGOyO>RCu2B~j~vR=Q%@bk${F>o_`^+)!>!K=t+H%c$hfM2@3aL-c-CH?-lC zkVHhS2U>ZnyDy5&op|9W4x47*n$x~E@kSK{2pVe;6mP__@Fhq|By;IhpR49=szb-U zM^e#)qc|w|G))m7^m*FtXE!4#lBH}e7mGn-4MIy$AZo{+0z$LVHZ`b{-F`GSBI8Q9 zx)o~w!)SOEe`Z`Vl|xlj5Flr$zIz(%P!sA>x+p5li|l7pgL1sLraP_^6BDCu8K`H> zK_<&%(yT`uURBf=AI!x5XfKkK!rFp$50StWlLG4?>u&W9k%`d20V(>n9)(&{B|FHa zgb|1ye14$-Nk>t<&lOGOgC(QHdWQ}H2rLc^aEg}KHLqjTwpxOaNWA5M194mx+0Q14 zn1uj@k;>}k7eeA-?o-90Bsfd4B9ygI!?F1_T5(^EQdYtcN6#0)FZ9^+2*v{`x{ErP ze3#N?PxW>!D2^X2ua8a~cJnV70e|gw%s~nZEEI7lDTp_^FeW4p;dv7gq%Yp0wX{%# zK`4W%aVx+CmVF3&m4ZOx@H090@)L~`ghbT$y&fl6z~HhU!nPa&xibrG;gb{vq|~Wi z zGzzPu0?ouMH1n7yw?Z)P-bOh&Il0!EH#wMyYcv|d4Oh0G2NKy`rglJe6GEc+t6!(h zwcHuHQW2Vn3j?XyN~@*m5F%+3#sR$l2JC*2Dh|$q6=l*6Q=(bL&d6$6Gw(4nK&{WktUAkUFR8bLYg=Rvq`tuk-3$ap)g41#9KzZ$i$K1NG6U9 zM>26_I1*cNFf9)m(Gp{Eq_a&>CYf8wa3m8)h9j9cG8~a6j&?IEpT`Yp;^0in#1R4< zU=$>gxs{l~7)V=NGZROKBNE+8cF#%}B=Xh-oN5mBk4ocR_5@=I6o)!g&>=*Or+bh_ zWG=%XO&qPga0kvw{e#G@v>ty4Y2?X%TS~1% zUbYg!t&q=lwjq_Ma#k~zB96{&2|9#KV`nRs)&n!Y!{nuBJ1}L2seOh%8BJZ_3 zc-S8g=V5T7?LSTpS0_kCnK>I$4nh{a~<~ zaBkqw5=2PkZUu{9fgeepVM}rAqhbjnBvNsF`^gxoTZfEDP*im_%GC=Z6UXicMZFDd z2{NKYA277YEOR8{*#59MYYeFOAzOAKaya8RcbCT^5lE<^;^tDZI5?u*FnDG$j)0oc zZZAx~TdzV$^d%0m44|sB9G*WSgMl)lFg_dB^XctShfjirKXe;pcDI`|ET6AwL$7Qo zqh}r*yauSZ4cIsVu)*dkz8)B1o$Wky(y$cdE53&@)Z~P*)?SK)pRJc;{d^n(|I39j{>bk1HDo6}2Nf;;Jd@HjS zQG!;aaJjPJzKaW#j$+oa4l-NQ1`9Cq%d43%B)}Q03|+1)I=%0j${s~Jnpq5aFb+4} zCh#1^v3>hg86;OXX|gPfG30_VzhjNWQ5*_`d5}zgVj41}Q*yE%j^c>2X5mC`>=b0k z2NMq4W-MEA&|}3xGUQIOSmS8GnRDBR8QY2@?8k~{#1mU_Xj-cV8L7us9M7;G50aq{ zF5YTFhI|YTU)ycB701kCz0M-;Pqd@`;}4J_AH%R8YsYNG;QSs)Cbf649VHxU!*i9Y z-CK_0XevepkF0@2s3|zDch4UojuUW>;vm;zv=!HhnJ9Sj#Rg)gup zyWdp}&OE1f!=(B6dwBBImyi)L=uV&o{m;sF*}gq?^Z6|X@*X!naP9&OUA&YP#-gD* z*n+pcI>UrJ!KiB5=IRn2AZ^Zts-}etmtY{9a|s8s78ql=xe_zJdq_zn&9*wr6eua2 zOIZ_B8!1Bm^jXMHodYF5_+oo|??=5=ub1GM!c?`M|JlSE95I~3101i7!WH|h#0iNv zDuxfW6`;FYg<}ifnEb<|IfyB-UZj>AtOmyz4orHbIZR?Lj^jQDgl0L`CEr+!V|=k* z!|U_dUY(rtD#V!BuYJyd9owoIH;hg$C(c&PU_k55*nC`VNb)6M1 zz6K(o#kf;w!IIxa*y2Ru#X-<2znY=lRG2aEB@%(w#41p$-IZjdt8S!19A*v{rC~77 zJeHUskOM@u7q)r@N4y*}1K}s=77?q#rjOpF?80R&Eu^%u4 k*=RP})tUFGZzO&EA05f5W;v@&SO5S307*qoM6N<$f`}P&-T(jq literal 0 HcmV?d00001 diff --git a/assets/images/3.0x/ic_board.png b/assets/images/3.0x/ic_board.png new file mode 100755 index 0000000000000000000000000000000000000000..2e83477471e84b83c07686f3f878d517d301c7f4 GIT binary patch literal 817 zcmV-11J3-3P)(*1K~#7F?VP<% z+&~b=Cs7h5;f^9rJ}$WwX(9?F1VW&_DqcNPHDg z@X^qK=fKEby!&5c8?ATeCz+FchFgBj?AUn6M1qlb{N;Xo=$^{r^8nG8fz+Wpy-GHoPmcq zE2-f4%So|Mzo^z2#*ZWDW|QbNV}BEbt}7HAzlET!$L$3(H4#*7{8GgLID(jOlP~j> zL$nU)s+i^Yu^^W7caCa{Z57jiQ_QA9@wtSj*riwuSA=V2!gKvZvGOXGgyozqQLT_F zRxSA=s5kRxOn4l|nSUh*sJx1$K5QiW!#KyC6;yQ<^SDAiWB46$1jQA~RPH&&Tt!#K zVhaDegK@cxBeYe_4yj@Q5d;uHfZlzvuZzp2-4}c7`&LYq_uV9d03rw=f&lq0HEPQA z|9{l(@6*1ð2BvhZFI%UPNjGafU)v7;5_eTtbP$A%zMEQX_GEhAEN(Zd8Kh~+Fq z>68blVt}9`sMGpRG&-2tcXWMA-Q5H2_XH(qJQBoP7CK4Zr`XZe4LqjZ)K@z1BdEJ~ z*n4gFH&XjMhGM2f|dQbco+jUcIF0PiD6H!*iCqK64W(5zD0^B^fkd@iJ~blyi0 zUuVr5E-zS4clS{Heh`987o!MCF@OjHh#-LUi>XMzSUyA$Km-Bu3*v?4yahtO6GdL@ z_am|1ug(jrEU}LuRZiV|#4NEBq{;~hEGS?(j9Cyb!cNKwVM(xpSrD%dJ$>rU;MWWP zCuJ2}#khGTZZ!xn)$Ar|SKAEU06CKeh#-In0_1ykN3zE%**oTPzgR(D|Ll%r@0iQ| vVg->D1HAs(9qKWjQsCJgVIV065J7+kEiA~u`E|Zi00000NkvXXu0mjf>V<0@ literal 0 HcmV?d00001 diff --git a/assets/images/3.0x/ic_help_ pink.png b/assets/images/3.0x/ic_help_ pink.png new file mode 100755 index 0000000000000000000000000000000000000000..126b645e8a9da087c1c6978b00a35f4b9c80a579 GIT binary patch literal 13110 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 QjsO4v07*qoM6N<$g3z(&ZU6uP literal 0 HcmV?d00001 diff --git a/assets/images/3.0x/ic_help_orange.png b/assets/images/3.0x/ic_help_orange.png new file mode 100755 index 0000000000000000000000000000000000000000..c3a0e0df22d54ac2757bd08c3d26f1d8561c3aa9 GIT binary patch literal 13113 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 TZ2c8+00000NkvXXu0mjf$CdU3 literal 0 HcmV?d00001 diff --git a/assets/images/3.0x/ic_setting_large.png b/assets/images/3.0x/ic_setting_large.png new file mode 100755 index 0000000000000000000000000000000000000000..88601bdc58f5b41b407acdda8aea649cca46caba GIT binary patch literal 4735 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 N002ovPDHLkV1grB^>P3J literal 0 HcmV?d00001 diff --git a/assets/images/ic_back.png b/assets/images/ic_back.png new file mode 100755 index 0000000000000000000000000000000000000000..f230831ff811bb5304c73afd1739f56ccdb8e91c GIT binary patch literal 365 zcmV-z0h0cSP)pMqmWofDzaPoCG(~5!j$3$OfMY1?9N@gyOr4dXjq$EeVDq04VvZUZY(9 zo;fCC%!|$wSsceG+_=0-=RHd3 zx5URlG2q6hJt34WY)J#$7=0ub5TV?mw;PROk%l}kQ*tlVV8eU>iUwKT<_40G00000 LNkvXXu0mjf9CVVI literal 0 HcmV?d00001 diff --git a/assets/images/ic_bell.png b/assets/images/ic_bell.png new file mode 100755 index 0000000000000000000000000000000000000000..54f8b9a18030f4142757ddc21ad8badef269a27f GIT binary patch literal 1422 zcmV;91#$X`P)aH zS~>Mnz-o{N?V%7+|F%tSwRQX>k=)KmBC}>lQ?eMxhkO9B=lRV2y+w!#Qjlni%dXx-3)>RXnDgTV`1TU+bsED9^IZCjTlY02Li z0`vC{D_8KE8y+4mxSgN|k@WP)$VgGt-*}+v*uhy2pi8|eNZ*YM%8$ayhLPOnflom zAf@`CZ7?vQ4wI>gqUj^PE;u>ux39F}QUh7FLHi+;jRkGv)l z?#X03BTV3+fdZA<(`j!W;7FEcya?yV3#!Wac9L^UHo*Fs#8SOP3ge31#IW#n6Vo^eVp9hg1$D-`LXn7fj#Pkd# z-?lXk|+I@)j@4Ax`=hIKfPY)ukqOwW%tx(ZWdD(rx@!(w@ zejT?0eq=!s#tk1cPjxPs{|ZdFm;BaN~Ah_2RSW4PQ?+N&B~J^nl6(^rTb@;)EnDr~Wwh z=|zM4*5=m*-aLaxqAk+cTw9IB0sic((I}lZNwYxGQt$b9!fwze>C1(;q~pNBi9Hsj z^VZWBg-Fu-D|a-wWQZhvZ2kh54UwendiXBIEeqlXlcRUvNYb1sp`>en?IQ6y#0iN< zZ{^VwG2~cEaE=b)#jihub9@MKK|G#@>O?7Q%@0%{;=sfb2~g7UoUOTSRS*B$8ym}4 zJ3CLiXl6j8V~p49P~ZO>VuISkl}1)6OyQKLDJPfcmnkQw$(Uyl6EY$w1(tko2tT#X z>~mL8(&>^sIQ$q1R+$5l+rFNQmT;A!?KO1bvuAF-~< z9f5=CCUQK|b!OkgAy_`M9`1hs{`kY2AYK9+Cf$cuHkX|RRkJKbg9xNQy#unWsK>uO zTY(NC55Ax88~w1{ma+w=xZDxC{=2m`e{DbP!#50^*%KrAYI~#u(Dlq>z{>uWhnB^# zmBz7c^XlaH=O#?(nzU`RIZ1A&WC=;kSJMU*3JzWW2<`fFEBp2HlEaxtgw7yg6BS2f z)&E!PJc#8RF?;`c!6hEH!Z`FB&Vp%(0kQsOrj^I$asjE2W2~#a*EQ(7dAo#GmQ%Nj cC5Q?C1Ii2pByI~{)c^nh07*qoM6N<$f~*9eC;$Ke literal 0 HcmV?d00001 diff --git a/assets/images/ic_board.png b/assets/images/ic_board.png new file mode 100755 index 0000000000000000000000000000000000000000..d5f99d6e19a7d81c020e00b408845a8d972e5c1e GIT binary patch literal 778 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 literal 0 HcmV?d00001 diff --git a/assets/images/ic_help_orange.png b/assets/images/ic_help_orange.png new file mode 100755 index 0000000000000000000000000000000000000000..2410e73ca98868aab382d35f84d1895073cf3c45 GIT binary patch literal 4191 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 literal 0 HcmV?d00001 diff --git a/assets/images/ic_setting_large.png b/assets/images/ic_setting_large.png new file mode 100755 index 0000000000000000000000000000000000000000..2a2a6821288e1c120d5aabc28b956da67b376e20 GIT binary patch literal 1793 zcmV+c2mbhpP)rlL6*CZ9X&h% zn@mEXA3PTbL}i&@TwYm$e`lvbPRU+iLjTCk@&0R}aW7OzbCHODKDOASKUc7&RGlBZ z6chy3g%$(FV#2fEh4J2%Ro3@XdrKHLNC?x#xg1=(KO3lb*9DX&n2<3TY=}!vMIxSB zCJq5`zj|(FW)2?B%?%to(h@KQMKS~f#ixVqtu5V92F*qyK9LDS9KfrdQ-EgY)(#j9 z6g;Lf^}(r=K^$X!+8C2%tq)tl;juA4SgiS2{H(x)2}2;dH<$05h9V`CD?#8qN?;3% zv9vxBq%N>f7!ZP-r+W40GJ((?zw2l{94rZnA|eymB(-Bp@w7htHT@$$-)RDiq_++! z3y4ElNV0R(ED1`l)nqcw1(o}xmYbmr%C-=Kq@cb1S>#oqD6xV`ahdznb}9o(25$Pg zdQC?nUJMRx)XoJYGk&gJmr8^yL)W}iDSUb5O3`EB{NSJ;^Mm%_Rgwf&i-2rQ2$B2c z0^-2?I*uGl8*9S$diPMhdy5w%S+H0zQ53b$+pBC~wTyr;58a?Y3JhYhI+*!AiOcM2 zz1yR>(BoKyz~H?TC)Uj|pI^FkmUHl{$4-YM>obhWVK6Bppp*cCJlOU!T~JWvz_GMzM|zp0D#hi%@gnL#D}d6VLO6Yp zC74o=RWKuAxdL13+-Rk`oIqx$NbS8g$)8)yRS~eKaFFN3Yy!+;&H4L7J?iqbOHncYw!LYY0;;n3X_l_tYsA3VCG7j@DwPlP3KD5v&8L!f?A>;C9yL1+yB6 zlr{Aj8NJQec^0SbM+&*FOXo0wt?z;BM>3u;gx1T(Rl- zov>%O7i_jFC|E(Sz;+ws>N!DKlM5O z_&%#&sBwcF7=&4AyY2xBPtb+RQYg~zuR%X&aK@;g+g`DFvwU>xDC! zm4}f^0V~-32&hT|s;qsv`U?S4k8{q3qk>skzVWpHQj215AioGvd}4A&mJ z^|fDCXsjdCb j7vN_6MJeg%r9AaNJYcf9dj[ @@ -20,26 +24,45 @@ class TopContainer extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ Container( - margin: EdgeInsets.only(top: 30.0), - child: Icon(Icons.backspace)), + margin: EdgeInsets.only(top: 30.0), + child: Image.asset('assets/images/ic_back.png'), + ), Text( text, style: TextStyle( fontFamily: 'Staatliches', - fontSize: 25.0, + fontSize: 30.0, color: Colors.white, + fontWeight: FontWeight.w200, decoration: TextDecoration.none), ), ], ), - Icon( - icon, - size: 150.0, - color: Colors.pink[500], - ) + Container( + height: 100.0, + padding: EdgeInsets.all(10.0), + decoration: new BoxDecoration( + gradient: LinearGradient( + colors: [Color(0xFFFE23A7), Color(0xFFE2297E)], + ), + boxShadow: [ + BoxShadow( + color: Color(0xFFFE23A7), + blurRadius: 1.5, + ), + ], + shape: BoxShape.circle, + ), + child: Image.asset( + 'assets/images/ic_help.png', + width: 70.0, + height: 70.0, + fit: BoxFit.fitWidth, + ), + ), ], ), ), ); } -} \ No newline at end of file +} diff --git a/lib/main.dart b/lib/main.dart index 4503af307..290043cf5 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -8,6 +8,8 @@ import 'package:sudoku_brain/screens/home/bloc.dart'; import 'package:sudoku_brain/screens/home/home_screen.dart'; import 'package:sudoku_brain/screens/level/bloc.dart'; import 'package:sudoku_brain/screens/level/level_screen.dart'; +import 'package:sudoku_brain/screens/tutorial/bloc.dart'; +import 'package:sudoku_brain/screens/tutorial/tutorial_screen.dart'; import 'package:sudoku_brain/utils/Constants.dart'; void main() => runApp(MyApp()); @@ -22,7 +24,7 @@ class MyApp extends StatelessWidget { primaryColor: kPrimaryColor, scaffoldBackgroundColor: kPrimaryColor, ), - initialRoute: HomeScreen.id, + initialRoute: TutorialScreen.id, routes: { HomeScreen.id: (context) => BlocProvider( create: (BuildContext context) => HomeBloc(), @@ -35,10 +37,15 @@ class MyApp extends StatelessWidget { LevelScreen.id: (context) => BlocProvider( create: (BuildContext context) => LevelBloc(), child: LevelScreen(), - ), HelpScreen.id: (context) => BlocProvider( + ), + HelpScreen.id: (context) => BlocProvider( create: (BuildContext context) => HelpBloc(), child: HelpScreen(), ), + TutorialScreen.id: (context) => BlocProvider( + create: (BuildContext context) => TutorialBloc(), + child: TutorialScreen(), + ), }, ); } diff --git a/lib/screens/help/help_screen.dart b/lib/screens/help/help_screen.dart index 773285fcd..c784724b3 100644 --- a/lib/screens/help/help_screen.dart +++ b/lib/screens/help/help_screen.dart @@ -5,6 +5,7 @@ import 'package:sudoku_brain/utils/Constants.dart'; class HelpScreen extends StatelessWidget { static final String id = 'help_screen'; + final double sizedBoxHeight = 30.0; @override Widget build(BuildContext context) { @@ -13,14 +14,13 @@ class HelpScreen extends StatelessWidget { children: [ TopContainer( text: 'HELP', - icon: Icons.account_circle, + color: kPrimaryColor, ), Expanded( flex: 2, child: Container( color: kPrimaryColor, child: Column( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ RaisedGradientButton( text: 'TUTORIAL', @@ -30,6 +30,9 @@ class HelpScreen extends StatelessWidget { onPressed: () { print('button clicked'); }), + SizedBox( + height: sizedBoxHeight, + ), RaisedGradientButton( text: 'CONTACT US', gradient: LinearGradient( @@ -38,6 +41,9 @@ class HelpScreen extends StatelessWidget { onPressed: () { print('button clicked'); }), + SizedBox( + height: sizedBoxHeight, + ), RaisedGradientButton( text: 'TERMS OF USE', gradient: LinearGradient( @@ -55,5 +61,3 @@ class HelpScreen extends StatelessWidget { ); } } - - diff --git a/lib/screens/home/home_screen.dart b/lib/screens/home/home_screen.dart index 0d07d829d..fd0ade0d0 100644 --- a/lib/screens/home/home_screen.dart +++ b/lib/screens/home/home_screen.dart @@ -4,6 +4,8 @@ import 'package:sudoku_brain/utils/Constants.dart'; class HomeScreen extends StatelessWidget { static final String id = 'home_screen'; + final double sizedBoxHeight = 25.0; + final double sizedBoxTop = 10.0; @override Widget build(BuildContext context) { @@ -11,47 +13,101 @@ class HomeScreen extends StatelessWidget { child: Container( color: kPrimaryColor, child: Column( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - Image( - image: AssetImage('assets/images/header.png'), + Expanded( + flex: 2, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image( + image: AssetImage('assets/images/ic_logo.png'), + ), + SizedBox( + height: sizedBoxTop, + ), + Image( + image: AssetImage('assets/images/header.png'), + ), + SizedBox( + height: 7.0, + ), + Image( + image: AssetImage('assets/images/subheader.png'), + ), + ], + ), + ), + Expanded( + flex: 5, + child: Column( + children: [ + Visibility( + visible: true, + child: RaisedGradientButton( + text: 'CONTINUE', + icon: 'assets/images/ic_board.png', + gradient: LinearGradient( + colors: [Color(0xFF1E9FFE), Color(0xFF4F5FFE)], + ), + circleGradient: LinearGradient( + colors: [Color(0xFF8497FF), Color(0xFFBDDAFF)], + ), + shadowColor: Color(0xFF8497FF), + onPressed: () { + print('button clicked'); + }), + ), + SizedBox( + height: sizedBoxHeight, + ), + RaisedGradientButton( + text: 'NEW GAME', + icon: 'assets/images/pencil.png', + gradient: LinearGradient( + colors: [Color(0xFFA193FF), Color(0xFF6442FD)], + ), + circleGradient: LinearGradient( + colors: [Color(0xFFB9ACFF), Color(0xFF6B4CFD)], + ), + shadowColor: Color(0xFFB9ACFF), + onPressed: () { + print('button clicked'); + }), + SizedBox( + height: sizedBoxHeight, + ), + RaisedGradientButton( + text: 'SETTINGS', + icon: 'assets/images/ic_setting.png', + gradient: LinearGradient( + colors: [Color(0xFF91E786), Color(0xFF0AB8AD)], + ), + circleGradient: LinearGradient( + colors: [Color(0xFF8DFDC4), Color(0xFF32C6A2)], + ), + shadowColor: Color(0xFF8DFDC4), + onPressed: () { + print('button clicked'); + }), + SizedBox( + height: sizedBoxHeight, + ), + RaisedGradientButton( + text: 'HELP', + icon: 'assets/images/ic_help.png', + gradient: LinearGradient( + colors: [Color(0xFFFE23A7), Color(0xFFE2297E)], + ), + circleGradient: LinearGradient( + colors: [Color(0xFFFFC7E7), Color(0xFFFF3AA0)], + ), + shadowColor: Color(0xFFFFC7E7), + onPressed: () { + print('button clicked'); + }), + ], + ), ), - RaisedGradientButton( - text: 'CONTINUE', - icon: 'assets/images/pencil.png', - gradient: LinearGradient( - colors: [Color(0xFF1E9FFE), Color(0xFF4F5FFE)], - ), - onPressed: () { - print('button clicked'); - }), - RaisedGradientButton( - text: 'NEW GAME', - icon: 'assets/images/pencil.png', - gradient: LinearGradient( - colors: [Color(0xFFA193FF), Color(0xFF6442FD)], - ), - onPressed: () { - print('button clicked'); - }), - RaisedGradientButton( - text: 'SETTINGS', - icon: 'assets/images/ic_setting.png', - gradient: LinearGradient( - colors: [Color(0xFF91E786), Color(0xFF0AB8AD)], - ), - onPressed: () { - print('button clicked'); - }), - RaisedGradientButton( - text: 'HELP', - icon: 'assets/images/ic_help.png', - gradient: LinearGradient( - colors: [Color(0xFFFE23A7), Color(0xFFE2297E)], - ), - onPressed: () { - print('button clicked'); - }), ], ), ), diff --git a/lib/screens/level/level_screen.dart b/lib/screens/level/level_screen.dart index ddbd84357..67bf2f29c 100644 --- a/lib/screens/level/level_screen.dart +++ b/lib/screens/level/level_screen.dart @@ -4,52 +4,96 @@ import 'package:sudoku_brain/utils/Constants.dart'; class LevelScreen extends StatelessWidget { static final String id = 'level_screen'; + final double sizedBoxHeight = 25.0; @override Widget build(BuildContext context) { return SafeArea( child: Container( color: kPrimaryColor, + child: Column( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - Image( - image: AssetImage('assets/images/ic_logo.png'), + Expanded( + flex: 2, + child: Row( + children: [ + Spacer(), + Image( + image: AssetImage('assets/images/ic_back.png'), + ), + Spacer(), + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image( + image: AssetImage('assets/images/header.png'), + ), + SizedBox( + height: 7.0, + ), + Image( + image: AssetImage('assets/images/subheader.png'), + ), + ], + ), + Spacer(), + Spacer(), + ], + ), + ), + Expanded( + flex: 5, + child: Column( + children: [ + RaisedGradientButton( + text: 'EASY', + gradient: LinearGradient( + colors: [Color(0xFF91E786), Color(0xFF0AB8AD)], + ), + onPressed: () { + print('button clicked'); + }), + SizedBox( + height: sizedBoxHeight, + ), + RaisedGradientButton( + text: 'MEDIUM', + gradient: LinearGradient( + colors: [Color(0xFF1E9FFE), Color(0xFF4F5FFE)], + ), + onPressed: () { + print('button clicked'); + }), + SizedBox( + height: sizedBoxHeight, + ), + RaisedGradientButton( + text: 'HARD', + gradient: LinearGradient( + colors: [Color(0xFFA193FF), Color(0xFF6442FD)], + ), + onPressed: () { + print('button clicked'); + }), + SizedBox( + height: sizedBoxHeight, + ), + RaisedGradientButton( + text: 'EXPERT', + gradient: LinearGradient( + colors: [Color(0xFFFE23A7), Color(0xFFE2297E)], + ), + onPressed: () { + print('button clicked'); + }), + ], + ), ), - RaisedGradientButton( - text: 'EASY', - gradient: LinearGradient( - colors: [Color(0xFF91E786), Color(0xFF0AB8AD)], - ), - onPressed: () { - print('button clicked'); - }), - RaisedGradientButton( - text: 'MEDIUM', - gradient: LinearGradient( - colors: [Color(0xFF1E9FFE), Color(0xFF4F5FFE)], - ), - onPressed: () { - print('button clicked'); - }), - RaisedGradientButton( - text: 'HARD', - gradient: LinearGradient( - colors: [Color(0xFFA193FF), Color(0xFF6442FD)], - ), - onPressed: () { - print('button clicked'); - }), - RaisedGradientButton( - text: 'EXPERT', - gradient: LinearGradient( - colors: [Color(0xFFFE23A7), Color(0xFFE2297E)], - ), - onPressed: () { - print('button clicked'); - }), ], ), + +// ), ); } diff --git a/lib/screens/tutorial/bloc.dart b/lib/screens/tutorial/bloc.dart new file mode 100644 index 000000000..ce295d932 --- /dev/null +++ b/lib/screens/tutorial/bloc.dart @@ -0,0 +1,3 @@ +export 'tutorial_bloc.dart'; +export 'tutorial_event.dart'; +export 'tutorial_state.dart'; \ No newline at end of file diff --git a/lib/screens/tutorial/tutorial_bloc.dart b/lib/screens/tutorial/tutorial_bloc.dart new file mode 100644 index 000000000..2a478561b --- /dev/null +++ b/lib/screens/tutorial/tutorial_bloc.dart @@ -0,0 +1,15 @@ +import 'dart:async'; +import 'package:bloc/bloc.dart'; +import './bloc.dart'; + +class TutorialBloc extends Bloc { + @override + TutorialState get initialState => InitialTutorialState(); + + @override + Stream mapEventToState( + TutorialEvent event, + ) async* { + // TODO: Add Logic + } +} diff --git a/lib/screens/tutorial/tutorial_event.dart b/lib/screens/tutorial/tutorial_event.dart new file mode 100644 index 000000000..ea6518c35 --- /dev/null +++ b/lib/screens/tutorial/tutorial_event.dart @@ -0,0 +1,4 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class TutorialEvent {} diff --git a/lib/screens/tutorial/tutorial_screen.dart b/lib/screens/tutorial/tutorial_screen.dart new file mode 100644 index 000000000..41e05946b --- /dev/null +++ b/lib/screens/tutorial/tutorial_screen.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/components/top_container.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; + +class TutorialScreen extends StatelessWidget { + static final String id = 'tutorial_screen'; + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Column( + children: [ + TopContainer( + text: 'HELP', + color: Color(0xFFE2297E), + ), + Expanded( + flex: 2, + child: Container( + color: kPrimaryColor, + ), + ), + ], + ), + ); + } +} diff --git a/lib/screens/tutorial/tutorial_state.dart b/lib/screens/tutorial/tutorial_state.dart new file mode 100644 index 000000000..74f7cfa31 --- /dev/null +++ b/lib/screens/tutorial/tutorial_state.dart @@ -0,0 +1,6 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class TutorialState {} + +class InitialTutorialState extends TutorialState {} From 2102c930e5c561628a35222859f4e0a1c1b58211 Mon Sep 17 00:00:00 2001 From: zahidch052 Date: Fri, 14 Feb 2020 21:39:16 +0500 Subject: [PATCH 22/57] UI --- assets/fonts/Rubik-Regular.ttf | Bin 0 -> 133376 bytes lib/components/gradient_line.dart | 19 ++++ lib/components/header_text.dart | 21 ++++ lib/components/top_container.dart | 28 ++++-- lib/main.dart | 8 +- lib/screens/settings/bloc.dart | 3 + lib/screens/settings/settings_bloc.dart | 15 +++ lib/screens/settings/settings_event.dart | 4 + lib/screens/settings/settings_screen.dart | 104 +++++++++++++++++++ lib/screens/settings/settings_state.dart | 6 ++ lib/screens/tutorial/tutorial_screen.dart | 116 +++++++++++++++++++++- lib/utils/Strings.dart | 21 ++++ pubspec.lock | 7 ++ pubspec.yaml | 5 + 14 files changed, 345 insertions(+), 12 deletions(-) create mode 100644 assets/fonts/Rubik-Regular.ttf create mode 100644 lib/components/gradient_line.dart create mode 100644 lib/components/header_text.dart create mode 100644 lib/screens/settings/bloc.dart create mode 100644 lib/screens/settings/settings_bloc.dart create mode 100644 lib/screens/settings/settings_event.dart create mode 100644 lib/screens/settings/settings_screen.dart create mode 100644 lib/screens/settings/settings_state.dart create mode 100644 lib/utils/Strings.dart diff --git a/assets/fonts/Rubik-Regular.ttf b/assets/fonts/Rubik-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..52b59ca4fdb343c1e840b9a8c85058c0a6703ab1 GIT binary patch literal 133376 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≫N8KIV+$(_c_Nka^lh>^^NH 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à_HBGFfZXsPVt|*= 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 literal 0 HcmV?d00001 diff --git a/lib/components/gradient_line.dart b/lib/components/gradient_line.dart new file mode 100644 index 000000000..aac944bad --- /dev/null +++ b/lib/components/gradient_line.dart @@ -0,0 +1,19 @@ +import 'package:flutter/material.dart'; + +class GradientLine extends StatelessWidget { + final Gradient gradient; + + GradientLine({this.gradient}); + + @override + Widget build(BuildContext context) { + return Container( + width: MediaQuery.of(context).size.width, + height: 3.0, + margin: EdgeInsets.only(top: 10.0, bottom: 10.0), + decoration: new BoxDecoration( + gradient: gradient, + ), + ); + } +} diff --git a/lib/components/header_text.dart b/lib/components/header_text.dart new file mode 100644 index 000000000..3c6d67944 --- /dev/null +++ b/lib/components/header_text.dart @@ -0,0 +1,21 @@ +import 'package:flutter/material.dart'; + +class HeaderText extends StatelessWidget { + final String text; + + HeaderText({this.text}); + + @override + Widget build(BuildContext context) { + return Text( + text.toUpperCase(), + textAlign: TextAlign.left, + style: TextStyle( + fontFamily: 'Staatliches', + fontSize: 20.0, + color: Colors.white, + fontWeight: FontWeight.w200, + decoration: TextDecoration.none), + ); + } +} diff --git a/lib/components/top_container.dart b/lib/components/top_container.dart index fe8b0f02f..1eb8f6555 100644 --- a/lib/components/top_container.dart +++ b/lib/components/top_container.dart @@ -2,21 +2,30 @@ import 'package:flutter/material.dart'; class TopContainer extends StatelessWidget { final String text; + final String imagePath; final Color color; final Gradient gradient; final Gradient circleGradient; final double width; final double height; - TopContainer({this.text, this.color}); + TopContainer( + {this.text, + this.imagePath, + this.color, + this.width, + this.height, + this.gradient, + this.circleGradient}); @override Widget build(BuildContext context) { return Expanded( flex: 1, child: Container( - color: color, - + decoration: new BoxDecoration( + gradient: gradient, + ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ @@ -39,22 +48,21 @@ class TopContainer extends StatelessWidget { ], ), Container( - height: 100.0, - padding: EdgeInsets.all(10.0), + height: 500.0, + width: 130.0, + padding: EdgeInsets.all(30.0), decoration: new BoxDecoration( - gradient: LinearGradient( - colors: [Color(0xFFFE23A7), Color(0xFFE2297E)], - ), + gradient: circleGradient, boxShadow: [ BoxShadow( - color: Color(0xFFFE23A7), + color: color, blurRadius: 1.5, ), ], shape: BoxShape.circle, ), child: Image.asset( - 'assets/images/ic_help.png', + imagePath, width: 70.0, height: 70.0, fit: BoxFit.fitWidth, diff --git a/lib/main.dart b/lib/main.dart index 290043cf5..41bee5f18 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -8,6 +8,8 @@ import 'package:sudoku_brain/screens/home/bloc.dart'; import 'package:sudoku_brain/screens/home/home_screen.dart'; import 'package:sudoku_brain/screens/level/bloc.dart'; import 'package:sudoku_brain/screens/level/level_screen.dart'; +import 'package:sudoku_brain/screens/settings/bloc.dart'; +import 'package:sudoku_brain/screens/settings/settings_screen.dart'; import 'package:sudoku_brain/screens/tutorial/bloc.dart'; import 'package:sudoku_brain/screens/tutorial/tutorial_screen.dart'; import 'package:sudoku_brain/utils/Constants.dart'; @@ -24,7 +26,7 @@ class MyApp extends StatelessWidget { primaryColor: kPrimaryColor, scaffoldBackgroundColor: kPrimaryColor, ), - initialRoute: TutorialScreen.id, + initialRoute: SettingsScreen.id, routes: { HomeScreen.id: (context) => BlocProvider( create: (BuildContext context) => HomeBloc(), @@ -46,6 +48,10 @@ class MyApp extends StatelessWidget { create: (BuildContext context) => TutorialBloc(), child: TutorialScreen(), ), + SettingsScreen.id: (context) => BlocProvider( + create: (BuildContext context) => SettingsBloc(), + child: SettingsScreen(), + ), }, ); } diff --git a/lib/screens/settings/bloc.dart b/lib/screens/settings/bloc.dart new file mode 100644 index 000000000..b2dd32d24 --- /dev/null +++ b/lib/screens/settings/bloc.dart @@ -0,0 +1,3 @@ +export 'settings_bloc.dart'; +export 'settings_event.dart'; +export 'settings_state.dart'; \ No newline at end of file diff --git a/lib/screens/settings/settings_bloc.dart b/lib/screens/settings/settings_bloc.dart new file mode 100644 index 000000000..c126628ff --- /dev/null +++ b/lib/screens/settings/settings_bloc.dart @@ -0,0 +1,15 @@ +import 'dart:async'; +import 'package:bloc/bloc.dart'; +import './bloc.dart'; + +class SettingsBloc extends Bloc { + @override + SettingsState get initialState => InitialSettingsState(); + + @override + Stream mapEventToState( + SettingsEvent event, + ) async* { + // TODO: Add Logic + } +} diff --git a/lib/screens/settings/settings_event.dart b/lib/screens/settings/settings_event.dart new file mode 100644 index 000000000..080966113 --- /dev/null +++ b/lib/screens/settings/settings_event.dart @@ -0,0 +1,4 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class SettingsEvent {} diff --git a/lib/screens/settings/settings_screen.dart b/lib/screens/settings/settings_screen.dart new file mode 100644 index 000000000..dce622615 --- /dev/null +++ b/lib/screens/settings/settings_screen.dart @@ -0,0 +1,104 @@ +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/components/gradient_line.dart'; +import 'package:sudoku_brain/components/header_text.dart'; +import 'package:sudoku_brain/components/top_container.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; +import 'package:xlive_switch/xlive_switch.dart'; + +class SettingsScreen extends StatelessWidget { + static final String id = 'settings_screen'; + + final double spaceBTText = 15.0; + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Column( + children: [ + TopContainer( + text: 'SETTINGS', + imagePath: 'assets/images/ic_setting_large.png', + gradient: LinearGradient( + colors: [Color(0xFF91E786), Color(0xFF0AB8AD)], + ), + circleGradient: LinearGradient( + colors: [Color(0xFF8DFDC4), Color(0xFF32C6A2)], + ), + color: Color(0xFF8DFDC4), + ), + Expanded( + flex: 2, + child: Container( + padding: EdgeInsets.fromLTRB(25.0, 0.0, 25.0, 0.0), + width: MediaQuery.of(context).size.width, + color: kPrimaryColor, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: spaceBTText, + ), + HeaderText( + text: 'Sounds & Haptics', + ), + GradientLine( + gradient: LinearGradient( + colors: [Color(0xFF8DFDC4), Color(0xFF32C6A2)], + ), + ), + SettingsItem() + ], + ), + ), + ), + ), + ], + ), + ); + } +} + +class SettingsItem extends StatelessWidget { + const SettingsItem({ + Key key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + SmallText( + text: 'Turn On Sounds', + ), + XlivSwitch( + unActiveColor: Color(0xFFD0D0D0), + activeColor: Color(0xFF0AB8AD), + value: false, + onChanged: (bool val) {}, + ), + ], + ); + } +} + +class SmallText extends StatelessWidget { + final String text; + + SmallText({this.text}); + + @override + Widget build(BuildContext context) { + return Text( + text, + textAlign: TextAlign.left, + style: TextStyle( + fontFamily: 'Rubik', + fontSize: 14.0, + color: Colors.white, + fontWeight: FontWeight.w200, + decoration: TextDecoration.none), + ); + } +} diff --git a/lib/screens/settings/settings_state.dart b/lib/screens/settings/settings_state.dart new file mode 100644 index 000000000..28ded58eb --- /dev/null +++ b/lib/screens/settings/settings_state.dart @@ -0,0 +1,6 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class SettingsState {} + +class InitialSettingsState extends SettingsState {} diff --git a/lib/screens/tutorial/tutorial_screen.dart b/lib/screens/tutorial/tutorial_screen.dart index 41e05946b..a94d98613 100644 --- a/lib/screens/tutorial/tutorial_screen.dart +++ b/lib/screens/tutorial/tutorial_screen.dart @@ -1,9 +1,14 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:sudoku_brain/components/gradient_line.dart'; +import 'package:sudoku_brain/components/header_text.dart'; import 'package:sudoku_brain/components/top_container.dart'; import 'package:sudoku_brain/utils/Constants.dart'; +import 'package:sudoku_brain/utils/Strings.dart'; class TutorialScreen extends StatelessWidget { static final String id = 'tutorial_screen'; + final double spaceBTText = 15.0; @override Widget build(BuildContext context) { @@ -12,12 +17,100 @@ class TutorialScreen extends StatelessWidget { children: [ TopContainer( text: 'HELP', - color: Color(0xFFE2297E), + imagePath: 'assets/images/ic_back.png', + gradient: LinearGradient( + colors: [Color(0xFFFC8D4A), Color(0xFFFE3E16)], + ), + circleGradient: LinearGradient( + colors: [Color(0xFFFFC8AD), Color(0xFFFF7154)], + ), + color: Color(0xFFFFC8AD), ), Expanded( flex: 2, child: Container( + padding: EdgeInsets.fromLTRB(25.0, 0.0, 25.0, 0.0), + width: MediaQuery.of(context).size.width, color: kPrimaryColor, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: spaceBTText, + ), + Text( + 'TUTORIAL', + textAlign: TextAlign.left, + style: TextStyle( + fontFamily: 'Staatliches', + fontSize: 30.0, + color: Colors.white, + fontWeight: FontWeight.w200, + decoration: TextDecoration.none), + ), + GradientLine( + gradient: LinearGradient( + colors: [Color(0xFFFC8D4A), Color(0xFFFE3E16)], + ), + ), + HeaderText( + text: kTutHeadOne, + ), + SizedBox( + height: spaceBTText, + ), + SmallText( + text: kTutorialWIOne, + ), + SizedBox( + height: spaceBTText, + ), + SmallText( + text: kTutorialWITwo, + ), + SizedBox( + height: spaceBTText, + ), + HeaderText( + text: kTutHeadTwo, + ), + SizedBox( + height: spaceBTText, + ), + SmallText( + text: kTutorialHTPOne, + ), + SizedBox( + height: spaceBTText, + ), + SmallText( + text: kTutorialHTPTwo, + ), + SizedBox( + height: spaceBTText, + ), + SmallText( + text: kTutorialHTPThree, + ), + SizedBox( + height: spaceBTText, + ), + HeaderText( + text: kTutHeadThree, + ), + SizedBox( + height: spaceBTText, + ), + SmallText( + text: kTutorialGFB, + ), + SizedBox( + height: spaceBTText, + ), + ], + ), + ), ), ), ], @@ -25,3 +118,24 @@ class TutorialScreen extends StatelessWidget { ); } } + +class SmallText extends StatelessWidget { + final String text; + + SmallText({this.text}); + + @override + Widget build(BuildContext context) { + return Text( + text, + textAlign: TextAlign.left, + style: TextStyle( + fontFamily: 'Rubik', + fontSize: 15.0, + color: Colors.white, + fontWeight: FontWeight.w200, + decoration: TextDecoration.none), + ); + } +} + diff --git a/lib/utils/Strings.dart b/lib/utils/Strings.dart new file mode 100644 index 000000000..213604879 --- /dev/null +++ b/lib/utils/Strings.dart @@ -0,0 +1,21 @@ +// Text +const kTutHeadOne = 'What is Sudoku'; +const kTutHeadTwo = 'How to play Sudoku'; +const kTutHeadThree = 'Is sudoku good for brain?'; + +// SubText +const kTutorialWIOne = + 'Sudoku is a puzzle game designed for a single player, much like a crossword puzzle. The puzzle itself is nothing more than a grid of little boxes called “cells”.'; + +const kTutorialWITwo = + 'They are stacked nine high and nine wide, making 81 cells total. The puzzle comes with some of the cells (usually less than half of them) already filled in.'; + +const kTutorialHTPOne = + 'Look for Easy Opportunities First. Every Sudoku grid, when you start the game, comes with some numbers already placed into their correct spaces. ...'; + +const kTutorialHTPTwo = + 'Look to Neighboring Rows. Sudoku is a game of recognizing patterns and spotting opportunities. ...'; + +const kTutorialHTPThree = 'Follow Your Momentum.'; +const kTutorialGFB = + 'A brain game like sudoku, as well as crossword puzzles, taking classes, reading, and writing, can help delay dementia and Alzheimer\'s disease, and protect the brain from decline. ... And, says Snyder, while it offers good exercise and stimulation for the brain, sudoku can actually be very relaxing.'; diff --git a/pubspec.lock b/pubspec.lock index 836bb0a4f..3258366fc 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -226,6 +226,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.8" + xlive_switch: + dependency: "direct main" + description: + name: xlive_switch + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.5" xml: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 317d5afcf..3c4037f84 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -26,6 +26,8 @@ dependencies: intl: ^0.16.1 flutter_bloc: ^3.1.0 collection: ^1.14.11 + xlive_switch: ^1.0.5 + dev_dependencies: flutter_test: @@ -58,6 +60,9 @@ flutter: - family: Staatliches fonts: - asset: assets/fonts/Staatliches-Regular.ttf + - family: Rubik + fonts: + - asset: assets/fonts/Rubik-Regular.ttf # - family: Trajan Pro From 531b707d8f9ededad5a5f508a4a52bb80becf808 Mon Sep 17 00:00:00 2001 From: New Pc First Commit <> Date: Mon, 24 Feb 2020 17:36:00 +0500 Subject: [PATCH 23/57] screen navigations --- lib/components/top_container.dart | 14 ++++++++++---- lib/main.dart | 2 +- lib/screens/help/help_screen.dart | 10 ++++++++++ lib/screens/home/home_screen.dart | 14 ++++++++++---- lib/screens/level/level_screen.dart | 10 ++++++++-- lib/screens/settings/settings_screen.dart | 3 +++ 6 files changed, 42 insertions(+), 11 deletions(-) diff --git a/lib/components/top_container.dart b/lib/components/top_container.dart index 1eb8f6555..a1b0c3672 100644 --- a/lib/components/top_container.dart +++ b/lib/components/top_container.dart @@ -9,6 +9,8 @@ class TopContainer extends StatelessWidget { final double width; final double height; + final Function onPressed; + TopContainer( {this.text, this.imagePath, @@ -16,7 +18,8 @@ class TopContainer extends StatelessWidget { this.width, this.height, this.gradient, - this.circleGradient}); + this.circleGradient, + this.onPressed}); @override Widget build(BuildContext context) { @@ -32,9 +35,12 @@ class TopContainer extends StatelessWidget { Column( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ - Container( - margin: EdgeInsets.only(top: 30.0), - child: Image.asset('assets/images/ic_back.png'), + GestureDetector( + onTap: onPressed, + child: Container( + margin: EdgeInsets.only(top: 30.0), + child: Image.asset('assets/images/ic_back.png'), + ), ), Text( text, diff --git a/lib/main.dart b/lib/main.dart index 41bee5f18..92317eb75 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -26,7 +26,7 @@ class MyApp extends StatelessWidget { primaryColor: kPrimaryColor, scaffoldBackgroundColor: kPrimaryColor, ), - initialRoute: SettingsScreen.id, + initialRoute: HomeScreen.id, routes: { HomeScreen.id: (context) => BlocProvider( create: (BuildContext context) => HomeBloc(), diff --git a/lib/screens/help/help_screen.dart b/lib/screens/help/help_screen.dart index c784724b3..56b527b65 100644 --- a/lib/screens/help/help_screen.dart +++ b/lib/screens/help/help_screen.dart @@ -13,8 +13,18 @@ class HelpScreen extends StatelessWidget { child: Column( children: [ TopContainer( + onPressed: (){ + + }, + imagePath: 'assets/images/ic_help_pick.orange/', text: 'HELP', color: kPrimaryColor, + gradient: LinearGradient( + colors: [kPrimaryColor, kPrimaryColor], + ), + circleGradient: LinearGradient( + colors: [Color(0xFF8DFDC4), Color(0xFF32C6A2)], + ), ), Expanded( flex: 2, diff --git a/lib/screens/home/home_screen.dart b/lib/screens/home/home_screen.dart index fd0ade0d0..ae1c9503b 100644 --- a/lib/screens/home/home_screen.dart +++ b/lib/screens/home/home_screen.dart @@ -1,5 +1,8 @@ import 'package:flutter/material.dart'; import 'package:sudoku_brain/components/gradient_button.dart'; +import 'package:sudoku_brain/screens/help/help_screen.dart'; +import 'package:sudoku_brain/screens/level/level_screen.dart'; +import 'package:sudoku_brain/screens/settings/settings_screen.dart'; import 'package:sudoku_brain/utils/Constants.dart'; class HomeScreen extends StatelessWidget { @@ -42,7 +45,7 @@ class HomeScreen extends StatelessWidget { child: Column( children: [ Visibility( - visible: true, + visible: false, child: RaisedGradientButton( text: 'CONTINUE', icon: 'assets/images/ic_board.png', @@ -71,7 +74,8 @@ class HomeScreen extends StatelessWidget { ), shadowColor: Color(0xFFB9ACFF), onPressed: () { - print('button clicked'); + print('New Game'); + Navigator.pushNamed(context, LevelScreen.id); }), SizedBox( height: sizedBoxHeight, @@ -87,7 +91,8 @@ class HomeScreen extends StatelessWidget { ), shadowColor: Color(0xFF8DFDC4), onPressed: () { - print('button clicked'); + print('Settings'); + Navigator.pushNamed(context, SettingsScreen.id); }), SizedBox( height: sizedBoxHeight, @@ -103,7 +108,8 @@ class HomeScreen extends StatelessWidget { ), shadowColor: Color(0xFFFFC7E7), onPressed: () { - print('button clicked'); + print('Help'); + Navigator.pushNamed(context, HelpScreen.id); }), ], ), diff --git a/lib/screens/level/level_screen.dart b/lib/screens/level/level_screen.dart index 67bf2f29c..f53faff9d 100644 --- a/lib/screens/level/level_screen.dart +++ b/lib/screens/level/level_screen.dart @@ -19,8 +19,14 @@ class LevelScreen extends StatelessWidget { child: Row( children: [ Spacer(), - Image( - image: AssetImage('assets/images/ic_back.png'), + GestureDetector( + onTap: () { + print('back level'); + Navigator.pop(context); + }, + child: Image( + image: AssetImage('assets/images/ic_back.png'), + ), ), Spacer(), Column( diff --git a/lib/screens/settings/settings_screen.dart b/lib/screens/settings/settings_screen.dart index dce622615..9db235b5d 100644 --- a/lib/screens/settings/settings_screen.dart +++ b/lib/screens/settings/settings_screen.dart @@ -16,6 +16,9 @@ class SettingsScreen extends StatelessWidget { child: Column( children: [ TopContainer( + onPressed: (){ + Navigator.pop(context); + }, text: 'SETTINGS', imagePath: 'assets/images/ic_setting_large.png', gradient: LinearGradient( From 265102c1aa6da12eadb39c03a077a207a19e144d Mon Sep 17 00:00:00 2001 From: New Pc First Commit <> Date: Tue, 25 Feb 2020 18:01:52 +0500 Subject: [PATCH 24/57] navigations --- assets/boards/boardbrain.json | 13 ++ assets/brain.json | 3 + lib/components/top_container.dart | 4 +- lib/models/board_data.dart | 2 +- lib/screens/board/board_screen.dart | 1 + lib/screens/board/main_board_bloc.dart | 1 + lib/screens/help/help_screen.dart | 12 +- lib/screens/level/level_bloc.dart | 6 +- lib/screens/level/level_event.dart | 7 + lib/screens/level/level_screen.dart | 211 +++++++++++++--------- lib/screens/level/level_state.dart | 7 + lib/screens/tutorial/tutorial_screen.dart | 2 +- lib/utils/Constants.dart | 3 +- lib/utils/Enums.dart | 3 + lib/utils/Logs.dart | 5 + pubspec.lock | 7 + pubspec.yaml | 1 + 17 files changed, 195 insertions(+), 93 deletions(-) create mode 100644 assets/boards/boardbrain.json create mode 100644 lib/utils/Enums.dart create mode 100644 lib/utils/Logs.dart diff --git a/assets/boards/boardbrain.json b/assets/boards/boardbrain.json new file mode 100644 index 000000000..3b964de2c --- /dev/null +++ b/assets/boards/boardbrain.json @@ -0,0 +1,13 @@ +{ + "easy": [ + [0,0,0,8,0,0,0,0,0], + [7,0,0,0,0,3,1,5,0], + [0,5,6,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0,0] + ] +} \ No newline at end of file diff --git a/assets/brain.json b/assets/brain.json index b8f578df3..1b0b755de 100644 --- a/assets/brain.json +++ b/assets/brain.json @@ -99,6 +99,8 @@ 0, 0 ] + + ], "difficulty": "easy", "easy_solution": [ @@ -202,4 +204,5 @@ 4 ] ] + } diff --git a/lib/components/top_container.dart b/lib/components/top_container.dart index a1b0c3672..8f58e5682 100644 --- a/lib/components/top_container.dart +++ b/lib/components/top_container.dart @@ -36,7 +36,9 @@ class TopContainer extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ GestureDetector( - onTap: onPressed, + onTap: () { + Navigator.pop(context); + }, child: Container( margin: EdgeInsets.only(top: 30.0), child: Image.asset('assets/images/ic_back.png'), diff --git a/lib/models/board_data.dart b/lib/models/board_data.dart index 9af750790..8751f9998 100644 --- a/lib/models/board_data.dart +++ b/lib/models/board_data.dart @@ -1,4 +1,4 @@ -import 'package:sudoku_brain/utils/Constants.dart'; +import 'package:sudoku_brain/utils/Enums.dart'; class BoardData { int value; diff --git a/lib/screens/board/board_screen.dart b/lib/screens/board/board_screen.dart index 192884142..95066e205 100644 --- a/lib/screens/board/board_screen.dart +++ b/lib/screens/board/board_screen.dart @@ -12,6 +12,7 @@ import 'package:sudoku_brain/components/timer_widget.dart'; import 'package:sudoku_brain/models/board_data.dart'; import 'package:sudoku_brain/models/row_col.dart'; import 'package:sudoku_brain/utils/Constants.dart'; +import 'package:sudoku_brain/utils/Enums.dart'; import 'main_board_bloc.dart'; import 'main_board_event.dart'; diff --git a/lib/screens/board/main_board_bloc.dart b/lib/screens/board/main_board_bloc.dart index 388cbcfdf..8580d7996 100644 --- a/lib/screens/board/main_board_bloc.dart +++ b/lib/screens/board/main_board_bloc.dart @@ -10,6 +10,7 @@ import 'package:intl/intl.dart'; import 'package:sudoku_brain/models/board_data.dart'; import 'package:sudoku_brain/models/row_col.dart'; import 'package:sudoku_brain/utils/Constants.dart'; +import 'package:sudoku_brain/utils/Enums.dart'; import './bloc.dart'; import '../../utils/Board.dart'; diff --git a/lib/screens/help/help_screen.dart b/lib/screens/help/help_screen.dart index 56b527b65..573ad6569 100644 --- a/lib/screens/help/help_screen.dart +++ b/lib/screens/help/help_screen.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; import 'package:sudoku_brain/components/gradient_button.dart'; import 'package:sudoku_brain/components/top_container.dart'; +import 'package:sudoku_brain/screens/tutorial/tutorial_screen.dart'; import 'package:sudoku_brain/utils/Constants.dart'; +import 'package:sudoku_brain/utils/Logs.dart'; class HelpScreen extends StatelessWidget { static final String id = 'help_screen'; @@ -13,17 +15,14 @@ class HelpScreen extends StatelessWidget { child: Column( children: [ TopContainer( - onPressed: (){ - - }, - imagePath: 'assets/images/ic_help_pick.orange/', + imagePath: 'assets/images/ic_help_ pink.png', text: 'HELP', color: kPrimaryColor, gradient: LinearGradient( colors: [kPrimaryColor, kPrimaryColor], ), circleGradient: LinearGradient( - colors: [Color(0xFF8DFDC4), Color(0xFF32C6A2)], + colors: [Color(0xFFFFC7E7), Color(0xFFFF3AA0)], ), ), Expanded( @@ -38,7 +37,8 @@ class HelpScreen extends StatelessWidget { colors: [Color(0xFFFABB69), Color(0xFFFE3E16)], ), onPressed: () { - print('button clicked'); + Logs.printLogs('Tutorial Clicked'); + Navigator.pushNamed(context, TutorialScreen.id); }), SizedBox( height: sizedBoxHeight, diff --git a/lib/screens/level/level_bloc.dart b/lib/screens/level/level_bloc.dart index 1d44dd293..9a63c0030 100644 --- a/lib/screens/level/level_bloc.dart +++ b/lib/screens/level/level_bloc.dart @@ -1,5 +1,7 @@ import 'dart:async'; + import 'package:bloc/bloc.dart'; + import './bloc.dart'; class LevelBloc extends Bloc { @@ -10,6 +12,8 @@ class LevelBloc extends Bloc { Stream mapEventToState( LevelEvent event, ) async* { - // TODO: Add Logic + if (event is LevelSelected) { + yield SelectedLevelState(levelTYPE: event.levelTYPE); + } } } diff --git a/lib/screens/level/level_event.dart b/lib/screens/level/level_event.dart index 171cf6b8c..c80efeb28 100644 --- a/lib/screens/level/level_event.dart +++ b/lib/screens/level/level_event.dart @@ -1,4 +1,11 @@ import 'package:meta/meta.dart'; +import 'package:sudoku_brain/utils/Enums.dart'; @immutable abstract class LevelEvent {} + +class LevelSelected extends LevelEvent { + final LevelTYPE levelTYPE; + + LevelSelected({this.levelTYPE}); +} diff --git a/lib/screens/level/level_screen.dart b/lib/screens/level/level_screen.dart index f53faff9d..1999e8364 100644 --- a/lib/screens/level/level_screen.dart +++ b/lib/screens/level/level_screen.dart @@ -1,106 +1,155 @@ +import 'package:enum_to_string/enum_to_string.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:sudoku_brain/components/gradient_button.dart'; +import 'package:sudoku_brain/screens/board/board_screen.dart'; +import 'package:sudoku_brain/screens/level/bloc.dart'; import 'package:sudoku_brain/utils/Constants.dart'; +import 'package:sudoku_brain/utils/Enums.dart'; +import 'package:sudoku_brain/utils/Logs.dart'; -class LevelScreen extends StatelessWidget { +class LevelScreen extends StatefulWidget { static final String id = 'level_screen'; + + @override + _LevelScreenState createState() => _LevelScreenState(); +} + +class _LevelScreenState extends State { + LevelBloc _levelBloc; final double sizedBoxHeight = 25.0; + @override + void initState() { + super.initState(); + + _levelBloc = BlocProvider.of(context); + } + @override Widget build(BuildContext context) { - return SafeArea( - child: Container( - color: kPrimaryColor, + return BlocListener( + bloc: BlocProvider.of(context), + listener: (BuildContext context, state) { + if(state is SelectedLevelState){ + Logs.printLogs('${EnumToString.parse(state.levelTYPE)}'); + Navigator.pushNamed(context, MainBoard.id); + } + }, + child: BlocBuilder(builder: (context, state) { + print('BlocBuilder'); + return SafeArea( + child: Container( + color: kPrimaryColor, - child: Column( - children: [ - Expanded( - flex: 2, - child: Row( - children: [ - Spacer(), - GestureDetector( - onTap: () { - print('back level'); - Navigator.pop(context); - }, - child: Image( - image: AssetImage('assets/images/ic_back.png'), - ), - ), - Spacer(), - Column( - mainAxisAlignment: MainAxisAlignment.center, + child: Column( + children: [ + Expanded( + flex: 2, + child: Row( children: [ - Image( - image: AssetImage('assets/images/header.png'), - ), - SizedBox( - height: 7.0, + Spacer(), + GestureDetector( + onTap: () { + print('back level'); + Navigator.pop(context); + }, + child: Image( + image: AssetImage('assets/images/ic_back.png'), + ), ), - Image( - image: AssetImage('assets/images/subheader.png'), + Spacer(), + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image( + image: AssetImage('assets/images/header.png'), + ), + SizedBox( + height: 7.0, + ), + Image( + image: AssetImage('assets/images/subheader.png'), + ), + ], ), + Spacer(), + Spacer(), ], ), - Spacer(), - Spacer(), - ], - ), - ), - Expanded( - flex: 5, - child: Column( - children: [ - RaisedGradientButton( - text: 'EASY', - gradient: LinearGradient( - colors: [Color(0xFF91E786), Color(0xFF0AB8AD)], + ), + Expanded( + flex: 5, + child: Column( + children: [ + RaisedGradientButton( + text: '${EnumToString.parse(LevelTYPE.EASY)}', + gradient: LinearGradient( + colors: [ + Color(0xFF91E786), + Color(0xFF0AB8AD) + ], + ), + onPressed: () { + print('button clicked'); + _levelBloc + .add(LevelSelected(levelTYPE: LevelTYPE.EASY)); + }), + SizedBox( + height: sizedBoxHeight, ), - onPressed: () { - print('button clicked'); - }), - SizedBox( - height: sizedBoxHeight, - ), - RaisedGradientButton( - text: 'MEDIUM', - gradient: LinearGradient( - colors: [Color(0xFF1E9FFE), Color(0xFF4F5FFE)], + RaisedGradientButton( + text: '${EnumToString.parse(LevelTYPE.MEDIUM)}', + gradient: LinearGradient( + colors: [ + Color(0xFF1E9FFE), + Color(0xFF4F5FFE) + ], + ), + onPressed: () { + _levelBloc.add( + LevelSelected(levelTYPE: LevelTYPE.MEDIUM)); + }), + SizedBox( + height: sizedBoxHeight, ), - onPressed: () { - print('button clicked'); - }), - SizedBox( - height: sizedBoxHeight, - ), - RaisedGradientButton( - text: 'HARD', - gradient: LinearGradient( - colors: [Color(0xFFA193FF), Color(0xFF6442FD)], + RaisedGradientButton( + text: '${EnumToString.parse(LevelTYPE.HARD)}', + gradient: LinearGradient( + colors: [ + Color(0xFFA193FF), + Color(0xFF6442FD) + ], + ), + onPressed: () { + _levelBloc + .add(LevelSelected(levelTYPE: LevelTYPE.HARD)); + }), + SizedBox( + height: sizedBoxHeight, ), - onPressed: () { - print('button clicked'); - }), - SizedBox( - height: sizedBoxHeight, + RaisedGradientButton( + text: '${EnumToString.parse(LevelTYPE.EXPERT)}', + gradient: LinearGradient( + colors: [ + Color(0xFFFE23A7), + Color(0xFFE2297E) + ], + ), + onPressed: () { + _levelBloc.add( + LevelSelected(levelTYPE: LevelTYPE.EXPERT)); + }), + ], ), - RaisedGradientButton( - text: 'EXPERT', - gradient: LinearGradient( - colors: [Color(0xFFFE23A7), Color(0xFFE2297E)], - ), - onPressed: () { - print('button clicked'); - }), - ], - ), + ), + ], ), - ], - ), // - ), + ), + ); + }), ); } } diff --git a/lib/screens/level/level_state.dart b/lib/screens/level/level_state.dart index c39e69e46..8871c0c82 100644 --- a/lib/screens/level/level_state.dart +++ b/lib/screens/level/level_state.dart @@ -1,6 +1,13 @@ import 'package:meta/meta.dart'; +import 'package:sudoku_brain/utils/Enums.dart'; @immutable abstract class LevelState {} class InitialLevelState extends LevelState {} + +class SelectedLevelState extends LevelState { + final LevelTYPE levelTYPE; + + SelectedLevelState({this.levelTYPE}); +} diff --git a/lib/screens/tutorial/tutorial_screen.dart b/lib/screens/tutorial/tutorial_screen.dart index a94d98613..54f22dda9 100644 --- a/lib/screens/tutorial/tutorial_screen.dart +++ b/lib/screens/tutorial/tutorial_screen.dart @@ -17,7 +17,7 @@ class TutorialScreen extends StatelessWidget { children: [ TopContainer( text: 'HELP', - imagePath: 'assets/images/ic_back.png', + imagePath: 'assets/images/ic_help_orange.png', gradient: LinearGradient( colors: [Color(0xFFFC8D4A), Color(0xFFFE3E16)], ), diff --git a/lib/utils/Constants.dart b/lib/utils/Constants.dart index 451ca2a85..ef91fca88 100644 --- a/lib/utils/Constants.dart +++ b/lib/utils/Constants.dart @@ -50,5 +50,4 @@ List> dummyList = [ [3, 7, 8, 6, 2, 1, 5, 9, 0] ]; -// Enums -enum PlayMode { PENCIL, PLAY } + diff --git a/lib/utils/Enums.dart b/lib/utils/Enums.dart new file mode 100644 index 000000000..0c94e0d05 --- /dev/null +++ b/lib/utils/Enums.dart @@ -0,0 +1,3 @@ +// Enums +enum PlayMode { PENCIL, PLAY } +enum LevelTYPE { EASY, MEDIUM, HARD, EXPERT } diff --git a/lib/utils/Logs.dart b/lib/utils/Logs.dart new file mode 100644 index 000000000..bf9687a37 --- /dev/null +++ b/lib/utils/Logs.dart @@ -0,0 +1,5 @@ +class Logs { + static void printLogs(String msg) { + print('DEBUG: $msg'); + } +} diff --git a/pubspec.lock b/pubspec.lock index 3258366fc..f7a05123c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -71,6 +71,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.1.3" + enum_to_string: + dependency: "direct main" + description: + name: enum_to_string + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.9" flutter: dependency: "direct main" description: flutter diff --git a/pubspec.yaml b/pubspec.yaml index 3c4037f84..e8c06135c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -27,6 +27,7 @@ dependencies: flutter_bloc: ^3.1.0 collection: ^1.14.11 xlive_switch: ^1.0.5 + enum_to_string: ^1.0.9 dev_dependencies: From 86635e3febfe76380cab2fe2ec9067b88f10f35c Mon Sep 17 00:00:00 2001 From: New Pc First Commit <> Date: Wed, 26 Feb 2020 16:31:38 +0500 Subject: [PATCH 25/57] levels added --- assets/brain.json | 509 +++++++++++++++++++++--- lib/models/screen_arguments.dart | 7 + lib/screens/board/board_screen.dart | 128 ++---- lib/screens/board/main_board_bloc.dart | 20 +- lib/screens/board/main_board_event.dart | 4 +- lib/screens/board/main_board_state.dart | 6 + lib/screens/level/level_screen.dart | 6 +- lib/utils/Strings.dart | 7 +- 8 files changed, 529 insertions(+), 158 deletions(-) create mode 100644 lib/models/screen_arguments.dart diff --git a/assets/brain.json b/assets/brain.json index 1b0b755de..0859cf216 100644 --- a/assets/brain.json +++ b/assets/brain.json @@ -1,208 +1,613 @@ { + "================= EASY ==================": "", "easy": [ [ 0, 0, 0, + 6, 0, 0, - 0, - 0, - 0, + 8, + 1, 5 ], [ 0, - 3, + 2, + 0, + 0, 0, 0, 0, - 6, 7, - 8, - 9 + 0 ], [ + 6, + 0, + 0, + 1, + 5, + 0, 0, 0, + 0 + ], + [ 0, 1, 0, 0, 0, - 3, + 5, + 0, + 0, 0 ], [ + 5, + 4, + 0, + 7, 0, 0, 3, - 4, + 2, + 6 + ], + [ + 7, + 0, 6, + 2, 0, + 3, 0, 0, - 0 + 1 ], [ + 3, 0, 0, 0, - 8, + 0, + 4, 9, + 6, + 2 + ], + [ + 8, 0, 0, - 2, - 0 + 9, + 0, + 6, + 5, + 4, + 3 ], [ - 7, + 0, + 0, 0, 0, 3, + 0, 1, - 2, 0, + 7 + ] + ], + "solution_easy": [ + [ + 4, + 3, + 7, + 6, + 2, + 9, + 8, + 1, + 5 + ], + [ + 1, + 2, + 5, + 3, + 4, + 8, + 6, + 7, + 9 + ], + [ + 6, + 8, + 9, + 1, 5, + 7, + 2, + 3, + 4 + ], + [ + 2, + 1, + 3, + 4, + 6, + 5, + 7, + 9, + 8 + ], + [ + 5, + 4, + 8, + 7, + 9, + 1, + 3, + 2, 6 ], [ - 0, + 7, + 9, + 6, 2, - 0, + 8, + 3, + 4, + 5, + 1 + ], + [ + 3, 5, + 1, + 8, 7, 4, - 0, + 9, 6, - 8 + 2 + ], + [ + 8, + 7, + 2, + 9, + 1, + 6, + 5, + 4, + 3 ], [ + 9, 6, 4, + 5, + 3, + 2, + 1, + 8, + 7 + ] + ], + "================= MEDIUM ==================": "", + "medium": [ + [ 0, 0, + 5, 0, 0, 0, - 7, - 1 + 3, + 0, + 0 ], [ + 0, + 2, + 3, + 0, + 0, + 0, + 6, + 0, + 0 + ], + [ + 0, + 0, + 0, 0, 7, 0, 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, 0, + 8, + 9, + 0 + ], + [ + 3, + 0, + 0, + 8, + 9, + 7, + 2, 1, + 4 + ], + [ + 8, + 0, + 9, + 2, + 1, + 0, + 0, + 0, + 0 + ], + [ 5, 0, + 7, + 6, + 0, + 1, + 9, + 0, + 0 + ], + [ + 6, + 0, + 0, + 9, + 8, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 7, + 0, + 0, + 4, + 0, 0 ] - - ], - "difficulty": "easy", - "easy_solution": [ + "solution_medium": [ [ - 8, + 1, 6, + 5, + 4, 2, + 8, + 3, 7, + 9 + ], + [ + 7, + 2, 3, - 9, 1, + 5, + 9, + 6, 4, - 5 + 8 ], [ 4, + 9, + 8, 3, + 7, + 6, 1, 2, + 5 + ], + [ + 2, + 1, + 4, 5, 6, - 7, + 3, 8, - 9 + 9, + 7 ], [ - 9, + 3, 5, + 6, + 8, + 9, 7, + 2, 1, - 4, + 4 + ], + [ 8, - 6, + 7, + 9, + 2, + 1, + 4, + 5, + 3, + 6 + ], + [ + 5, 3, + 7, + 6, + 4, + 1, + 9, + 8, 2 ], [ + 6, + 4, + 1, + 9, + 8, 2, + 7, + 5, + 3 + ], + [ + 9, 8, + 2, + 7, 3, + 5, 4, 6, - 5, - 9, - 1, - 7 + 1 + ] + ], + + "================= HARD ==================": "", + "hard": [ + [ + 0, + 8, + 0, + 0, + 7, + 3, + 0, + 0, + 0 ], [ - 5, 1, + 0, + 0, + 0, + 0, 6, - 8, + 0, + 0, + 0 + ], + [ + 0, + 6, + 0, + 0, + 0, 9, - 7, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 6, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 9, + 0, + 0, + 0, + 6 + ], + [ + 0, + 0, + 0, + 0, + 2, 4, + 3, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, 2, - 3 + 9, + 7, + 8 ], [ 7, - 9, 4, - 3, + 6, + 9, + 0, + 0, + 0, + 0, + 3 + ], + [ + 8, + 9, + 0, + 0, + 0, + 0, + 6, 1, + 4 + ] + ], + + "solution_hard": [ + [ 2, 8, + 4, + 1, + 7, + 3, 5, - 6 + 6, + 9 ], [ 1, - 2, + 3, 9, + 2, + 5, + 6, + 4, + 8, + 7 + ], + [ 5, + 6, 7, 4, + 8, + 9, + 1, 3, - 6, - 8 + 2 ], [ + 9, + 2, + 1, + 3, 6, + 7, + 8, + 4, + 5 + ], + [ 4, 5, - 9, - 8, 3, + 8, + 9, + 1, + 7, 2, + 6 + ], + [ + 6, 7, + 8, + 5, + 2, + 4, + 3, + 9, 1 ], [ 3, - 7, - 8, + 1, + 5, 6, + 4, 2, + 9, + 7, + 8 + ], + [ + 7, + 4, + 6, + 9, 1, + 8, + 2, 5, + 3 + ], + [ + 8, 9, + 2, + 7, + 3, + 5, + 6, + 1, 4 ] ] - } diff --git a/lib/models/screen_arguments.dart b/lib/models/screen_arguments.dart new file mode 100644 index 000000000..ba5b6ebd6 --- /dev/null +++ b/lib/models/screen_arguments.dart @@ -0,0 +1,7 @@ +import 'package:sudoku_brain/utils/Enums.dart'; + +class ScreenArguments { + LevelTYPE levelTYPE; + + ScreenArguments({this.levelTYPE}); +} diff --git a/lib/screens/board/board_screen.dart b/lib/screens/board/board_screen.dart index 95066e205..9a4b3f92b 100644 --- a/lib/screens/board/board_screen.dart +++ b/lib/screens/board/board_screen.dart @@ -1,6 +1,4 @@ -import 'dart:async'; import 'dart:collection'; -import 'dart:convert'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -11,8 +9,10 @@ import 'package:sudoku_brain/components/play_pause_widget.dart'; import 'package:sudoku_brain/components/timer_widget.dart'; import 'package:sudoku_brain/models/board_data.dart'; import 'package:sudoku_brain/models/row_col.dart'; +import 'package:sudoku_brain/models/screen_arguments.dart'; import 'package:sudoku_brain/utils/Constants.dart'; import 'package:sudoku_brain/utils/Enums.dart'; +import 'package:sudoku_brain/utils/Strings.dart'; import 'main_board_bloc.dart'; import 'main_board_event.dart'; @@ -47,40 +47,22 @@ class _MainBoardState extends State { @override void initState() { super.initState(); - - // init main screens.board bloc here _mainBoardBloc = BlocProvider.of(context); - _mainBoardBloc.add(BoardInitISCalled(context: context)); - _mainBoardBloc.add(StartTimer()); - - readJson().then((value) { - // TODO remove this method later - _initBoardList = List.from(value); - - print('_initList: $_initBoardList'); - }, onError: (error) { - print(error); - }); } @override Widget build(BuildContext context) { + initBoardData(); return BlocListener( bloc: BlocProvider.of(context), listener: (BuildContext context, state) { if (state is InitialMainBoardState) { - print('state: ${state.error}'); } else if (state is FetchingLevel) { - print('FetchingLevel'); } else if (state is LevelFetched) { - print('LevelFetched: ${state.boardList}'); -// _boardList = List.from(dummyList); _boardList = List.from(state.boardList); -// _initList.clear(); TODO: copy list to another list without same reference -// _initList.addAll(state.boardList.map((element) => element).toList()); - print('imgList: $_boardList'); + } else if (state is InitStateFetched) { + _initBoardList = List.from(state.boardList); } else if (state is ConflictsChanged) { - print('ConflictsChanged'); _conflicts = state.conflicts; } else if (state is CursorChangedState) { _cursor = state.val; @@ -88,54 +70,41 @@ class _MainBoardState extends State { if (state.val == 0) { _cursorCopy = -1; } - print('cursor: $_cursor'); } else if (state is UpdateCellState) { if (_isPencilON) { bool isConflict = _conflicts.contains(new RowCol(_row, _col)); - print('isConflict: $isConflict'); _boardList[_row][_col].mode = PlayMode.PENCIL; _boardList[_row][_col].pencilValues[state.val - 1] = state.val; } else { _boardList[_row][_col].mode = PlayMode.PLAY; _boardList[_row][_col].value = state.val; } - print('mode: ${_boardList[_row][_col].mode}'); - - print('_boardList: ${state.val}'); } else if (state is UpdateRowColState) { - print('UpdateRowColState'); _row = state.row; _col = state.col; } else if (state is PauseTimerState) { _isTimerPaused = state.isPaused; - _dynamicText = 'PAUSE'; + _dynamicText = kPauseText; } else if (state is ResetState) { - print('ResetState'); - print('ResetState: ${state.boardList}'); _cursorCopy = -1; _boardList = List.from(state.boardList); - changeConflicts(); + _changeConflicts(); } else if (state is FullScreenState) { - print('state.isFull ${state.isFull}'); -// _isFullScreen = state.isFull; - _animatedHeight != 0.0 ? _animatedHeight = 0.0 : _animatedHeight = 40.0; } else if (state is GameFinishedState) { - print('game finished hurry'); print('game won: ${state.isWon}'); _isTimerPaused = true; if (state.isWon) { - _dynamicText = 'You Won!'; + _dynamicText = kWinText; } else { - _dynamicText = 'You Lost!'; + _dynamicText = kLooseText; } } }, child: BlocBuilder(builder: (context, state) { - print('BlocBuilder'); return SafeArea( child: Scaffold( backgroundColor: kPrimaryColor, @@ -150,8 +119,7 @@ class _MainBoardState extends State { children: [ InkWell( onTap: () { - print('settings'); - readJson(); + Navigator.pop(context); }, child: Icon(Icons.settings, size: 25.0)), CounterWidget(mainBoardBloc: _mainBoardBloc), @@ -171,7 +139,7 @@ class _MainBoardState extends State { shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(20.0), ), - child: buildTable(), + child: _buildTable(), ), ), ), @@ -198,9 +166,6 @@ class _MainBoardState extends State { ), Panel( onSegmentChange: (int segmentValue, bool isSelected) { - print('segmentValue: $segmentValue'); - print('isSelected: $isSelected'); - if (!_isTimerPaused) { switch (segmentValue) { case 0: @@ -231,8 +196,6 @@ class _MainBoardState extends State { marginBottom: 0.0, mainAxisAlignment: MainAxisAlignment.spaceAround, onValueChanged: (int val) { - print('NumPad: $val'); - if (!_isTimerPaused) _numPadButtonClick(val); }, ), @@ -244,7 +207,6 @@ class _MainBoardState extends State { marginBottom: 0.0, mainAxisAlignment: MainAxisAlignment.spaceEvenly, onValueChanged: (int val) { - print('NumPad: $val'); if (!_isTimerPaused) _numPadButtonClick(val); }), ])), @@ -253,9 +215,9 @@ class _MainBoardState extends State { ); } - Table buildTable() { + Table _buildTable() { return Table( - children: getTableBoardRow(), // main board + children: _getTableBoardRow(), // main board border: new TableBorder.all(color: kBorderTest, width: 1.0), ); } @@ -264,23 +226,23 @@ class _MainBoardState extends State { if (_isPencilON) { _mainBoardBloc.add(UpdateCellValue(val: value)); } else { - changeCursor(value); + _changeCursor(value); _mainBoardBloc.add(UpdateCellValue(val: value)); - changeConflicts(); + _changeConflicts(); } } // Methods - void changeConflicts() { + void _changeConflicts() { _mainBoardBloc.add(ChangeConflictsCalled(list: _boardList)); } - void changeCursor(i) { + void _changeCursor(i) { _mainBoardBloc.add(CursorChanged(val: i)); } - Color getHighlightColor(int r, int c) { + Color _getHighlightColor(int r, int c) { if (_boardList.isNotEmpty && _initBoardList.isNotEmpty) { bool isConflict = _conflicts.contains(new RowCol(r, c)); bool isChangeAble = _initBoardList[r][c].value == 0; @@ -316,7 +278,7 @@ class _MainBoardState extends State { } } - Color getTextColor(int r, int c) { + Color _getTextColor(int r, int c) { if (_initBoardList.isNotEmpty) { bool isConflict = _conflicts.contains(new RowCol(r, c)); bool isChangeAble = _initBoardList[r][c].value == 0; @@ -338,15 +300,15 @@ class _MainBoardState extends State { } } - List getTableBoardRow() { + List _getTableBoardRow() { List lst = new List(); for (int r = 0; r < 9; r++) { - lst.add(getTableRow(r)); + lst.add(_getTableRow(r)); } return lst; } - TableRow getTableRow(r) { + TableRow _getTableRow(r) { List lst = new List(); for (int c = 0; c < 9; c++) { lst.add(InkWell( @@ -358,7 +320,7 @@ class _MainBoardState extends State { child: new Container( height: (MediaQuery.of(context).size.height / 2) / 9, width: (MediaQuery.of(context).size.width / 2) / 9, - color: getHighlightColor(r, c), + color: _getHighlightColor(r, c), child: Column( children: [ Visibility( @@ -389,11 +351,11 @@ class _MainBoardState extends State { ? false : true), child: Text( - getText(r, c), + _getText(r, c), textAlign: TextAlign.center, style: TextStyle( fontSize: 20.0, - color: getTextColor(r, c), + color: _getTextColor(r, c), ), ), ), @@ -419,37 +381,7 @@ class _MainBoardState extends State { return new TableRow(children: lst); } - // TODO: remove it later - Future>> readJson() async { - print('readJson'); - - String data = - await DefaultAssetBundle.of(context).loadString("assets/brain.json"); -// print('data: $data'); - - var decodedData = jsonDecode(data); - List list = decodedData['easy']; - print('main list: $list'); - - List> test = []; - for (int i = 0; i < list.length; i++) { - List innerList = list[i]; - List dataList = []; - for (int j = 0; j < innerList.length; j++) { - dataList.add(BoardData(value: innerList[j], mode: PlayMode.PLAY)); - } - test.add(dataList); - } - - print('================ List ==============='); - print('list: ${test[1][1].value}'); - print('list: ${test[0][0].mode}'); - print('================ List ==============='); - - return test; - } - - String getText(int r, int c) { + String _getText(int r, int c) { if (_boardList.isEmpty) { return ''; } else { @@ -461,7 +393,6 @@ class _MainBoardState extends State { } } -// ========= Widget _buildItemsList(List pencilValues) { List items = [1, 2, 3, 0, 5, 6, 0, 8, 9]; if (pencilValues != null) { @@ -496,4 +427,11 @@ class _MainBoardState extends State { ); } } + + void initBoardData() { + final ScreenArguments args = ModalRoute.of(context).settings.arguments; + _mainBoardBloc + .add(BoardInitISCalled(context: context, levelTYPE: args.levelTYPE)); + _mainBoardBloc.add(StartTimer()); + } } diff --git a/lib/screens/board/main_board_bloc.dart b/lib/screens/board/main_board_bloc.dart index 8580d7996..1140587dc 100644 --- a/lib/screens/board/main_board_bloc.dart +++ b/lib/screens/board/main_board_bloc.dart @@ -4,6 +4,7 @@ import 'dart:convert'; import 'package:bloc/bloc.dart'; import 'package:collection/collection.dart'; +import 'package:enum_to_string/enum_to_string.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; @@ -20,7 +21,7 @@ class MainBoardBloc extends Bloc { int _currentTimerValue = 0; bool _isPaused = false; bool _isFullScreen = true; - List> _solution; + List> _solution; StreamController _timerController = StreamController.broadcast(); @@ -38,17 +39,22 @@ class MainBoardBloc extends Bloc { ) async* { if (event is BoardInitISCalled) { yield FetchingLevel(); - final list = await _readJson(event.context, 'easy'); -// _solution = await _readJson(event.context, 'easy_solution'); + final list = await _readJson(event.context, EnumToString.parse(event.levelTYPE).toLowerCase()); + yield LevelFetched(boardList: list); + + final listNew = await _readJson(event.context, EnumToString.parse(event.levelTYPE).toLowerCase()); + yield InitStateFetched(boardList: listNew); + + _solution = await _readJson(event.context, 'solution_${EnumToString.parse(event.levelTYPE).toLowerCase()}'); print('_solution" $_solution'); - yield LevelFetched(boardList: list); + } else if (event is ChangeConflictsCalled) { final conflicts = _changeConflicts(event.list); final gameFinished = _gameFinished(event.list); yield ConflictsChanged(conflicts: conflicts); if (gameFinished) { -// final isWon = compareLists(event.list); -// yield GameFinishedState(isWon: isWon); + final isWon = compareLists(event.list); + yield GameFinishedState(isWon: isWon); } } else if (event is CursorChanged) { final cursor = _changeCursor(event.val); @@ -111,7 +117,7 @@ class MainBoardBloc extends Bloc { return _isFullScreen; } - bool compareLists(List> list) { + bool compareLists(List> list) { print('compareLists'); Function deepEq = const DeepCollectionEquality().equals; bool res = deepEq(list, _solution); diff --git a/lib/screens/board/main_board_event.dart b/lib/screens/board/main_board_event.dart index d79d7f5e3..8345debae 100644 --- a/lib/screens/board/main_board_event.dart +++ b/lib/screens/board/main_board_event.dart @@ -1,14 +1,16 @@ import 'package:flutter/cupertino.dart'; import 'package:meta/meta.dart'; import 'package:sudoku_brain/models/board_data.dart'; +import 'package:sudoku_brain/utils/Enums.dart'; @immutable abstract class MainBoardEvent {} class BoardInitISCalled extends MainBoardEvent { final BuildContext context; + final LevelTYPE levelTYPE; - BoardInitISCalled({this.context}); + BoardInitISCalled({@required this.context, @required this.levelTYPE}); } class ChangeConflictsCalled extends MainBoardEvent { diff --git a/lib/screens/board/main_board_state.dart b/lib/screens/board/main_board_state.dart index bc2b7ebe4..6fb436a40 100644 --- a/lib/screens/board/main_board_state.dart +++ b/lib/screens/board/main_board_state.dart @@ -22,6 +22,12 @@ class LevelFetched extends MainBoardState { LevelFetched({this.boardList}); } +class InitStateFetched extends MainBoardState { + final List> boardList; + + InitStateFetched({this.boardList}); +} + class SolutionFetched extends MainBoardState {} class ErrorFetched extends MainBoardState { diff --git a/lib/screens/level/level_screen.dart b/lib/screens/level/level_screen.dart index 1999e8364..9170e2bca 100644 --- a/lib/screens/level/level_screen.dart +++ b/lib/screens/level/level_screen.dart @@ -2,6 +2,7 @@ import 'package:enum_to_string/enum_to_string.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:sudoku_brain/components/gradient_button.dart'; +import 'package:sudoku_brain/models/screen_arguments.dart'; import 'package:sudoku_brain/screens/board/board_screen.dart'; import 'package:sudoku_brain/screens/level/bloc.dart'; import 'package:sudoku_brain/utils/Constants.dart'; @@ -31,9 +32,10 @@ class _LevelScreenState extends State { return BlocListener( bloc: BlocProvider.of(context), listener: (BuildContext context, state) { - if(state is SelectedLevelState){ + if (state is SelectedLevelState) { Logs.printLogs('${EnumToString.parse(state.levelTYPE)}'); - Navigator.pushNamed(context, MainBoard.id); + Navigator.pushNamed(context, MainBoard.id, + arguments: ScreenArguments(levelTYPE: state.levelTYPE)); } }, child: BlocBuilder(builder: (context, state) { diff --git a/lib/utils/Strings.dart b/lib/utils/Strings.dart index 213604879..4f663c464 100644 --- a/lib/utils/Strings.dart +++ b/lib/utils/Strings.dart @@ -1,4 +1,4 @@ -// Text +// Text Tutorial const kTutHeadOne = 'What is Sudoku'; const kTutHeadTwo = 'How to play Sudoku'; const kTutHeadThree = 'Is sudoku good for brain?'; @@ -19,3 +19,8 @@ const kTutorialHTPTwo = const kTutorialHTPThree = 'Follow Your Momentum.'; const kTutorialGFB = 'A brain game like sudoku, as well as crossword puzzles, taking classes, reading, and writing, can help delay dementia and Alzheimer\'s disease, and protect the brain from decline. ... And, says Snyder, while it offers good exercise and stimulation for the brain, sudoku can actually be very relaxing.'; + +//=================== +const kWinText='You Won!'; +const kLooseText='You Lost!'; +const kPauseText='PAUSE'; \ No newline at end of file From 755c43bc96869ed54ea7ec30a285d8a20dbcc5e6 Mon Sep 17 00:00:00 2001 From: zahidch052 Date: Fri, 6 Mar 2020 17:37:31 +0500 Subject: [PATCH 26/57] pusing for light review from KP --- .flutter-plugins-dependencies | 1 + android/app/build.gradle | 6 +- android/app/src/main/AndroidManifest.xml | 27 +- android/build.gradle | 2 +- android/gradle.properties | 2 + .../gradle/wrapper/gradle-wrapper.properties | 4 +- assets/boards/boardbrain.json | 1460 +++++++++++- assets/brain.json | 2062 ++++++++++++----- assets/fonts/Viga-Regular.ttf | Bin 0 -> 25524 bytes .../{ic_help_ pink.png => ic_help_pink.png} | Bin assets/images/2.0x/ic_stars.png | Bin 0 -> 1189 bytes assets/images/2.0x/ic_tou.png | Bin 0 -> 2551 bytes assets/images/2.0x/ic_win.png | Bin 0 -> 8562 bytes .../{ic_help_ pink.png => ic_help_pink.png} | Bin assets/images/3.0x/ic_stars.png | Bin 0 -> 1702 bytes assets/images/3.0x/ic_tou.png | Bin 0 -> 3476 bytes assets/images/3.0x/ic_win.png | Bin 0 -> 12785 bytes .../{ic_help_ pink.png => ic_help_pink.png} | Bin assets/images/ic_stars.png | Bin 0 -> 599 bytes assets/images/ic_tou.png | Bin 0 -> 1494 bytes assets/images/ic_win.png | Bin 0 -> 4403 bytes lib/components/logo_header.dart | 45 + lib/components/numpad_button.dart | 24 +- lib/main.dart | 12 + lib/models/board_data.dart | 16 +- lib/models/screen_arguments.dart | 4 +- lib/screens/board/board_screen.dart | 69 +- lib/screens/board/main_board_bloc.dart | 27 +- lib/screens/board/main_board_event.dart | 11 +- lib/screens/gameend/bloc.dart | 3 + lib/screens/gameend/gameend_bloc.dart | 15 + lib/screens/gameend/gameend_event.dart | 4 + lib/screens/gameend/gameend_screen.dart | 116 + lib/screens/gameend/gameend_state.dart | 6 + lib/screens/help/help_screen.dart | 27 +- lib/screens/level/level_screen.dart | 39 +- lib/screens/levelselection/bloc.dart | 3 + .../levelselection/levelselection_bloc.dart | 36 + .../levelselection/levelselection_event.dart | 12 + .../levelselection/levelselection_screen.dart | 146 ++ .../levelselection/levelselection_state.dart | 12 + lib/screens/termofuse/bloc.dart | 3 + lib/screens/termofuse/termofuse_bloc.dart | 15 + lib/screens/termofuse/termofuse_event.dart | 4 + lib/screens/termofuse/termofuse_screen.dart | 137 ++ lib/screens/termofuse/termofuse_state.dart | 6 + lib/test.dart | 196 +- lib/utils/AdMob.dart | 33 + lib/utils/LocalDB.dart | 69 + pubspec.lock | 135 +- pubspec.yaml | 13 +- 51 files changed, 3961 insertions(+), 841 deletions(-) create mode 100644 .flutter-plugins-dependencies create mode 100644 assets/fonts/Viga-Regular.ttf rename assets/images/2.0x/{ic_help_ pink.png => ic_help_pink.png} (100%) mode change 100755 => 100644 create mode 100644 assets/images/2.0x/ic_stars.png create mode 100644 assets/images/2.0x/ic_tou.png create mode 100644 assets/images/2.0x/ic_win.png rename assets/images/3.0x/{ic_help_ pink.png => ic_help_pink.png} (100%) mode change 100755 => 100644 create mode 100644 assets/images/3.0x/ic_stars.png create mode 100644 assets/images/3.0x/ic_tou.png create mode 100644 assets/images/3.0x/ic_win.png rename assets/images/{ic_help_ pink.png => ic_help_pink.png} (100%) mode change 100755 => 100644 create mode 100644 assets/images/ic_stars.png create mode 100644 assets/images/ic_tou.png create mode 100644 assets/images/ic_win.png create mode 100644 lib/components/logo_header.dart create mode 100644 lib/screens/gameend/bloc.dart create mode 100644 lib/screens/gameend/gameend_bloc.dart create mode 100644 lib/screens/gameend/gameend_event.dart create mode 100644 lib/screens/gameend/gameend_screen.dart create mode 100644 lib/screens/gameend/gameend_state.dart create mode 100644 lib/screens/levelselection/bloc.dart create mode 100644 lib/screens/levelselection/levelselection_bloc.dart create mode 100644 lib/screens/levelselection/levelselection_event.dart create mode 100644 lib/screens/levelselection/levelselection_screen.dart create mode 100644 lib/screens/levelselection/levelselection_state.dart create mode 100644 lib/screens/termofuse/bloc.dart create mode 100644 lib/screens/termofuse/termofuse_bloc.dart create mode 100644 lib/screens/termofuse/termofuse_event.dart create mode 100644 lib/screens/termofuse/termofuse_screen.dart create mode 100644 lib/screens/termofuse/termofuse_state.dart create mode 100644 lib/utils/AdMob.dart create mode 100644 lib/utils/LocalDB.dart diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies new file mode 100644 index 000000000..2ebd76c5c --- /dev/null +++ b/.flutter-plugins-dependencies @@ -0,0 +1 @@ +{"_info":"// This is a generated file; do not edit or check into version control.","dependencyGraph":[{"name":"firebase_admob","dependencies":["firebase_core"]},{"name":"firebase_core","dependencies":["firebase_core_web"]},{"name":"firebase_core_web","dependencies":[]},{"name":"flutter_email_sender","dependencies":[]},{"name":"package_info","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_macos","shared_preferences_web"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]},{"name":"webview_flutter","dependencies":[]}]} \ No newline at end of file diff --git a/android/app/build.gradle b/android/app/build.gradle index db820a687..43b6ffecc 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -38,7 +38,7 @@ android { targetSdkVersion 28 versionCode flutterVersionCode.toInteger() versionName flutterVersionName - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { @@ -56,6 +56,6 @@ flutter { dependencies { testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.2' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index e13144b32..852defa27 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,32 +1,37 @@ - + + + + android:icon="@mipmap/ic_launcher" + android:label="sudokubrain"> + + + + + - - + + diff --git a/android/build.gradle b/android/build.gradle index bb8a30389..6de372893 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.2.1' + classpath 'com.android.tools.build:gradle:3.5.3' } } diff --git a/android/gradle.properties b/android/gradle.properties index 1441b1da9..2324ab5b7 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,3 +1,5 @@ org.gradle.jvmargs=-Xmx1536M android.enableR8=true +android.useAndroidX=true +android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 2819f022f..af6030353 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Jun 23 08:50:38 CEST 2017 +#Mon Mar 02 11:39:38 PKT 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip diff --git a/assets/boards/boardbrain.json b/assets/boards/boardbrain.json index 3b964de2c..a22c58071 100644 --- a/assets/boards/boardbrain.json +++ b/assets/boards/boardbrain.json @@ -1,13 +1,1451 @@ { - "easy": [ - [0,0,0,8,0,0,0,0,0], - [7,0,0,0,0,3,1,5,0], - [0,5,6,0,0,0,0,0,0], - [0,0,0,0,0,0,0,0,0], - [0,0,0,0,0,0,0,0,0], - [0,0,0,0,0,0,0,0,0], - [0,0,0,0,0,0,0,0,0], - [0,0,0,0,0,0,0,0,0], - [0,0,0,0,0,0,0,0,0] - ] + "difficulty":{ + "easy":{ + "level":[ + { + "id":1, + "board":[ + [ + 0, + 0, + 0, + 6, + 0, + 0, + 8, + 1, + 5 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 7, + 0 + ], + [ + 6, + 0, + 0, + 1, + 5, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 5, + 0, + 0, + 0 + ], + [ + 5, + 4, + 0, + 7, + 0, + 0, + 3, + 2, + 6 + ], + [ + 7, + 0, + 6, + 2, + 0, + 3, + 0, + 0, + 1 + ], + [ + 3, + 0, + 0, + 0, + 0, + 4, + 9, + 6, + 2 + ], + [ + 8, + 0, + 0, + 9, + 0, + 6, + 5, + 4, + 3 + ], + [ + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 7 + ] + ], + "solution":[ + [ + 4, + 3, + 7, + 6, + 2, + 9, + 8, + 1, + 5 + ], + [ + 1, + 2, + 5, + 3, + 4, + 8, + 6, + 7, + 9 + ], + [ + 6, + 8, + 9, + 1, + 5, + 7, + 2, + 3, + 4 + ], + [ + 2, + 1, + 3, + 4, + 6, + 5, + 7, + 9, + 8 + ], + [ + 5, + 4, + 8, + 7, + 9, + 1, + 3, + 2, + 6 + ], + [ + 7, + 9, + 6, + 2, + 8, + 3, + 4, + 5, + 1 + ], + [ + 3, + 5, + 1, + 8, + 7, + 4, + 9, + 6, + 2 + ], + [ + 8, + 7, + 2, + 9, + 1, + 6, + 5, + 4, + 3 + ], + [ + 9, + 6, + 4, + 5, + 3, + 2, + 1, + 8, + 7 + ] + ] + }, + { + "id":2, + "board":[ + [ + 0, + 0, + 0, + 6, + 0, + 0, + 8, + 1, + 5 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 7, + 0 + ], + [ + 6, + 0, + 0, + 1, + 5, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 5, + 0, + 0, + 0 + ], + [ + 5, + 4, + 0, + 7, + 0, + 0, + 3, + 2, + 6 + ], + [ + 7, + 0, + 6, + 2, + 0, + 3, + 0, + 0, + 1 + ], + [ + 3, + 0, + 0, + 0, + 0, + 4, + 9, + 6, + 2 + ], + [ + 8, + 0, + 0, + 9, + 0, + 6, + 5, + 4, + 3 + ], + [ + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 7 + ] + ], + "solution":[ + [ + 4, + 3, + 7, + 6, + 2, + 9, + 8, + 1, + 5 + ], + [ + 1, + 2, + 5, + 3, + 4, + 8, + 6, + 7, + 9 + ], + [ + 6, + 8, + 9, + 1, + 5, + 7, + 2, + 3, + 4 + ], + [ + 2, + 1, + 3, + 4, + 6, + 5, + 7, + 9, + 8 + ], + [ + 5, + 4, + 8, + 7, + 9, + 1, + 3, + 2, + 6 + ], + [ + 7, + 9, + 6, + 2, + 8, + 3, + 4, + 5, + 1 + ], + [ + 3, + 5, + 1, + 8, + 7, + 4, + 9, + 6, + 2 + ], + [ + 8, + 7, + 2, + 9, + 1, + 6, + 5, + 4, + 3 + ], + [ + 9, + 6, + 4, + 5, + 3, + 2, + 1, + 8, + 7 + ] + ] + }, + { + "id":3, + "board":[ + [ + 0, + 0, + 0, + 6, + 0, + 0, + 8, + 1, + 5 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 7, + 0 + ], + [ + 6, + 0, + 0, + 1, + 5, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 5, + 0, + 0, + 0 + ], + [ + 5, + 4, + 0, + 7, + 0, + 0, + 3, + 2, + 6 + ], + [ + 7, + 0, + 6, + 2, + 0, + 3, + 0, + 0, + 1 + ], + [ + 3, + 0, + 0, + 0, + 0, + 4, + 9, + 6, + 2 + ], + [ + 8, + 0, + 0, + 9, + 0, + 6, + 5, + 4, + 3 + ], + [ + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 7 + ] + ], + "solution":[ + [ + 4, + 3, + 7, + 6, + 2, + 9, + 8, + 1, + 5 + ], + [ + 1, + 2, + 5, + 3, + 4, + 8, + 6, + 7, + 9 + ], + [ + 6, + 8, + 9, + 1, + 5, + 7, + 2, + 3, + 4 + ], + [ + 2, + 1, + 3, + 4, + 6, + 5, + 7, + 9, + 8 + ], + [ + 5, + 4, + 8, + 7, + 9, + 1, + 3, + 2, + 6 + ], + [ + 7, + 9, + 6, + 2, + 8, + 3, + 4, + 5, + 1 + ], + [ + 3, + 5, + 1, + 8, + 7, + 4, + 9, + 6, + 2 + ], + [ + 8, + 7, + 2, + 9, + 1, + 6, + 5, + 4, + 3 + ], + [ + 9, + 6, + 4, + 5, + 3, + 2, + 1, + 8, + 7 + ] + ] + }, + { + "id":4, + "board":[ + [ + 0, + 0, + 0, + 6, + 0, + 0, + 8, + 1, + 5 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 7, + 0 + ], + [ + 6, + 0, + 0, + 1, + 5, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 5, + 0, + 0, + 0 + ], + [ + 5, + 4, + 0, + 7, + 0, + 0, + 3, + 2, + 6 + ], + [ + 7, + 0, + 6, + 2, + 0, + 3, + 0, + 0, + 1 + ], + [ + 3, + 0, + 0, + 0, + 0, + 4, + 9, + 6, + 2 + ], + [ + 8, + 0, + 0, + 9, + 0, + 6, + 5, + 4, + 3 + ], + [ + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 7 + ] + ], + "solution":[ + [ + 4, + 3, + 7, + 6, + 2, + 9, + 8, + 1, + 5 + ], + [ + 1, + 2, + 5, + 3, + 4, + 8, + 6, + 7, + 9 + ], + [ + 6, + 8, + 9, + 1, + 5, + 7, + 2, + 3, + 4 + ], + [ + 2, + 1, + 3, + 4, + 6, + 5, + 7, + 9, + 8 + ], + [ + 5, + 4, + 8, + 7, + 9, + 1, + 3, + 2, + 6 + ], + [ + 7, + 9, + 6, + 2, + 8, + 3, + 4, + 5, + 1 + ], + [ + 3, + 5, + 1, + 8, + 7, + 4, + 9, + 6, + 2 + ], + [ + 8, + 7, + 2, + 9, + 1, + 6, + 5, + 4, + 3 + ], + [ + 9, + 6, + 4, + 5, + 3, + 2, + 1, + 8, + 7 + ] + ] + } + ] + }, + "medium":{ + "level":[ + { + "id":1, + "board":[ + [ + 0, + 0, + 5, + 0, + 0, + 0, + 3, + 0, + 0 + ], + [ + 0, + 2, + 3, + 0, + 0, + 0, + 6, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 7, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 9, + 0 + ], + [ + 3, + 0, + 0, + 8, + 9, + 7, + 2, + 1, + 4 + ], + [ + 8, + 0, + 9, + 2, + 1, + 0, + 0, + 0, + 0 + ], + [ + 5, + 0, + 7, + 6, + 0, + 1, + 9, + 0, + 0 + ], + [ + 6, + 0, + 0, + 9, + 8, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 7, + 0, + 0, + 4, + 0, + 0 + ] + ], + "solution":[ + [ + 1, + 6, + 5, + 4, + 2, + 8, + 3, + 7, + 9 + ], + [ + 7, + 2, + 3, + 1, + 5, + 9, + 6, + 4, + 8 + ], + [ + 4, + 9, + 8, + 3, + 7, + 6, + 1, + 2, + 5 + ], + [ + 2, + 1, + 4, + 5, + 6, + 3, + 8, + 9, + 7 + ], + [ + 3, + 5, + 6, + 8, + 9, + 7, + 2, + 1, + 4 + ], + [ + 8, + 7, + 9, + 2, + 1, + 4, + 5, + 3, + 6 + ], + [ + 5, + 3, + 7, + 6, + 4, + 1, + 9, + 8, + 2 + ], + [ + 6, + 4, + 1, + 9, + 8, + 2, + 7, + 5, + 3 + ], + [ + 9, + 8, + 2, + 7, + 3, + 5, + 4, + 6, + 1 + ] + ] + }, + { + "id":2, + "board":[ + [ + 0, + 0, + 5, + 0, + 0, + 0, + 3, + 0, + 0 + ], + [ + 0, + 2, + 3, + 0, + 0, + 0, + 6, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 7, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 9, + 0 + ], + [ + 3, + 0, + 0, + 8, + 9, + 7, + 2, + 1, + 4 + ], + [ + 8, + 0, + 9, + 2, + 1, + 0, + 0, + 0, + 0 + ], + [ + 5, + 0, + 7, + 6, + 0, + 1, + 9, + 0, + 0 + ], + [ + 6, + 0, + 0, + 9, + 8, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 7, + 0, + 0, + 4, + 0, + 0 + ] + ], + "solution":[ + [ + 1, + 6, + 5, + 4, + 2, + 8, + 3, + 7, + 9 + ], + [ + 7, + 2, + 3, + 1, + 5, + 9, + 6, + 4, + 8 + ], + [ + 4, + 9, + 8, + 3, + 7, + 6, + 1, + 2, + 5 + ], + [ + 2, + 1, + 4, + 5, + 6, + 3, + 8, + 9, + 7 + ], + [ + 3, + 5, + 6, + 8, + 9, + 7, + 2, + 1, + 4 + ], + [ + 8, + 7, + 9, + 2, + 1, + 4, + 5, + 3, + 6 + ], + [ + 5, + 3, + 7, + 6, + 4, + 1, + 9, + 8, + 2 + ], + [ + 6, + 4, + 1, + 9, + 8, + 2, + 7, + 5, + 3 + ], + [ + 9, + 8, + 2, + 7, + 3, + 5, + 4, + 6, + 1 + ] + ] + } + ] + }, + "hard":{ + "level":[ + { + "id":1, + "board":[ + [ + 0, + 8, + 0, + 0, + 7, + 3, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 6, + 0, + 0, + 0 + ], + [ + 0, + 6, + 0, + 0, + 0, + 9, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 6, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 9, + 0, + 0, + 0, + 6 + ], + [ + 0, + 0, + 0, + 0, + 2, + 4, + 3, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 9, + 7, + 8 + ], + [ + 7, + 4, + 6, + 9, + 0, + 0, + 0, + 0, + 3 + ], + [ + 8, + 9, + 0, + 0, + 0, + 0, + 6, + 1, + 4 + ] + ], + "solution":[ + [ + 2, + 8, + 4, + 1, + 7, + 3, + 5, + 6, + 9 + ], + [ + 1, + 3, + 9, + 2, + 5, + 6, + 4, + 8, + 7 + ], + [ + 5, + 6, + 7, + 4, + 8, + 9, + 1, + 3, + 2 + ], + [ + 9, + 2, + 1, + 3, + 6, + 7, + 8, + 4, + 5 + ], + [ + 4, + 5, + 3, + 8, + 9, + 1, + 7, + 2, + 6 + ], + [ + 6, + 7, + 8, + 5, + 2, + 4, + 3, + 9, + 1 + ], + [ + 3, + 1, + 5, + 6, + 4, + 2, + 9, + 7, + 8 + ], + [ + 7, + 4, + 6, + 9, + 1, + 8, + 2, + 5, + 3 + ], + [ + 8, + 9, + 2, + 7, + 3, + 5, + 6, + 1, + 4 + ] + ] + } + ] + } + } } \ No newline at end of file diff --git a/assets/brain.json b/assets/brain.json index 0859cf216..46b890327 100644 --- a/assets/brain.json +++ b/assets/brain.json @@ -1,613 +1,1451 @@ { - "================= EASY ==================": "", - "easy": [ - [ - 0, - 0, - 0, - 6, - 0, - 0, - 8, - 1, - 5 - ], - [ - 0, - 2, - 0, - 0, - 0, - 0, - 0, - 7, - 0 - ], - [ - 6, - 0, - 0, - 1, - 5, - 0, - 0, - 0, - 0 - ], - [ - 0, - 1, - 0, - 0, - 0, - 5, - 0, - 0, - 0 - ], - [ - 5, - 4, - 0, - 7, - 0, - 0, - 3, - 2, - 6 - ], - [ - 7, - 0, - 6, - 2, - 0, - 3, - 0, - 0, - 1 - ], - [ - 3, - 0, - 0, - 0, - 0, - 4, - 9, - 6, - 2 - ], - [ - 8, - 0, - 0, - 9, - 0, - 6, - 5, - 4, - 3 - ], - [ - 0, - 0, - 0, - 0, - 3, - 0, - 1, - 0, - 7 - ] - ], - "solution_easy": [ - [ - 4, - 3, - 7, - 6, - 2, - 9, - 8, - 1, - 5 - ], - [ - 1, - 2, - 5, - 3, - 4, - 8, - 6, - 7, - 9 - ], - [ - 6, - 8, - 9, - 1, - 5, - 7, - 2, - 3, - 4 - ], - [ - 2, - 1, - 3, - 4, - 6, - 5, - 7, - 9, - 8 - ], - [ - 5, - 4, - 8, - 7, - 9, - 1, - 3, - 2, - 6 - ], - [ - 7, - 9, - 6, - 2, - 8, - 3, - 4, - 5, - 1 - ], - [ - 3, - 5, - 1, - 8, - 7, - 4, - 9, - 6, - 2 - ], - [ - 8, - 7, - 2, - 9, - 1, - 6, - 5, - 4, - 3 - ], - [ - 9, - 6, - 4, - 5, - 3, - 2, - 1, - 8, - 7 - ] - ], - "================= MEDIUM ==================": "", - "medium": [ - [ - 0, - 0, - 5, - 0, - 0, - 0, - 3, - 0, - 0 - ], - [ - 0, - 2, - 3, - 0, - 0, - 0, - 6, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0, - 7, - 0, - 0, - 2, - 0 - ], - [ - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 9, - 0 - ], - [ - 3, - 0, - 0, - 8, - 9, - 7, - 2, - 1, - 4 - ], - [ - 8, - 0, - 9, - 2, - 1, - 0, - 0, - 0, - 0 - ], - [ - 5, - 0, - 7, - 6, - 0, - 1, - 9, - 0, - 0 - ], - [ - 6, - 0, - 0, - 9, - 8, - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 7, - 0, - 0, - 4, - 0, - 0 - ] - ], - "solution_medium": [ - [ - 1, - 6, - 5, - 4, - 2, - 8, - 3, - 7, - 9 - ], - [ - 7, - 2, - 3, - 1, - 5, - 9, - 6, - 4, - 8 - ], - [ - 4, - 9, - 8, - 3, - 7, - 6, - 1, - 2, - 5 - ], - [ - 2, - 1, - 4, - 5, - 6, - 3, - 8, - 9, - 7 - ], - [ - 3, - 5, - 6, - 8, - 9, - 7, - 2, - 1, - 4 - ], - [ - 8, - 7, - 9, - 2, - 1, - 4, - 5, - 3, - 6 - ], - [ - 5, - 3, - 7, - 6, - 4, - 1, - 9, - 8, - 2 - ], - [ - 6, - 4, - 1, - 9, - 8, - 2, - 7, - 5, - 3 - ], - [ - 9, - 8, - 2, - 7, - 3, - 5, - 4, - 6, - 1 - ] - ], - - "================= HARD ==================": "", - "hard": [ - [ - 0, - 8, - 0, - 0, - 7, - 3, - 0, - 0, - 0 - ], - [ - 1, - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0 - ], - [ - 0, - 6, - 0, - 0, - 0, - 9, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0, - 6, - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0, - 9, - 0, - 0, - 0, - 6 - ], - [ - 0, - 0, - 0, - 0, - 2, - 4, - 3, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0, - 0, - 2, - 9, - 7, - 8 - ], - [ - 7, - 4, - 6, - 9, - 0, - 0, - 0, - 0, - 3 - ], - [ - 8, - 9, - 0, - 0, - 0, - 0, - 6, - 1, - 4 - ] - ], - - "solution_hard": [ - [ - 2, - 8, - 4, - 1, - 7, - 3, - 5, - 6, - 9 - ], - [ - 1, - 3, - 9, - 2, - 5, - 6, - 4, - 8, - 7 - ], - [ - 5, - 6, - 7, - 4, - 8, - 9, - 1, - 3, - 2 - ], - [ - 9, - 2, - 1, - 3, - 6, - 7, - 8, - 4, - 5 - ], - [ - 4, - 5, - 3, - 8, - 9, - 1, - 7, - 2, - 6 - ], - [ - 6, - 7, - 8, - 5, - 2, - 4, - 3, - 9, - 1 - ], - [ - 3, - 1, - 5, - 6, - 4, - 2, - 9, - 7, - 8 - ], - [ - 7, - 4, - 6, - 9, - 1, - 8, - 2, - 5, - 3 - ], - [ - 8, - 9, - 2, - 7, - 3, - 5, - 6, - 1, - 4 - ] - ] -} + "difficulty": { + "easy": { + "level": [ + { + "id": 1, + "board": [ + [ + 0, + 0, + 0, + 6, + 0, + 0, + 8, + 1, + 5 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 7, + 0 + ], + [ + 6, + 0, + 0, + 1, + 5, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 5, + 0, + 0, + 0 + ], + [ + 5, + 4, + 0, + 7, + 0, + 0, + 3, + 2, + 6 + ], + [ + 7, + 0, + 6, + 2, + 0, + 3, + 0, + 0, + 1 + ], + [ + 3, + 0, + 0, + 0, + 0, + 4, + 9, + 6, + 2 + ], + [ + 8, + 0, + 0, + 9, + 0, + 6, + 5, + 4, + 3 + ], + [ + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 7 + ] + ], + "solution": [ + [ + 4, + 3, + 7, + 6, + 2, + 9, + 8, + 1, + 5 + ], + [ + 1, + 2, + 5, + 3, + 4, + 8, + 6, + 7, + 9 + ], + [ + 6, + 8, + 9, + 1, + 5, + 7, + 2, + 3, + 4 + ], + [ + 2, + 1, + 3, + 4, + 6, + 5, + 7, + 9, + 8 + ], + [ + 5, + 4, + 8, + 7, + 9, + 1, + 3, + 2, + 6 + ], + [ + 7, + 9, + 6, + 2, + 8, + 3, + 4, + 5, + 1 + ], + [ + 3, + 5, + 1, + 8, + 7, + 4, + 9, + 6, + 2 + ], + [ + 8, + 7, + 2, + 9, + 1, + 6, + 5, + 4, + 3 + ], + [ + 9, + 6, + 4, + 5, + 3, + 2, + 1, + 8, + 7 + ] + ] + }, + { + "id": 2, + "board": [ + [ + 0, + 0, + 0, + 6, + 0, + 0, + 8, + 1, + 5 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 7, + 0 + ], + [ + 6, + 0, + 0, + 1, + 5, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 5, + 0, + 0, + 0 + ], + [ + 5, + 4, + 0, + 7, + 0, + 0, + 3, + 2, + 6 + ], + [ + 7, + 0, + 6, + 2, + 0, + 3, + 0, + 0, + 1 + ], + [ + 3, + 0, + 0, + 0, + 0, + 4, + 9, + 6, + 2 + ], + [ + 8, + 0, + 0, + 9, + 0, + 6, + 5, + 4, + 3 + ], + [ + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 7 + ] + ], + "solution": [ + [ + 4, + 3, + 7, + 6, + 2, + 9, + 8, + 1, + 5 + ], + [ + 1, + 2, + 5, + 3, + 4, + 8, + 6, + 7, + 9 + ], + [ + 6, + 8, + 9, + 1, + 5, + 7, + 2, + 3, + 4 + ], + [ + 2, + 1, + 3, + 4, + 6, + 5, + 7, + 9, + 8 + ], + [ + 5, + 4, + 8, + 7, + 9, + 1, + 3, + 2, + 6 + ], + [ + 7, + 9, + 6, + 2, + 8, + 3, + 4, + 5, + 1 + ], + [ + 3, + 5, + 1, + 8, + 7, + 4, + 9, + 6, + 2 + ], + [ + 8, + 7, + 2, + 9, + 1, + 6, + 5, + 4, + 3 + ], + [ + 9, + 6, + 4, + 5, + 3, + 2, + 1, + 8, + 7 + ] + ] + }, + { + "id": 3, + "board": [ + [ + 0, + 0, + 0, + 6, + 0, + 0, + 8, + 1, + 5 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 7, + 0 + ], + [ + 6, + 0, + 0, + 1, + 5, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 5, + 0, + 0, + 0 + ], + [ + 5, + 4, + 0, + 7, + 0, + 0, + 3, + 2, + 6 + ], + [ + 7, + 0, + 6, + 2, + 0, + 3, + 0, + 0, + 1 + ], + [ + 3, + 0, + 0, + 0, + 0, + 4, + 9, + 6, + 2 + ], + [ + 8, + 0, + 0, + 9, + 0, + 6, + 5, + 4, + 3 + ], + [ + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 7 + ] + ], + "solution": [ + [ + 4, + 3, + 7, + 6, + 2, + 9, + 8, + 1, + 5 + ], + [ + 1, + 2, + 5, + 3, + 4, + 8, + 6, + 7, + 9 + ], + [ + 6, + 8, + 9, + 1, + 5, + 7, + 2, + 3, + 4 + ], + [ + 2, + 1, + 3, + 4, + 6, + 5, + 7, + 9, + 8 + ], + [ + 5, + 4, + 8, + 7, + 9, + 1, + 3, + 2, + 6 + ], + [ + 7, + 9, + 6, + 2, + 8, + 3, + 4, + 5, + 1 + ], + [ + 3, + 5, + 1, + 8, + 7, + 4, + 9, + 6, + 2 + ], + [ + 8, + 7, + 2, + 9, + 1, + 6, + 5, + 4, + 3 + ], + [ + 9, + 6, + 4, + 5, + 3, + 2, + 1, + 8, + 7 + ] + ] + }, + { + "id": 4, + "board": [ + [ + 0, + 0, + 0, + 6, + 0, + 0, + 8, + 1, + 5 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 7, + 0 + ], + [ + 6, + 0, + 0, + 1, + 5, + 0, + 0, + 0, + 0 + ], + [ + 0, + 1, + 0, + 0, + 0, + 5, + 0, + 0, + 0 + ], + [ + 5, + 4, + 0, + 7, + 0, + 0, + 3, + 2, + 6 + ], + [ + 7, + 0, + 6, + 2, + 0, + 3, + 0, + 0, + 1 + ], + [ + 3, + 0, + 0, + 0, + 0, + 4, + 9, + 6, + 2 + ], + [ + 8, + 0, + 0, + 9, + 0, + 6, + 5, + 4, + 3 + ], + [ + 0, + 0, + 0, + 0, + 3, + 0, + 1, + 0, + 7 + ] + ], + "solution": [ + [ + 4, + 3, + 7, + 6, + 2, + 9, + 8, + 1, + 5 + ], + [ + 1, + 2, + 5, + 3, + 4, + 8, + 6, + 7, + 9 + ], + [ + 6, + 8, + 9, + 1, + 5, + 7, + 2, + 3, + 4 + ], + [ + 2, + 1, + 3, + 4, + 6, + 5, + 7, + 9, + 8 + ], + [ + 5, + 4, + 8, + 7, + 9, + 1, + 3, + 2, + 6 + ], + [ + 7, + 9, + 6, + 2, + 8, + 3, + 4, + 5, + 1 + ], + [ + 3, + 5, + 1, + 8, + 7, + 4, + 9, + 6, + 2 + ], + [ + 8, + 7, + 2, + 9, + 1, + 6, + 5, + 4, + 3 + ], + [ + 9, + 6, + 4, + 5, + 3, + 2, + 1, + 8, + 7 + ] + ] + } + ] + }, + "medium": { + "level": [ + { + "id": 1, + "board": [ + [ + 0, + 0, + 5, + 0, + 0, + 0, + 3, + 0, + 0 + ], + [ + 0, + 2, + 3, + 0, + 0, + 0, + 6, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 7, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 9, + 0 + ], + [ + 3, + 0, + 0, + 8, + 9, + 7, + 2, + 1, + 4 + ], + [ + 8, + 0, + 9, + 2, + 1, + 0, + 0, + 0, + 0 + ], + [ + 5, + 0, + 7, + 6, + 0, + 1, + 9, + 0, + 0 + ], + [ + 6, + 0, + 0, + 9, + 8, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 7, + 0, + 0, + 4, + 0, + 0 + ] + ], + "solution": [ + [ + 1, + 6, + 5, + 4, + 2, + 8, + 3, + 7, + 9 + ], + [ + 7, + 2, + 3, + 1, + 5, + 9, + 6, + 4, + 8 + ], + [ + 4, + 9, + 8, + 3, + 7, + 6, + 1, + 2, + 5 + ], + [ + 2, + 1, + 4, + 5, + 6, + 3, + 8, + 9, + 7 + ], + [ + 3, + 5, + 6, + 8, + 9, + 7, + 2, + 1, + 4 + ], + [ + 8, + 7, + 9, + 2, + 1, + 4, + 5, + 3, + 6 + ], + [ + 5, + 3, + 7, + 6, + 4, + 1, + 9, + 8, + 2 + ], + [ + 6, + 4, + 1, + 9, + 8, + 2, + 7, + 5, + 3 + ], + [ + 9, + 8, + 2, + 7, + 3, + 5, + 4, + 6, + 1 + ] + ] + }, + { + "id": 2, + "board": [ + [ + 0, + 0, + 5, + 0, + 0, + 0, + 3, + 0, + 0 + ], + [ + 0, + 2, + 3, + 0, + 0, + 0, + 6, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 7, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 9, + 0 + ], + [ + 3, + 0, + 0, + 8, + 9, + 7, + 2, + 1, + 4 + ], + [ + 8, + 0, + 9, + 2, + 1, + 0, + 0, + 0, + 0 + ], + [ + 5, + 0, + 7, + 6, + 0, + 1, + 9, + 0, + 0 + ], + [ + 6, + 0, + 0, + 9, + 8, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 7, + 0, + 0, + 4, + 0, + 0 + ] + ], + "solution": [ + [ + 1, + 6, + 5, + 4, + 2, + 8, + 3, + 7, + 9 + ], + [ + 7, + 2, + 3, + 1, + 5, + 9, + 6, + 4, + 8 + ], + [ + 4, + 9, + 8, + 3, + 7, + 6, + 1, + 2, + 5 + ], + [ + 2, + 1, + 4, + 5, + 6, + 3, + 8, + 9, + 7 + ], + [ + 3, + 5, + 6, + 8, + 9, + 7, + 2, + 1, + 4 + ], + [ + 8, + 7, + 9, + 2, + 1, + 4, + 5, + 3, + 6 + ], + [ + 5, + 3, + 7, + 6, + 4, + 1, + 9, + 8, + 2 + ], + [ + 6, + 4, + 1, + 9, + 8, + 2, + 7, + 5, + 3 + ], + [ + 9, + 8, + 2, + 7, + 3, + 5, + 4, + 6, + 1 + ] + ] + } + ] + }, + "hard": { + "level": [ + { + "id": 1, + "board": [ + [ + 0, + 8, + 0, + 0, + 7, + 3, + 0, + 0, + 0 + ], + [ + 1, + 0, + 0, + 0, + 0, + 6, + 0, + 0, + 0 + ], + [ + 0, + 6, + 0, + 0, + 0, + 9, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 6, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 9, + 0, + 0, + 0, + 6 + ], + [ + 0, + 0, + 0, + 0, + 2, + 4, + 3, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 9, + 7, + 8 + ], + [ + 7, + 4, + 6, + 9, + 0, + 0, + 0, + 0, + 3 + ], + [ + 8, + 9, + 0, + 0, + 0, + 0, + 6, + 1, + 4 + ] + ], + "solution": [ + [ + 2, + 8, + 4, + 1, + 7, + 3, + 5, + 6, + 9 + ], + [ + 1, + 3, + 9, + 2, + 5, + 6, + 4, + 8, + 7 + ], + [ + 5, + 6, + 7, + 4, + 8, + 9, + 1, + 3, + 2 + ], + [ + 9, + 2, + 1, + 3, + 6, + 7, + 8, + 4, + 5 + ], + [ + 4, + 5, + 3, + 8, + 9, + 1, + 7, + 2, + 6 + ], + [ + 6, + 7, + 8, + 5, + 2, + 4, + 3, + 9, + 1 + ], + [ + 3, + 1, + 5, + 6, + 4, + 2, + 9, + 7, + 8 + ], + [ + 7, + 4, + 6, + 9, + 1, + 8, + 2, + 5, + 3 + ], + [ + 8, + 9, + 2, + 7, + 3, + 5, + 6, + 1, + 4 + ] + ] + } + ] + } + } +} \ No newline at end of file diff --git a/assets/fonts/Viga-Regular.ttf b/assets/fonts/Viga-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a4be8f12e0a87b24de16baf99d3cde699ef89f9d GIT binary patch literal 25524 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 IBl&m#4`=ewwg3PC literal 0 HcmV?d00001 diff --git a/assets/images/2.0x/ic_help_ pink.png b/assets/images/2.0x/ic_help_pink.png old mode 100755 new mode 100644 similarity index 100% rename from assets/images/2.0x/ic_help_ pink.png rename to assets/images/2.0x/ic_help_pink.png diff --git a/assets/images/2.0x/ic_stars.png b/assets/images/2.0x/ic_stars.png new file mode 100644 index 0000000000000000000000000000000000000000..ea06b42ccb2ca60eee78cc4ace290e77b56cc7a0 GIT binary patch literal 1189 zcmV;W1X}xvP)Xi>!u(4sG;&?H6Q;v3i}sB?nYH?U7&g(s;&7)kOUe52l1nZvm2mq3dN8?Ma(2F*@0&HyP|$B{Teyp$^R){)X}1xG2n__i zYd--Y#+T7H0@2985RC#->SqL^nSo6L+6bj%;{v0%?byU*WJ}%Q8 zwVosk4{QuNUEO7V>@(GZ-Gm2+98_0=l0Rw%M(@_P)#KqWrN_%2T8WPNwJ~lDlps|* z>c`>h>8rte%zmWi3{-&nDH*7TA3BiLy&d#$W!C3|5`-6zd-@oGP!ET@FxcVc86Xs- z_IRF6SuEG>pumKJ)*Vbcgo>~fzA~GTRj>B;0SC3I9{v8JaDG&TrJ!VM9Ml(StiDU$ zqXy`F^~9-PE?lLZyev(l<#@?~tz0SIz@+^fldS0dI+?ohzC2ORL(9H<;2$=R$UH|H zoj|K?Xe|vNr=InJ=vTn>dBpb2_&*`VAUtDQZ&Vr1Esf}5&pT}Xg6gmiSniKDc9xwj zR{sMiN5LQ+qYfhYg?r|GYO9QQ%-v(Qi`A?-#m@XnyS!nh zOb5w;gQV`yIvln63+&Z)=NAtY&^_F`&YxC;pS15;`ECg#z z&o^+EhN4Z;PSJCj9n(h;cGwHWbo2|f(g(!@NHTH=6Rq3TE)kSPI;w^SFLBA#^E{W? zvEk-5gFJLB%ov?NV9lZ~if0(8ABG)N1f8wE;4BS%4#N4YWUm#yQjb2YBlok49$wKG zjys&8sY)3d7#EeY)id||{zj5FM?MwBVN9k;ECnvp`!K9=iYAi5`W2tbyr^^vM%~8(P%C2s+YQLE zR}Mz9!I@DBK6C5ySK71HOtYJ@$)fME04(MB&Cw|g_!p19AV>#&Sl+p!oRdU2g8M5b z%`BOo?JR0yX@Lo(igK|iKC&b3>tJ58U8-!grcry3RRXb#&tJ;Yok1BaH)H${bEgF> z(Gge0(*E0$bqd!(@lgUz_L0%IZpoGsSa!r_#9@gK)Oi{91}GiI!q00000NkvXXu0mjf DgX=e( literal 0 HcmV?d00001 diff --git a/assets/images/2.0x/ic_tou.png b/assets/images/2.0x/ic_tou.png new file mode 100644 index 0000000000000000000000000000000000000000..d44e6488b5d1c23d8335edec6da092577a0a7581 GIT binary patch literal 2551 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 literal 0 HcmV?d00001 diff --git a/assets/images/3.0x/ic_help_ pink.png b/assets/images/3.0x/ic_help_pink.png old mode 100755 new mode 100644 similarity index 100% rename from assets/images/3.0x/ic_help_ pink.png rename to assets/images/3.0x/ic_help_pink.png diff --git a/assets/images/3.0x/ic_stars.png b/assets/images/3.0x/ic_stars.png new file mode 100644 index 0000000000000000000000000000000000000000..2a5fe0c267e0f36c25d3fc69ba0e08bcffbfd6a5 GIT binary patch literal 1702 zcmV;X23h%uP)h7$lMuzUi<3D7PT0|nV+6@jV@ zo0ysQd)*S~r)Q>n)QyHgUzLm{%{0TC_r0I*^#D8rh|`6tI0-}W01nRqOuT^?d;>h- znHUhNz}Omi0E3c4d=6KD2Pg8)m*^#1?R3B)%I|@^kGdXcTz&)gQ`ZBHOHJVc`u5#T51ivkR1ICyxXctz zrm904m(qYK^zFeJjmznQK~T*&B7_&P0uE441Da5jb0;(|WFaj+&u^d+-a~#=43E2n zJYb>&cWj6K)@~HG6OnOjmLK8OR-i}_q6K$xo&Daqq_>5ou)M$^UWFJAp*YxM%U7#C z;}N_XP@INU7z1pv(_ydM8+g~ZByA=J{M~}p*i!r5@HgHJsN$HTK)rmm3;&}xg1Cgo zM-#rrt8DqdrtV8G29z~cfJs2G3OEAMhAmw!;+i|~SP*Ory{^_z*=wZL10Q}DRoKs+f50QO%CjxLMvG~& zE(ux>6c=GA{+?gAX}BeIgR#1YF%XR3*UsdN*IENo{RLc9;D_KEr}`)2Y<^!Fl#G;w zIj$1NFm7QHd_$)^+k)lO2vaGHhNCR>cIb>tG*k-{#W9GuNx@dNUBQKRkr*~Ht{i|z zi1Sz17{A7gxA=FlU)$C!iA$T&cMo5` z;43}O<)E=~86%B2$4|zNHR`vjI2xlt0S#(cw2oX;CVi>4<2${M0u$mk-pKSy!IH+t zg|zgVnAgDtRJLB1H6zw<;(Y!Zjd3LFNIN9cmvlQN0^G-6*#=_0m)-{QDp^XPjCZDBtJ&*AuXxHf=NVlumtS9SJ zoz8g6H%-@=0b9%l@3kFAHkxEOw%l%l3lM!p_x~gU7)VdrWfaX92NH}0jjbpw&O)SZ zU|+OGP^SqNIKl&cNw>oRPtGi^UpL;D<(lC(I6Dfn-~;3VkKE2P6n*z>bUUMEiT+Aw zY?$t5HKwpQUqI@jz>o(bsDMidc9=VMW}r*yy7Weq<4q1yMKtPd+Llcgt61sB9gH1% z5B1y+PZDMxs1nDp@tU%hx{Vub^-59{?^>8p>HF@7Cx%P|cDsX(?mILTJ46aKbQGdW zACIq$s5e~pp`}E&2g>nem!>z-ZdPWZnF2QWe`IVgD-BW&C<7@8qPDdg$4nNX@Bpl$ z7V7@=0E*8p)t$nC{xEU&>H^z7fnvc0ctW?WoEW@q?NI7XT$g)VJk5t?X~m%2p@NbS zc_BE4@^JL-v-xY7AiQsHlMOrez~bM~Z6>DDN+I<1Ebx;BZHr4Aq4vD`{^k1SSioM5 zc??kNHw#CYd`SAIg8jHB{Xgvd>O1}hUgE!AcRwVdxLbU6^9vfGl6nn8O0;9O#|DLd zT2njN*8`R92n&5^xqhHJ3x$8&m4;0KiL(#Q2{=OKNc%f+?0ST%L-7rGfibVYtFb$~ z0}|r%>~)iWeg@^JVK!jD8<}?5vqLHW^ZIyftZ})UDz0Szhzi;93x2q%bTCz zVRyvTfFn?I7;NR3eyc_hZ9>c|J>{GFVc(nCpA<|KmI2Y0cIr<6#eG`SASuW$g9hPJ wv~@gtHpG*EV*P&KA}jCcbc!jan4+lo2HJVjhmCb>3;+NC07*qoM6N<$f=@pecmMzZ literal 0 HcmV?d00001 diff --git a/assets/images/3.0x/ic_tou.png b/assets/images/3.0x/ic_tou.png new file mode 100644 index 0000000000000000000000000000000000000000..b1774874ed04730b9ab2b431bcc22e07118f1305 GIT binary patch literal 3476 zcmds4`8O2YAD*!_7#R$W?TztTl4UGqEkk5)8kDl6Ar+~?WZ#!zNJs`*@-`-hEG6>V z8jP}JHF%8C- zq42>APa2S9XPIM&fW-ARH8w)o9H+ z&wbiiu=e!Ut7l_lu6!I8l&bH&qFUl11=^xSG3V@);m$94g}BmX6cWlaPdg3k8yVo@ zP7cSGCEmYsz4BcyR3jevX8iP=|D&zV<6f?G6KFqkTOsW)BE?*g-9c!m-14*pMMR{) zE+vI-BVhjC?mMNB{?e)rB%hp@Xt#e}#enZ( z3YWo3syG5^|Ed5zdho-i@R;1io>UZVvdfPZg(}Rgz|Z6HALc*spGa2!B?;;q5c2Nz zgz~fzlIr#i70>THKVS%v8E?NI>~+L(E_<6wpiHaGgXogu6%u+1yzYKdA1G;c zLQsGm_=!2+J620 zc+Audxof@vHe=Wd=)Ei&aLOV`RV<0ywVafWi|}+<01T zx^P3F*S^;?1ui)rGIE_iHMWfa>}r4HBkyG%bVW6}@mb+94AS2heBk!D@-wl|nhpxx zDc}cjvInW)WaDZ!MdA)P4#Ly^vdjEg;Bob`UUEAEglU;=Z+fuKi9y!r@~D;;H+U;9 zX@J?I^_Z(t@&E~&Jl^pSe%G*cg~tfO6Yo)M75gsJZb#de*cXRrp+Z$jaV9Xt`RB?3 z@!yu!0#>{Vl?#qxTE^_&6OQv?Y&y5hUp94LHon^(^?Q`M5U>(v^_nrC=P+XFvY&1W zqRAdoGWRj5o8(ZSg)ugR4DavSnxA2m_QZZyQ_Zk)f@!_}^i zBc2>P?RF9}*Mv>C@d9w}R!vOmG!DOJp5@gN{YU}qUZ|g8QZewHnl0^;EHxEgu|rVM&xng&yhuIWGGq`~zylXyLX zS^cP8L!*BF+d#uDAb7d3rlhvaHFCfkV(LDPNofT9wKwNOgNIJT`Dt7Oy_YwF*_!6j zaDVy|ecXCkq1fuFs3mMQig-4YZ*w|xefC3zrnMT%vddb4Zx8Co6xQFj{q(*vI=1tl*_gj|f2Yh|J z=`U_x28Zf`MYyqsM34e94_%}buac1^nb~DGw{gg`7CoAzn^ie|`TSjBT@fX)=@URK zUz57S@aG=0=alUO;y}CP(QjZd=?OEt8|E-!WVzsb1{%yVqc)d4<+XVueIp zEpfY(;3tK@2z^V|IouT6vDPv;lo0130n$A8JjHfQhJR|KsO1VDPr%8 zbeM8U8xjg>Y1zJa7bTCohML)4F@?>SHO4Va3{Zg9<}dc*Igu}yGP4TX5NHS~+Jd~6 zDW=X2UL|vA>0;eWoz|%+ zp{*zj9h^jSdO>)|8cK)eBeD0sz-O9M90!zAOo53E(kJ@72Xw>Twj!nqyon`_0jzG} zXGr&GZbXW#y5?Aa@GJ;wPLWLi?Y081=H9E}i5Bu8IW@cr?%jy&?LVPcuNAe3Oqf3s zXGPHYCv|00y0#ier)GCFQUy0y>z<_wN#`Z%SuGqe_vxT2+7f?*{ z19m&Du=#jXCmM_(CXecdN%y&-d1aRN!ldU3S0d>PGT0uqF zggnha-vR@)2ko33m9dPi_dy_!~?4tf!#Bk2f+qMYHX;x5T;n^ z$xk!iI8R`ru_YyLx6wy-8m+_X*vv_4P{cQNBn;wor0Dzj;w9?zxcy+RGCA_gc38>7 zc;FL4*xrZ%*ZB3kFRM5}>}wR2#6F}EpwE9^T(8$k)Ay7!!vm3qXNF+O z5O~WQA=yo?7qZ}EyOhh1q=MxaZa#Isrx=xeJ+U;CQ|hCdeEgX7e_AbJpgb4z1EW&r zny-=rUPe293VYm~INE$?H{-5e@v0U3)Y%$U%zW$TO)$`vZ-0Yj z%t-sn2fszldI{H5o*oL)vnf}VGJy$&_!~H8nE05AS*R1Fwd{ocM0UIK!(?+(hD@`t zzOa^OMom#;S;9R{5+0$@Y4esYB>M2Gn0(SJvMAOi*l}?#@qF!ASdpX^p@VEXqcmLM efjOslbZoNz_c_85X@LES0$7?|GOaYZ8T&u3m{h?4 literal 0 HcmV?d00001 diff --git a/assets/images/3.0x/ic_win.png b/assets/images/3.0x/ic_win.png new file mode 100644 index 0000000000000000000000000000000000000000..ab8e399c3a81a48aadd997ce0f50a85d5a8e9cf8 GIT binary patch literal 12785 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 literal 0 HcmV?d00001 diff --git a/assets/images/ic_help_ pink.png b/assets/images/ic_help_pink.png old mode 100755 new mode 100644 similarity index 100% rename from assets/images/ic_help_ pink.png rename to assets/images/ic_help_pink.png diff --git a/assets/images/ic_stars.png b/assets/images/ic_stars.png new file mode 100644 index 0000000000000000000000000000000000000000..9d7ce55f3b4de54236023b75679f6cbb0050c6ec GIT binary patch literal 599 zcmV-d0;v6oP)xN#*)0>%Z-l-12A z4A6rRB)+6)GX1Gn_4;)WFh}rnA|ExbFgGGMBhe192r`h$%G2XlcLRS;rm%0`pDJgc zG6(RZn*>wFd=Ty1<`HHIyrgbqX>y8XXK4B-k(F^dksa=%okk5#uxkQLPOTx20&Ud~ zX}8g^R%R+#c5Z01p0du-R#$v%sqz+WzhIKsN5!UEc^U&uy` zudwOo28lvsKui-^jOPxg27MM(>3La|bwnb)4UsL18v=UKwrCD5#f5`iaEAgTsE5%Q&^P@5!gV+F3 zR^)g=%TMVu!Bq+5tDBSwMVX&X?9DpgT&}f3{opyn?K`~@sh8}$}A&?;?J*6pEEsD!yyv=z&_htN}d z%kme*=|A8tsgzTQRf!)q-g$kqjKOwoY+$`>Tl+!A)_B(5_ucnq-kb3<7*Sq-YUFf{ zFCju!Alth8^IPYt{tQM4X}qTKM zv0Rt#9(hN;op%hS5YqT@om-6IqaKWJN1;*;yrW!i&|!!O;-0Z}1eTSqk2k%JNTHL4 zEqXOPLbS#`!tJRsv7Gs-d8`;nAxfVcW?JwidTEj2CP?c;3S#=G{OoplueE((#)uH& zzAFNOrqRQdcJIY1L=f|w?;Muj!PMlGnM$Rgf1vl__Pb1{cVi6=jq^?E`hqUi(eW|# zPYCoX9Otj)_Z*tU~k^lv5+_`6w2lok2@Cre$PleQ$5W>CpOWB2661fm3FD+AOkYxzwzrX%r z;OSZK2b1xF!!G(_FAU=w>6;LZ1~Ue8jLUTa$`Wa&2u5g`!KB6jdJ%$LzsC5MKjphO zb^UJKN(g*u8K-2JuR%^4%o*ILc_>GVA#z&0G+6emBbz;)65AvH-BkqGQigxCy2NBXF zgcJeJJ;8*CIZKZl6nRu4^A)PbAb+soF~B0Ny6y{JE86#-y3j{1gs6)EF^JFsla}I4 z8kZIr>LkpMvUVuaSh5dXxKOK**Vv)WCV>zGC_)=hPRTjOcn*-SgGS=~y-{S06=gUH zepa;aeqDqcq7R1%9iSNv0ck8_789vkg_BNyJF$qsz=P^pka$6Ow1m@!Y;$Si3%tgj z{c^9y z`^t9*&rIQuE!&yZ3ygi!QO*idM4|fEbw5* zYmOFn`dRmwz-fmKVx%!N$XM^eZ_u_3msgB@hJ+E6S+Y55%0W0#XaEhGYwl1i-l_pj zJ}wd>yR?zxwERa3eu9B8c&)^YrujUGqe8u2848c+gAry%aipZDq-&lr;8y4)`!72@FW`wKeaPV0T!QV3nsV0wBQE>BEYA8eO*AtE9T z4IOZ^RfOOqXm=-_PB*n7@B&0g#2Y+VZs&wEGcz6fMn|L`!8k6;TMxVU?0$P<*u=8; w`OjyD#ksZw0<#UF;>lmuQrmu1_h>ZoA5!#T-jg literal 0 HcmV?d00001 diff --git a/assets/images/ic_win.png b/assets/images/ic_win.png new file mode 100644 index 0000000000000000000000000000000000000000..9be59f525c11a2357b32e5cb9e2e36902fbf3310 GIT binary patch literal 4403 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 literal 0 HcmV?d00001 diff --git a/lib/components/logo_header.dart b/lib/components/logo_header.dart new file mode 100644 index 000000000..57b87c7b4 --- /dev/null +++ b/lib/components/logo_header.dart @@ -0,0 +1,45 @@ +import 'package:flutter/material.dart'; + +class LogoHeader extends StatelessWidget { + const LogoHeader({ + Key key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Expanded( + flex: 2, + child: Row( + children: [ + Spacer(), + GestureDetector( + onTap: () { + print('back level'); + Navigator.pop(context); + }, + child: Image( + image: AssetImage('assets/images/ic_back.png'), + ), + ), + Spacer(), + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image( + image: AssetImage('assets/images/header.png'), + ), + SizedBox( + height: 7.0, + ), + Image( + image: AssetImage('assets/images/subheader.png'), + ), + ], + ), + Spacer(), + Spacer(), + ], + ), + ); + } +} diff --git a/lib/components/numpad_button.dart b/lib/components/numpad_button.dart index 32371500f..c6a302d32 100644 --- a/lib/components/numpad_button.dart +++ b/lib/components/numpad_button.dart @@ -20,14 +20,24 @@ class NumPadButton extends StatelessWidget { color: Colors.transparent, border: Border.all(width: 2.0, color: Color(kNumPadBorder))), child: Center( - child: Text( - '$value', - style: TextStyle( - fontSize: 20.0, - color: Color(kNumPadBorder), - fontWeight: FontWeight.bold), - ), + child: getWidget(value), )), ); } + + Widget getWidget(int value) { + if (value == 10) { + return Image( + image: AssetImage('assets/images/ic_stars.png'), + ); + } else { + return Text( + '$value', + style: TextStyle( + fontSize: 20.0, + color: Color(kNumPadBorder), + fontWeight: FontWeight.bold), + ); + } + } } diff --git a/lib/main.dart b/lib/main.dart index 92317eb75..3515049f8 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,12 +2,16 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:sudoku_brain/screens/board/board_screen.dart'; import 'package:sudoku_brain/screens/board/main_board_bloc.dart'; +import 'package:sudoku_brain/screens/gameend/bloc.dart'; +import 'package:sudoku_brain/screens/gameend/gameend_screen.dart'; import 'package:sudoku_brain/screens/help/bloc.dart'; import 'package:sudoku_brain/screens/help/help_screen.dart'; import 'package:sudoku_brain/screens/home/bloc.dart'; import 'package:sudoku_brain/screens/home/home_screen.dart'; import 'package:sudoku_brain/screens/level/bloc.dart'; import 'package:sudoku_brain/screens/level/level_screen.dart'; +import 'package:sudoku_brain/screens/levelselection/levelselection_bloc.dart'; +import 'package:sudoku_brain/screens/levelselection/levelselection_screen.dart'; import 'package:sudoku_brain/screens/settings/bloc.dart'; import 'package:sudoku_brain/screens/settings/settings_screen.dart'; import 'package:sudoku_brain/screens/tutorial/bloc.dart'; @@ -52,6 +56,14 @@ class MyApp extends StatelessWidget { create: (BuildContext context) => SettingsBloc(), child: SettingsScreen(), ), + GameEndScreen.id: (context) => BlocProvider( + create: (BuildContext context) => GameendBloc(), + child: GameEndScreen(), + ), + LevelSelection.id: (context) => BlocProvider( + create: (BuildContext context) => LevelSelectionBloc(), + child: LevelSelection(), + ), }, ); } diff --git a/lib/models/board_data.dart b/lib/models/board_data.dart index 8751f9998..705628e7b 100644 --- a/lib/models/board_data.dart +++ b/lib/models/board_data.dart @@ -5,5 +5,19 @@ class BoardData { PlayMode mode; List pencilValues = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - BoardData({this.value, this.mode}); + BoardData({this.value, this.mode, this.pencilValues}); + + BoardData.fromJson(Map json) { + value = int.parse(json['value']); + mode = json['mode']; + pencilValues = json['pencilValues']; + } + + Map toJson() { + final Map data = new Map(); + data['value'] = this.value; + data['mode'] = this.mode; + data['pencilValues'] = this.pencilValues; + return data; + } } diff --git a/lib/models/screen_arguments.dart b/lib/models/screen_arguments.dart index ba5b6ebd6..259b7be48 100644 --- a/lib/models/screen_arguments.dart +++ b/lib/models/screen_arguments.dart @@ -2,6 +2,8 @@ import 'package:sudoku_brain/utils/Enums.dart'; class ScreenArguments { LevelTYPE levelTYPE; + String levelName; + int index; - ScreenArguments({this.levelTYPE}); + ScreenArguments({this.levelTYPE, this.levelName, this.index}); } diff --git a/lib/screens/board/board_screen.dart b/lib/screens/board/board_screen.dart index 9a4b3f92b..4857c7d3e 100644 --- a/lib/screens/board/board_screen.dart +++ b/lib/screens/board/board_screen.dart @@ -1,4 +1,5 @@ import 'dart:collection'; +import 'dart:convert'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -10,8 +11,10 @@ import 'package:sudoku_brain/components/timer_widget.dart'; import 'package:sudoku_brain/models/board_data.dart'; import 'package:sudoku_brain/models/row_col.dart'; import 'package:sudoku_brain/models/screen_arguments.dart'; +import 'package:sudoku_brain/utils/AdMob.dart'; import 'package:sudoku_brain/utils/Constants.dart'; import 'package:sudoku_brain/utils/Enums.dart'; +import 'package:sudoku_brain/utils/LocalDB.dart'; import 'package:sudoku_brain/utils/Strings.dart'; import 'main_board_bloc.dart'; @@ -25,15 +28,17 @@ class MainBoard extends StatefulWidget { _MainBoardState createState() => _MainBoardState(); } -class _MainBoardState extends State { +class _MainBoardState extends State with WidgetsBindingObserver { MainBoardBloc _mainBoardBloc; int _row = -1; int _col = -1; int _cursor = 0; int _cursorCopy = -1; + int _levelIndex = 0; String _dynamicText; + String _levelName; double _animatedHeight = 50.0; @@ -46,7 +51,9 @@ class _MainBoardState extends State { @override void initState() { + AdMobIntegration.initAd(); super.initState(); + WidgetsBinding.instance.addObserver(this); _mainBoardBloc = BlocProvider.of(context); } @@ -176,7 +183,10 @@ class _MainBoardState extends State { break; case 2: _mainBoardBloc.add(ResetBoard( - list: _initBoardList, buildContext: context)); + list: _initBoardList, + buildContext: context, + index: _levelIndex, + levelName: _levelName)); break; case 3: _mainBoardBloc.add(Hint(row: _row, col: _col)); @@ -200,12 +210,12 @@ class _MainBoardState extends State { }, ), NumPad( - values: [6, 7, 8, 9], + values: [6, 7, 8, 9, 10], marginTop: 15.0, - marginRight: 35.0, - marginLeft: 35.0, + marginRight: 30.0, + marginLeft: 30.0, marginBottom: 0.0, - mainAxisAlignment: MainAxisAlignment.spaceEvenly, + mainAxisAlignment: MainAxisAlignment.spaceAround, onValueChanged: (int val) { if (!_isTimerPaused) _numPadButtonClick(val); }), @@ -430,8 +440,51 @@ class _MainBoardState extends State { void initBoardData() { final ScreenArguments args = ModalRoute.of(context).settings.arguments; - _mainBoardBloc - .add(BoardInitISCalled(context: context, levelTYPE: args.levelTYPE)); + _mainBoardBloc.add(BoardInitISCalled( + context: context, levelName: args.levelName, index: args.index)); _mainBoardBloc.add(StartTimer()); + + _levelIndex = args.index; + _levelName = args.levelName; + } + + @override + void didChangeAppLifecycleState(AppLifecycleState state) { + print('state: $state'); + if (state == AppLifecycleState.paused) { +// var json = jsonEncode(_boardList, toEncodable: (e) => e.toJsonAttr()); + var json = jsonEncode(_boardList.map((e) => e.toString()).toList()); + print('json: $json'); + LocalDB.setString(LocalDB.keyBoardList, json); + } else if (state == AppLifecycleState.resumed) { + LocalDB.getString(LocalDB.keyBoardList).then((value) async { + if (value != null && value.isNotEmpty) { + List data = json.decode(value); + print('data: ${data[0]}'); + + List> test = []; + for (int i = 0; i < data.length; i++) { + List innerList = data[i]; + List dataList = []; + for (int j = 0; j < innerList.length; j++) { +// var value=decodedData['${innerList[j]}']; + +// dataList.add(BoardData( +// value: boardData.value, mode: boardData.mode)); + } + test.add(dataList); + } + + print('test: ${test[0][0].mode}'); + } + }); + } + } + + @override + void dispose() { + AdMobIntegration.dispose(); + WidgetsBinding.instance.removeObserver(this); + super.dispose(); } } diff --git a/lib/screens/board/main_board_bloc.dart b/lib/screens/board/main_board_bloc.dart index 1140587dc..f4182a745 100644 --- a/lib/screens/board/main_board_bloc.dart +++ b/lib/screens/board/main_board_bloc.dart @@ -4,13 +4,11 @@ import 'dart:convert'; import 'package:bloc/bloc.dart'; import 'package:collection/collection.dart'; -import 'package:enum_to_string/enum_to_string.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:sudoku_brain/models/board_data.dart'; import 'package:sudoku_brain/models/row_col.dart'; -import 'package:sudoku_brain/utils/Constants.dart'; import 'package:sudoku_brain/utils/Enums.dart'; import './bloc.dart'; @@ -38,16 +36,19 @@ class MainBoardBloc extends Bloc { MainBoardEvent event, ) async* { if (event is BoardInitISCalled) { + print('BoardInitISCalled'); + yield FetchingLevel(); - final list = await _readJson(event.context, EnumToString.parse(event.levelTYPE).toLowerCase()); - yield LevelFetched(boardList: list); + final list = await _readJson(event.context, event.levelName, event.index); + yield LevelFetched(boardList: list); - final listNew = await _readJson(event.context, EnumToString.parse(event.levelTYPE).toLowerCase()); + final listNew = + await _readJson(event.context, event.levelName, event.index); yield InitStateFetched(boardList: listNew); - _solution = await _readJson(event.context, 'solution_${EnumToString.parse(event.levelTYPE).toLowerCase()}'); + _solution = await _readJson( + event.context, 'solution_${event.levelName}', event.index); print('_solution" $_solution'); - } else if (event is ChangeConflictsCalled) { final conflicts = _changeConflicts(event.list); final gameFinished = _gameFinished(event.list); @@ -74,7 +75,7 @@ class MainBoardBloc extends Bloc { _isPaused = true; yield (PauseTimerState(isPaused: _isPaused)); } else if (event is ResetBoard) { - final list = await _readJson(event.buildContext, 'easy'); + final list = await _readJson(event.buildContext, event.levelName, event.index); yield ResetState(boardList: list); } else if (event is FullScreen) { final full = fullScreen(); @@ -128,16 +129,16 @@ class MainBoardBloc extends Bloc { // Read data from JSON File Future>> _readJson( - BuildContext context, String objName) async { - print('readJson'); + BuildContext context, String objName, int index) async { + print('readJson level'); String data = await DefaultAssetBundle.of(context).loadString("assets/brain.json"); -// print('data: $data'); + print('objName: $objName'); var decodedData = jsonDecode(data); - List list = decodedData['$objName']; - print('list: $list'); + List list = decodedData['difficulty'][objName]['level'][index]['board']; + print('listOld: $list'); List> test = []; for (int i = 0; i < list.length; i++) { diff --git a/lib/screens/board/main_board_event.dart b/lib/screens/board/main_board_event.dart index 8345debae..11ee51390 100644 --- a/lib/screens/board/main_board_event.dart +++ b/lib/screens/board/main_board_event.dart @@ -1,16 +1,17 @@ import 'package:flutter/cupertino.dart'; import 'package:meta/meta.dart'; import 'package:sudoku_brain/models/board_data.dart'; -import 'package:sudoku_brain/utils/Enums.dart'; @immutable abstract class MainBoardEvent {} class BoardInitISCalled extends MainBoardEvent { final BuildContext context; - final LevelTYPE levelTYPE; + final String levelName; + final int index; - BoardInitISCalled({@required this.context, @required this.levelTYPE}); + BoardInitISCalled( + {@required this.context, @required this.levelName, @required this.index}); } class ChangeConflictsCalled extends MainBoardEvent { @@ -49,8 +50,10 @@ class Hint extends MainBoardEvent { class ResetBoard extends MainBoardEvent { final List> list; final BuildContext buildContext; + final int index; + final String levelName; - ResetBoard({this.list, this.buildContext}); + ResetBoard({this.list, this.buildContext, this.index, this.levelName}); } class FullScreen extends MainBoardEvent {} diff --git a/lib/screens/gameend/bloc.dart b/lib/screens/gameend/bloc.dart new file mode 100644 index 000000000..62317abee --- /dev/null +++ b/lib/screens/gameend/bloc.dart @@ -0,0 +1,3 @@ +export 'gameend_bloc.dart'; +export 'gameend_event.dart'; +export 'gameend_state.dart'; \ No newline at end of file diff --git a/lib/screens/gameend/gameend_bloc.dart b/lib/screens/gameend/gameend_bloc.dart new file mode 100644 index 000000000..e1556bb5c --- /dev/null +++ b/lib/screens/gameend/gameend_bloc.dart @@ -0,0 +1,15 @@ +import 'dart:async'; +import 'package:bloc/bloc.dart'; +import './bloc.dart'; + +class GameendBloc extends Bloc { + @override + GameendState get initialState => InitialGameendState(); + + @override + Stream mapEventToState( + GameendEvent event, + ) async* { + // TODO: Add Logic + } +} diff --git a/lib/screens/gameend/gameend_event.dart b/lib/screens/gameend/gameend_event.dart new file mode 100644 index 000000000..399242344 --- /dev/null +++ b/lib/screens/gameend/gameend_event.dart @@ -0,0 +1,4 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class GameendEvent {} diff --git a/lib/screens/gameend/gameend_screen.dart b/lib/screens/gameend/gameend_screen.dart new file mode 100644 index 000000000..fc6c88ef6 --- /dev/null +++ b/lib/screens/gameend/gameend_screen.dart @@ -0,0 +1,116 @@ +import 'package:flutter/material.dart'; +import 'package:gradient_text/gradient_text.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; + +class GameEndScreen extends StatelessWidget { + static String id = 'game_end'; + final bool isGameEnded = false; + +// GameEndScreen({this.isGameEnded}); + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Container( + color: kPrimaryColor, + child: Column( + children: [ + Padding( + padding: EdgeInsets.only( + top: MediaQuery.of(context).size.height * .13), + child: GradientText('EASY', + gradient: LinearGradient(colors: [ + Color(0xFF71DC8F), + Color(0xFF0BB9AD), + ]), + style: TextStyle( + fontFamily: 'Staatliches', + fontSize: 53.0, + letterSpacing: 2.0, + fontWeight: FontWeight.w300, + decoration: TextDecoration.none), + textAlign: TextAlign.center), + ), + CommonText( + text: 'Level 1', + ), + Padding( + padding: EdgeInsets.only( + top: MediaQuery.of(context).size.height * .05), + child: Image( + image: AssetImage('assets/images/ic_win.png'), + ), + ), + Container( + margin: EdgeInsets.only( + top: MediaQuery.of(context).size.height * .05, + bottom: MediaQuery.of(context).size.height * .02), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + CommonText( + text: isGameEnded == true ? 'Total Time' : 'Best Time', + ), + CommonText( + text: '20:45', + ), + ], + ), + ), + Visibility( + visible: isGameEnded, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + CommonText( + text: 'New Best Time', + ), + CommonText( + text: '20:45', + ), + ], + ), + ), + Padding( + padding: EdgeInsets.only( + top: MediaQuery.of(context).size.height * .04), + child: RaisedButton( + padding: EdgeInsets.fromLTRB(30.0, 5.0, 30.0, 5.0), + color: Color(0xFF7EC1FF), + child: Text(isGameEnded == true ? 'NEXT' : 'PLAY AGAIN', + style: TextStyle( + fontFamily: 'Staatliches', + fontSize: 30.0, + color: kPrimaryColor, + fontWeight: FontWeight.w200, + decoration: TextDecoration.none), + textAlign: TextAlign.center), + onPressed: () {}, + ), + ), + ], + ), + ), + ); + } +} + +class CommonText extends StatelessWidget { + final String text; + + CommonText({this.text}); + + @override + Widget build(BuildContext context) { + return Text( + text, + textAlign: TextAlign.left, + style: TextStyle( + fontFamily: 'Rubik', + fontSize: 20.0, + color: Colors.white, + fontWeight: FontWeight.w100, + decoration: TextDecoration.none), + ); + } +} diff --git a/lib/screens/gameend/gameend_state.dart b/lib/screens/gameend/gameend_state.dart new file mode 100644 index 000000000..de164bf1b --- /dev/null +++ b/lib/screens/gameend/gameend_state.dart @@ -0,0 +1,6 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class GameendState {} + +class InitialGameendState extends GameendState {} diff --git a/lib/screens/help/help_screen.dart b/lib/screens/help/help_screen.dart index 573ad6569..7870fdadd 100644 --- a/lib/screens/help/help_screen.dart +++ b/lib/screens/help/help_screen.dart @@ -1,6 +1,9 @@ import 'package:flutter/material.dart'; +import 'package:flutter_email_sender/flutter_email_sender.dart'; +import 'package:package_info/package_info.dart'; import 'package:sudoku_brain/components/gradient_button.dart'; import 'package:sudoku_brain/components/top_container.dart'; +import 'package:sudoku_brain/screens/termofuse/termofuse_screen.dart'; import 'package:sudoku_brain/screens/tutorial/tutorial_screen.dart'; import 'package:sudoku_brain/utils/Constants.dart'; import 'package:sudoku_brain/utils/Logs.dart'; @@ -15,7 +18,7 @@ class HelpScreen extends StatelessWidget { child: Column( children: [ TopContainer( - imagePath: 'assets/images/ic_help_ pink.png', + imagePath: 'assets/images/ic_help.png', text: 'HELP', color: kPrimaryColor, gradient: LinearGradient( @@ -48,8 +51,16 @@ class HelpScreen extends StatelessWidget { gradient: LinearGradient( colors: [Color(0xFF82FFF4), Color(0xFF05AB9C)], ), - onPressed: () { - print('button clicked'); + onPressed: () async { + getVersionName().then((onValue) async { + Logs.printLogs('onValue: $onValue'); + final Email email = Email( + subject: 'Have questions or feedback? v $onValue', + recipients: ['hello@matchalagames.com'], + isHTML: false, + ); + await FlutterEmailSender.send(email); + }); }), SizedBox( height: sizedBoxHeight, @@ -61,6 +72,10 @@ class HelpScreen extends StatelessWidget { ), onPressed: () { print('button clicked'); + Navigator.push( + context, + MaterialPageRoute(builder: (context) => TermsOfUse()), + ); }), ], ), @@ -70,4 +85,10 @@ class HelpScreen extends StatelessWidget { ), ); } + + Future getVersionName() async { + PackageInfo packageInfo = await PackageInfo.fromPlatform(); + String version = packageInfo.version; + return version; + } } diff --git a/lib/screens/level/level_screen.dart b/lib/screens/level/level_screen.dart index 9170e2bca..4720f6b6d 100644 --- a/lib/screens/level/level_screen.dart +++ b/lib/screens/level/level_screen.dart @@ -2,9 +2,11 @@ import 'package:enum_to_string/enum_to_string.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:sudoku_brain/components/gradient_button.dart'; +import 'package:sudoku_brain/components/logo_header.dart'; import 'package:sudoku_brain/models/screen_arguments.dart'; import 'package:sudoku_brain/screens/board/board_screen.dart'; import 'package:sudoku_brain/screens/level/bloc.dart'; +import 'package:sudoku_brain/screens/levelselection/levelselection_screen.dart'; import 'package:sudoku_brain/utils/Constants.dart'; import 'package:sudoku_brain/utils/Enums.dart'; import 'package:sudoku_brain/utils/Logs.dart'; @@ -34,7 +36,7 @@ class _LevelScreenState extends State { listener: (BuildContext context, state) { if (state is SelectedLevelState) { Logs.printLogs('${EnumToString.parse(state.levelTYPE)}'); - Navigator.pushNamed(context, MainBoard.id, + Navigator.pushNamed(context, LevelSelection.id, arguments: ScreenArguments(levelTYPE: state.levelTYPE)); } }, @@ -46,40 +48,7 @@ class _LevelScreenState extends State { child: Column( children: [ - Expanded( - flex: 2, - child: Row( - children: [ - Spacer(), - GestureDetector( - onTap: () { - print('back level'); - Navigator.pop(context); - }, - child: Image( - image: AssetImage('assets/images/ic_back.png'), - ), - ), - Spacer(), - Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Image( - image: AssetImage('assets/images/header.png'), - ), - SizedBox( - height: 7.0, - ), - Image( - image: AssetImage('assets/images/subheader.png'), - ), - ], - ), - Spacer(), - Spacer(), - ], - ), - ), + LogoHeader(), Expanded( flex: 5, child: Column( diff --git a/lib/screens/levelselection/bloc.dart b/lib/screens/levelselection/bloc.dart new file mode 100644 index 000000000..d84280d07 --- /dev/null +++ b/lib/screens/levelselection/bloc.dart @@ -0,0 +1,3 @@ +export 'levelselection_bloc.dart'; +export 'levelselection_event.dart'; +export 'levelselection_state.dart'; \ No newline at end of file diff --git a/lib/screens/levelselection/levelselection_bloc.dart b/lib/screens/levelselection/levelselection_bloc.dart new file mode 100644 index 000000000..816b01376 --- /dev/null +++ b/lib/screens/levelselection/levelselection_bloc.dart @@ -0,0 +1,36 @@ +import 'dart:async'; +import 'dart:convert'; + +import 'package:bloc/bloc.dart'; +import 'package:flutter/material.dart'; + +import './bloc.dart'; + +class LevelSelectionBloc + extends Bloc { + @override + LevelSelectionState get initialState => InitialLevelSelectionState(); + + @override + Stream mapEventToState( + LevelSelectionEvent event, + ) async* { + if (event is LevelListEvent) { + List list = await _readJson(event.context, event.levelName); + yield LevelListState(levelList: list); + } + } + + Future _readJson(BuildContext context, String objName) async { + print('readJson'); + + String data = + await DefaultAssetBundle.of(context).loadString("assets/brain.json"); + + var decodedData = jsonDecode(data); + List list = decodedData['difficulty'][objName]['level']; + print('list: $list'); + + return list; + } +} diff --git a/lib/screens/levelselection/levelselection_event.dart b/lib/screens/levelselection/levelselection_event.dart new file mode 100644 index 000000000..479a8f3e0 --- /dev/null +++ b/lib/screens/levelselection/levelselection_event.dart @@ -0,0 +1,12 @@ +import 'package:flutter/material.dart'; +import 'package:meta/meta.dart'; + +@immutable +abstract class LevelSelectionEvent {} + +class LevelListEvent extends LevelSelectionEvent { + final String levelName; + final BuildContext context; + + LevelListEvent({this.context, this.levelName}); +} diff --git a/lib/screens/levelselection/levelselection_screen.dart b/lib/screens/levelselection/levelselection_screen.dart new file mode 100644 index 000000000..4ad768bb7 --- /dev/null +++ b/lib/screens/levelselection/levelselection_screen.dart @@ -0,0 +1,146 @@ +import 'package:enum_to_string/enum_to_string.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:sudoku_brain/components/logo_header.dart'; +import 'package:sudoku_brain/models/screen_arguments.dart'; +import 'package:sudoku_brain/screens/board/board_screen.dart'; +import 'package:sudoku_brain/screens/levelselection/bloc.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; +import 'package:sudoku_brain/utils/Logs.dart'; + +class LevelSelection extends StatefulWidget { + static String id = 'level_selection'; + + @override + _LevelSelectionState createState() => _LevelSelectionState(); +} + +class _LevelSelectionState extends State { + LevelSelectionBloc _levelselectionBloc; + String _levelName; + List levelList; + + @override + void initState() { + super.initState(); + _levelselectionBloc = BlocProvider.of(context); + } + + @override + Widget build(BuildContext context) { + getArguments(); + return BlocListener( + bloc: BlocProvider.of(context), + listener: (BuildContext context, state) { + if (state is LevelListState) { + Logs.printLogs('LevelListState: ${state.levelList}'); + levelList = List.from(state.levelList); + } + }, + child: BlocBuilder( + builder: (context, state) { + return SafeArea( + child: Container( + color: kPrimaryColor, + + child: Column( + children: [ + LogoHeader(), + Expanded( + flex: 6, + child: Container( + margin: EdgeInsets.fromLTRB(30.0, 0.0, 30.0, 0.0), + decoration: new BoxDecoration( + gradient: LinearGradient( + colors: [Color(0xFF91E786), Color(0xFF0AB8AD)], + ), + ), + child: Column( + children: [ + Padding( + padding: EdgeInsets.only(top: 20.0, bottom: 10.0), + child: Text( + '${_levelName == null ? '' : _levelName.toUpperCase()}', + style: TextStyle( + fontFamily: 'Staatliches', + fontSize: 35.0, + color: Colors.white, + fontWeight: FontWeight.w200, + decoration: TextDecoration.none), + ), + ), + _buildItemsList(levelList), + ], + ), + ), + ), + ], + ), + +// + ), + ); + }), + ); + } + + Widget _buildItemsList(List items) { +// List items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; + if (items != null) { + return Column( + children: [ + Container( + width: double.maxFinite, + padding: EdgeInsets.all(10.0), + height: MediaQuery.of(context).size.height * 0.61, + child: GridView.count( + primary: false, + crossAxisCount: 3, + children: List.generate(items.length, (index) { + return GestureDetector( + onTap: () { + Logs.printLogs('index: $index'); + Navigator.pushNamed(context, MainBoard.id, + arguments: ScreenArguments( + levelName: _levelName.toLowerCase(), index: index)); + }, + child: Container( + margin: EdgeInsets.all(10.0), + decoration: BoxDecoration( + color: Color(0xFF003D4D), + borderRadius: BorderRadius.circular(10.0)), + height: 30.0, + child: Center( + child: Text( + 'Level ${index + 1}', + textAlign: TextAlign.center, + style: TextStyle( + color: Colors.white, + fontSize: 20.0, + fontWeight: FontWeight.w100, + fontFamily: 'Viga', + decoration: TextDecoration.none), + ), + ), + ), + ); + })), + ), + ], + ); + } else { + Logs.printLogs('else'); + return Container( + padding: EdgeInsets.all(10.0), + width: double.maxFinite, + ); + } + } + + void getArguments() { + final ScreenArguments args = ModalRoute.of(context).settings.arguments; + _levelName = EnumToString.parse(args.levelTYPE); + _levelselectionBloc.add( + LevelListEvent(context: context, levelName: _levelName.toLowerCase())); + } +} diff --git a/lib/screens/levelselection/levelselection_state.dart b/lib/screens/levelselection/levelselection_state.dart new file mode 100644 index 000000000..6637c4f30 --- /dev/null +++ b/lib/screens/levelselection/levelselection_state.dart @@ -0,0 +1,12 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class LevelSelectionState {} + +class InitialLevelSelectionState extends LevelSelectionState {} + +class LevelListState extends LevelSelectionState { + List levelList; + + LevelListState({this.levelList}); +} diff --git a/lib/screens/termofuse/bloc.dart b/lib/screens/termofuse/bloc.dart new file mode 100644 index 000000000..dfb8977b2 --- /dev/null +++ b/lib/screens/termofuse/bloc.dart @@ -0,0 +1,3 @@ +export 'termofuse_bloc.dart'; +export 'termofuse_event.dart'; +export 'termofuse_state.dart'; \ No newline at end of file diff --git a/lib/screens/termofuse/termofuse_bloc.dart b/lib/screens/termofuse/termofuse_bloc.dart new file mode 100644 index 000000000..3850f4503 --- /dev/null +++ b/lib/screens/termofuse/termofuse_bloc.dart @@ -0,0 +1,15 @@ +import 'dart:async'; +import 'package:bloc/bloc.dart'; +import './bloc.dart'; + +class TermofuseBloc extends Bloc { + @override + TermofuseState get initialState => InitialTermofuseState(); + + @override + Stream mapEventToState( + TermofuseEvent event, + ) async* { + // TODO: Add Logic + } +} diff --git a/lib/screens/termofuse/termofuse_event.dart b/lib/screens/termofuse/termofuse_event.dart new file mode 100644 index 000000000..aed70514e --- /dev/null +++ b/lib/screens/termofuse/termofuse_event.dart @@ -0,0 +1,4 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class TermofuseEvent {} diff --git a/lib/screens/termofuse/termofuse_screen.dart b/lib/screens/termofuse/termofuse_screen.dart new file mode 100644 index 000000000..bce1f2f42 --- /dev/null +++ b/lib/screens/termofuse/termofuse_screen.dart @@ -0,0 +1,137 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:sudoku_brain/components/gradient_line.dart'; +import 'package:sudoku_brain/components/header_text.dart'; +import 'package:sudoku_brain/components/top_container.dart'; +import 'package:sudoku_brain/utils/Constants.dart'; +import 'package:webview_flutter/webview_flutter.dart'; +import 'package:xlive_switch/xlive_switch.dart'; + +class TermsOfUse extends StatelessWidget { + final double spaceBTText = 15.0; + final Completer _controller = + Completer(); + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Column( + children: [ + TopContainer( + onPressed: () { + Navigator.pop(context); + }, + text: 'TERMS OF USE', + imagePath: 'assets/images/ic_tou.png', + gradient: LinearGradient( + colors: [Color(0xFF1E9FFE), Color(0xFF125B91)], + ), + circleGradient: LinearGradient( + colors: [Color(0xFF8EC4EC), Color(0xFF198CE1)], + ), + color: Color(0xFF8EC4EC), + ), + Visibility( + visible: false, + child: Container( + padding: EdgeInsets.fromLTRB(25.0, 0.0, 25.0, 0.0), + width: MediaQuery.of(context).size.width, + color: kPrimaryColor, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: spaceBTText, + ), + HeaderText( + text: 'TERMS OF USE', + ), + GradientLine( + gradient: LinearGradient( + colors: [Color(0xFF8DFDC4), Color(0xFF32C6A2)], + ), + ), + ], + ), + ), + ), + ), + Container( + color: kPrimaryColor, + height: MediaQuery.of(context).size.height * 0.60, + child: WebView( + initialUrl: 'https://www.matchalagames.com/terms-of-service/', + javascriptMode: JavascriptMode.unrestricted, + onWebViewCreated: (WebViewController webViewController) { + _controller.complete(webViewController); + }, + // TODO(iskakaushik): Remove this when collection literals makes it to stable. + // ignore: prefer_collection_literals + navigationDelegate: (NavigationRequest request) { + if (request.url.startsWith('https://www.youtube.com/')) { + print('blocking navigation to $request}'); + return NavigationDecision.prevent; + } + print('allowing navigation to $request'); + return NavigationDecision.navigate; + }, + onPageStarted: (String url) { + print('Page started loading: $url'); + }, + onPageFinished: (String url) { + print('Page finished loading: $url'); + }, + gestureNavigationEnabled: true, + ), + ) + ], + ), + ); + } +} + +class SettingsItem extends StatelessWidget { + const SettingsItem({ + Key key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + SmallText( + text: 'Turn On Sounds', + ), + XlivSwitch( + unActiveColor: Color(0xFFD0D0D0), + activeColor: Color(0xFF0AB8AD), + value: false, + onChanged: (bool val) {}, + ), + ], + ); + } +} + +class SmallText extends StatelessWidget { + final String text; + + SmallText({this.text}); + + @override + Widget build(BuildContext context) { + return Text( + text, + textAlign: TextAlign.left, + style: TextStyle( + fontFamily: 'Rubik', + fontSize: 14.0, + color: Colors.white, + fontWeight: FontWeight.w200, + decoration: TextDecoration.none), + ); + } +} diff --git a/lib/screens/termofuse/termofuse_state.dart b/lib/screens/termofuse/termofuse_state.dart new file mode 100644 index 000000000..195d7152a --- /dev/null +++ b/lib/screens/termofuse/termofuse_state.dart @@ -0,0 +1,6 @@ +import 'package:meta/meta.dart'; + +@immutable +abstract class TermofuseState {} + +class InitialTermofuseState extends TermofuseState {} diff --git a/lib/test.dart b/lib/test.dart index 95036e73c..3e84686b6 100644 --- a/lib/test.dart +++ b/lib/test.dart @@ -1,137 +1,83 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:sudoku_brain/utils/Constants.dart'; +import 'package:firebase_admob/firebase_admob.dart'; -class Test extends StatelessWidget { +const String testDevice = 'MobileId'; + +void main() => runApp(MyApp()); + +class MyApp extends StatefulWidget { @override - Widget build(BuildContext context) { - return MaterialApp( - title: '', - theme: ThemeData.dark().copyWith( - primaryColor: kPrimaryColor, - scaffoldBackgroundColor: kPrimaryColor, - ), - home: Grid(), - ); - } + _MyAppState createState() => _MyAppState(); } -class Grid extends StatefulWidget { +class _MyAppState extends State { + static const MobileAdTargetingInfo targetingInfo = MobileAdTargetingInfo( + testDevices: testDevice != null ? [testDevice] : null, + nonPersonalizedAds: true, + keywords: ['Game', 'Mario'], + ); + + BannerAd _bannerAd; + InterstitialAd _interstitialAd; + + BannerAd createBannerAd() { + return BannerAd( + adUnitId: BannerAd.testAdUnitId, + //Change BannerAd adUnitId with Admob ID + size: AdSize.banner, + targetingInfo: targetingInfo, + listener: (MobileAdEvent event) { + print("BannerAd $event"); + }); + } + + InterstitialAd createInterstitialAd() { + return InterstitialAd( + adUnitId: InterstitialAd.testAdUnitId, + //Change Interstitial AdUnitId with Admob ID + targetingInfo: targetingInfo, + listener: (MobileAdEvent event) { + print("IntersttialAd $event"); + }); + } + @override - _GridState createState() => _GridState(); -} + void initState() { + FirebaseAdMob.instance.initialize(appId: BannerAd.testAdUnitId); + //Change appId With Admob Id + _bannerAd = createBannerAd() + ..load() + ..show(); + super.initState(); + } + + @override + void dispose() { + _bannerAd.dispose(); + _interstitialAd.dispose(); + super.dispose(); + } -class _GridState extends State { @override Widget build(BuildContext context) { - return Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Container( - color: Colors.white, - width: 30.0, - height: 30.0, - child: GridView.count( - primary: false, - crossAxisCount: 3, - children: [ - Container( - width: 30.0, - height: 30.0, - child: const Text( - '1', - textAlign: TextAlign.center, - style: TextStyle(color: Colors.black, fontSize: 10.0), - ), - color: Colors.teal[100], - ), - Container( - width: 30.0, - height: 30.0, - child: const Text( - '2', - textAlign: TextAlign.center, - style: TextStyle(color: Colors.black, fontSize: 10.0), - ), - color: Colors.teal[100], - ), - Container( - width: 30.0, - height: 30.0, - child: const Text( - '3', - textAlign: TextAlign.center, - style: TextStyle(color: Colors.black, fontSize: 10.0), - ), - color: Colors.teal[100], - ), - Container( - width: 30.0, - height: 30.0, - child: const Text( - '4', - textAlign: TextAlign.center, - style: TextStyle(color: Colors.black, fontSize: 10.0), - ), - color: Colors.teal[100], - ), - Container( - width: 30.0, - height: 30.0, - child: const Text( - '5', - textAlign: TextAlign.center, - style: TextStyle(color: Colors.black, fontSize: 10.0), - ), - color: Colors.teal[100], - ), - Container( - width: 30.0, - height: 30.0, - child: const Text( - '6', - textAlign: TextAlign.center, - style: TextStyle(color: Colors.black, fontSize: 10.0), - ), - color: Colors.teal[100], - ), - Container( - width: 30.0, - height: 30.0, - child: const Text( - '7', - textAlign: TextAlign.center, - style: TextStyle(color: Colors.black, fontSize: 10.0), - ), - color: Colors.teal[100], - ), - Container( - width: 30.0, - height: 30.0, - child: const Text( - '8', - textAlign: TextAlign.center, - style: TextStyle(color: Colors.black, fontSize: 10.0), - ), - color: Colors.teal[100], - ), - Container( - width: 30.0, - height: 30.0, - child: const Text( - '9', - textAlign: TextAlign.center, - style: TextStyle(color: Colors.black, fontSize: 10.0), - ), - color: Colors.teal[100], - ), - ], - ), + return MaterialApp( + debugShowCheckedModeBanner: false, + title: 'Flutter Demo', + theme: ThemeData(), + home: Scaffold( + appBar: AppBar( + title: Text("Demo App"), ), - Container(), - Container() - ], + body: Center( + child: RaisedButton( + child: Text('Click on Ads'), + onPressed: () { + createInterstitialAd() + ..load() + ..show(); + }, + )), + ), ); } -} +} \ No newline at end of file diff --git a/lib/utils/AdMob.dart b/lib/utils/AdMob.dart new file mode 100644 index 000000000..9e2073402 --- /dev/null +++ b/lib/utils/AdMob.dart @@ -0,0 +1,33 @@ +import 'package:firebase_admob/firebase_admob.dart'; + +class AdMobIntegration { + static String testDevice = 'MobileId'; + static MobileAdTargetingInfo targetingInfo = MobileAdTargetingInfo( + testDevices: testDevice != null ? [testDevice] : null, + nonPersonalizedAds: true, + keywords: ['Game', 'Sudoku'], + ); + + static BannerAd _bannerAd; + + static initAd() { + FirebaseAdMob.instance.initialize(appId: BannerAd.testAdUnitId); + _bannerAd = _createBannerAd() + ..load() + ..show(); + } + + static BannerAd _createBannerAd() { + return BannerAd( + adUnitId: BannerAd.testAdUnitId, + size: AdSize.banner, + targetingInfo: targetingInfo, + listener: (MobileAdEvent event) { + print("BannerAd $event"); + }); + } + + static dispose() { + _bannerAd.dispose(); + } +} diff --git a/lib/utils/LocalDB.dart b/lib/utils/LocalDB.dart new file mode 100644 index 000000000..b77131c89 --- /dev/null +++ b/lib/utils/LocalDB.dart @@ -0,0 +1,69 @@ +import 'dart:convert'; + +import 'package:shared_preferences/shared_preferences.dart'; + +class LocalDB { + static final keyBoardList = 'keyBoardList'; + + // Set Data Methods + static setString(String key, String value) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + prefs.setString(key, value); + } + + static setInt(String key, int value) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + prefs.setInt(key, value); + } + + static setBool(String key, bool value) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + prefs.setBool(key, value); + } + + static setObject(String key, Object value) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + prefs.setString(key, jsonEncode(value)); + } + + static setList(String key, List value) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + prefs.setString(key, value.toString()); + } + + static Future getList(String key) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + return prefs.getString(key); + } + + // Get Data Methods + static Future getString(String key) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + return prefs.getString(key); + } + + static Future getInt(String key) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + return prefs.getInt(key); + } + + static Future getBool(String key) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + return prefs.getBool(key); + } + + static Future getObject(String key) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + if (prefs.containsKey(key)) { + return jsonDecode(prefs.getString(key)); + } else { + return null; + } + } + + // Remove Data Method + static removeValue(String key) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + prefs.remove(key); + } +} diff --git a/pubspec.lock b/pubspec.lock index f7a05123c..3e6f54394 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -78,6 +78,41 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.9" + firebase: + dependency: transitive + description: + name: firebase + url: "https://pub.dartlang.org" + source: hosted + version: "7.2.1" + firebase_admob: + dependency: "direct main" + description: + name: firebase_admob + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.1+3" + firebase_core: + dependency: transitive + description: + name: firebase_core + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.4+2" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.4" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.1+2" flutter: dependency: "direct main" description: flutter @@ -90,11 +125,44 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.1.0" + flutter_email_sender: + dependency: "direct main" + description: + name: flutter_email_sender + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.2" flutter_test: dependency: "direct dev" description: flutter source: sdk version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + gradient_text: + dependency: "direct main" + description: + name: gradient_text + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" + http: + dependency: transitive + description: + name: http + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.0+4" + http_parser: + dependency: transitive + description: + name: http_parser + url: "https://pub.dartlang.org" + source: hosted + version: "3.1.3" image: dependency: transitive description: @@ -109,6 +177,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.16.1" + js: + dependency: transitive + description: + name: js + url: "https://pub.dartlang.org" + source: hosted + version: "0.6.1+1" matcher: dependency: transitive description: @@ -130,6 +205,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.0.4" + package_info: + dependency: "direct main" + description: + name: package_info + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.0+14" path: dependency: transitive description: @@ -151,6 +233,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.4.0" + platform: + dependency: transitive + description: + name: platform + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.1" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.2" provider: dependency: transitive description: @@ -172,6 +268,34 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.23.1" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + url: "https://pub.dartlang.org" + source: hosted + version: "0.5.6+2" + shared_preferences_macos: + dependency: transitive + description: + name: shared_preferences_macos + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.1+6" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.3" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.2+4" sky_engine: dependency: transitive description: flutter @@ -233,6 +357,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.8" + webview_flutter: + dependency: "direct main" + description: + name: webview_flutter + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.19+8" xlive_switch: dependency: "direct main" description: @@ -248,5 +379,5 @@ packages: source: hosted version: "3.5.0" sdks: - dart: ">=2.6.0 <3.0.0" - flutter: ">=1.12.1" + dart: ">=2.7.0-dev <3.0.0" + flutter: ">=1.12.13+hotfix.5 <2.0.0" diff --git a/pubspec.yaml b/pubspec.yaml index e8c06135c..3a0e0f491 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -28,6 +28,12 @@ dependencies: collection: ^1.14.11 xlive_switch: ^1.0.5 enum_to_string: ^1.0.9 + shared_preferences: 0.5.6+2 + flutter_email_sender: 2.2.2 + package_info: 0.4.0+14 + webview_flutter: 0.3.19+8 + gradient_text: 1.0.2 + firebase_admob: 0.9.1+3 dev_dependencies: @@ -60,10 +66,13 @@ flutter: fonts: - family: Staatliches fonts: - - asset: assets/fonts/Staatliches-Regular.ttf + - asset: assets/fonts/Staatliches-Regular.ttf - family: Rubik fonts: - - asset: assets/fonts/Rubik-Regular.ttf + - asset: assets/fonts/Rubik-Regular.ttf + - family: Viga + fonts: + - asset: assets/fonts/Viga-Regular.ttf # - family: Trajan Pro From 81a2b4e85c67a8e5aaad717349a51eef100fa7e3 Mon Sep 17 00:00:00 2001 From: Kamran Pirwani Date: Fri, 6 Mar 2020 21:19:18 +0800 Subject: [PATCH 27/57] Update productId and bundleId to point to the correct ones and setup all of the ios dependencies to get it working on there --- android/app/build.gradle | 3 +- ios/Flutter/Debug.xcconfig | 1 + ios/Flutter/Release.xcconfig | 1 + ios/Podfile | 88 +++++++++ ios/Podfile.lock | 171 ++++++++++++++++++ ios/Runner.xcodeproj/project.pbxproj | 90 ++++++++- .../contents.xcworkspacedata | 3 + .../AppIcon.appiconset/1024.png | Bin 0 -> 428581 bytes .../AppIcon.appiconset/120.png | Bin 0 -> 9235 bytes .../AppIcon.appiconset/152.png | Bin 0 -> 12607 bytes .../AppIcon.appiconset/167.png | Bin 0 -> 14514 bytes .../AppIcon.appiconset/180.png | Bin 0 -> 15901 bytes .../Assets.xcassets/AppIcon.appiconset/20.png | Bin 0 -> 2485 bytes .../Assets.xcassets/AppIcon.appiconset/29.png | Bin 0 -> 2940 bytes .../Assets.xcassets/AppIcon.appiconset/40.png | Bin 0 -> 3394 bytes .../Assets.xcassets/AppIcon.appiconset/58.png | Bin 0 -> 4479 bytes .../Assets.xcassets/AppIcon.appiconset/60.png | Bin 0 -> 4416 bytes .../Assets.xcassets/AppIcon.appiconset/76.png | Bin 0 -> 5471 bytes .../Assets.xcassets/AppIcon.appiconset/80.png | Bin 0 -> 5805 bytes .../Assets.xcassets/AppIcon.appiconset/87.png | Bin 0 -> 6410 bytes .../AppIcon.appiconset/Contents.json | 44 ++--- .../Icon-App-1024x1024@1x.png | Bin 10932 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 564 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1283 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 1588 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 1025 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 1716 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 1920 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1283 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 1895 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 2665 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 2665 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 3831 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 1888 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 3294 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 3612 -> 0 bytes .../Assets.xcassets/Brain.imageset/Brain.png | Bin 0 -> 5342 bytes .../Brain.imageset/Brain@2x.png | Bin 0 -> 15592 bytes .../Brain.imageset/Brain@3x.png | Bin 0 -> 28649 bytes .../Contents.json | 8 +- ios/Runner/Assets.xcassets/Contents.json | 6 + .../LaunchImage.imageset/LaunchImage.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 68 -> 0 bytes .../LaunchImage.imageset/README.md | 5 - .../Wordmark.imageset/Contents.json | 23 +++ .../Wordmark.imageset/Wordmark.png | Bin 0 -> 5406 bytes .../Wordmark.imageset/Wordmark@2x.png | Bin 0 -> 15147 bytes .../Wordmark.imageset/Wordmark@3x.png | Bin 0 -> 28793 bytes ios/Runner/Base.lproj/LaunchScreen.storyboard | 37 +++- pubspec.lock | 4 +- 51 files changed, 432 insertions(+), 52 deletions(-) create mode 100644 ios/Podfile create mode 100644 ios/Podfile.lock create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 ios/Runner/Assets.xcassets/Brain.imageset/Brain.png create mode 100644 ios/Runner/Assets.xcassets/Brain.imageset/Brain@2x.png create mode 100644 ios/Runner/Assets.xcassets/Brain.imageset/Brain@3x.png rename ios/Runner/Assets.xcassets/{LaunchImage.imageset => Brain.imageset}/Contents.json (68%) create mode 100644 ios/Runner/Assets.xcassets/Contents.json delete mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png delete mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png delete mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png delete mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 ios/Runner/Assets.xcassets/Wordmark.imageset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/Wordmark.imageset/Wordmark.png create mode 100644 ios/Runner/Assets.xcassets/Wordmark.imageset/Wordmark@2x.png create mode 100644 ios/Runner/Assets.xcassets/Wordmark.imageset/Wordmark@3x.png diff --git a/android/app/build.gradle b/android/app/build.gradle index 43b6ffecc..d7c443eac 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -32,8 +32,7 @@ android { } defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.firekamp.sudokubrain" + applicationId "com.matchalagames.sudokubrain" minSdkVersion 16 targetSdkVersion 28 versionCode flutterVersionCode.toInteger() diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig index 592ceee85..e8efba114 100644 --- a/ios/Flutter/Debug.xcconfig +++ b/ios/Flutter/Debug.xcconfig @@ -1 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" #include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig index 592ceee85..399e9340e 100644 --- a/ios/Flutter/Release.xcconfig +++ b/ios/Flutter/Release.xcconfig @@ -1 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" #include "Generated.xcconfig" diff --git a/ios/Podfile b/ios/Podfile new file mode 100644 index 000000000..3dd946351 --- /dev/null +++ b/ios/Podfile @@ -0,0 +1,88 @@ +platform :ios, '10.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' +ENV['SWIFT_VERSION'] = '5.0' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def parse_KV_file(file, separator='=') + file_abs_path = File.expand_path(file) + if !File.exists? file_abs_path + return []; + end + generated_key_values = {} + skip_line_start_symbols = ["#", "/"] + File.foreach(file_abs_path) do |line| + next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } + plugin = line.split(pattern=separator) + if plugin.length == 2 + podname = plugin[0].strip() + path = plugin[1].strip() + podpath = File.expand_path("#{path}", file_abs_path) + generated_key_values[podname] = podpath + else + puts "Invalid plugin specification: #{line}" + end + end + generated_key_values +end + +target 'Runner' do + # Flutter Pod + use_frameworks! + copied_flutter_dir = File.join(__dir__, 'Flutter') + copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') + copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') + unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) + # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. + # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. + # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. + + generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') + unless File.exist?(generated_xcode_build_settings_path) + raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) + cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; + + unless File.exist?(copied_framework_path) + FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) + end + unless File.exist?(copied_podspec_path) + FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) + end + end + + # Keep pod path relative so it can be checked into Podfile.lock. + pod 'Flutter', :path => 'Flutter' + + # Plugin Pods + + # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock + # referring to absolute paths on developers' machines. + system('rm -rf .symlinks') + system('mkdir -p .symlinks/plugins') + plugin_pods = parse_KV_file('../.flutter-plugins') + plugin_pods.each do |name, path| + symlink = File.join('.symlinks', 'plugins', name) + File.symlink(path, symlink) + pod name, :path => File.join(symlink, 'ios') + end +end + +# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. +install! 'cocoapods', :disable_input_output_paths => true + +post_install do |installer| + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['ENABLE_BITCODE'] = 'NO' + config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '10.0' + end + end +end diff --git a/ios/Podfile.lock b/ios/Podfile.lock new file mode 100644 index 000000000..4e2c1d815 --- /dev/null +++ b/ios/Podfile.lock @@ -0,0 +1,171 @@ +PODS: + - Firebase/AdMob (6.18.0): + - Firebase/CoreOnly + - Google-Mobile-Ads-SDK (~> 7.50) + - Firebase/Core (6.18.0): + - Firebase/CoreOnly + - FirebaseAnalytics (= 6.3.0) + - Firebase/CoreOnly (6.18.0): + - FirebaseCore (= 6.6.3) + - firebase_admob (0.0.1): + - Firebase/AdMob + - Firebase/Core + - Flutter + - firebase_core (0.0.1): + - Firebase/Core + - Flutter + - firebase_core_web (0.1.0): + - Flutter + - FirebaseAnalytics (6.3.0): + - FirebaseCore (~> 6.6) + - FirebaseInstallations (~> 1.1) + - GoogleAppMeasurement (= 6.3.0) + - GoogleUtilities/AppDelegateSwizzler (~> 6.0) + - GoogleUtilities/MethodSwizzler (~> 6.0) + - GoogleUtilities/Network (~> 6.0) + - "GoogleUtilities/NSData+zlib (~> 6.0)" + - nanopb (= 0.3.9011) + - FirebaseCore (6.6.3): + - FirebaseCoreDiagnostics (~> 1.2) + - FirebaseCoreDiagnosticsInterop (~> 1.2) + - GoogleUtilities/Environment (~> 6.5) + - GoogleUtilities/Logger (~> 6.5) + - FirebaseCoreDiagnostics (1.2.1): + - FirebaseCoreDiagnosticsInterop (~> 1.2) + - GoogleDataTransportCCTSupport (~> 1.3) + - GoogleUtilities/Environment (~> 6.5) + - GoogleUtilities/Logger (~> 6.5) + - nanopb (~> 0.3.901) + - FirebaseCoreDiagnosticsInterop (1.2.0) + - FirebaseInstallations (1.1.0): + - FirebaseCore (~> 6.6) + - GoogleUtilities/UserDefaults (~> 6.5) + - PromisesObjC (~> 1.2) + - Flutter (1.0.0) + - flutter_email_sender (0.0.1): + - Flutter + - Google-Mobile-Ads-SDK (7.56.0): + - GoogleAppMeasurement (~> 6.0) + - GoogleAppMeasurement (6.3.0): + - GoogleUtilities/AppDelegateSwizzler (~> 6.0) + - GoogleUtilities/MethodSwizzler (~> 6.0) + - GoogleUtilities/Network (~> 6.0) + - "GoogleUtilities/NSData+zlib (~> 6.0)" + - nanopb (= 0.3.9011) + - GoogleDataTransport (4.0.1) + - GoogleDataTransportCCTSupport (1.4.1): + - GoogleDataTransport (~> 4.0) + - nanopb (~> 0.3.901) + - GoogleUtilities/AppDelegateSwizzler (6.5.1): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network + - GoogleUtilities/Environment (6.5.1) + - GoogleUtilities/Logger (6.5.1): + - GoogleUtilities/Environment + - GoogleUtilities/MethodSwizzler (6.5.1): + - GoogleUtilities/Logger + - GoogleUtilities/Network (6.5.1): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Reachability + - "GoogleUtilities/NSData+zlib (6.5.1)" + - GoogleUtilities/Reachability (6.5.1): + - GoogleUtilities/Logger + - GoogleUtilities/UserDefaults (6.5.1): + - GoogleUtilities/Logger + - nanopb (0.3.9011): + - nanopb/decode (= 0.3.9011) + - nanopb/encode (= 0.3.9011) + - nanopb/decode (0.3.9011) + - nanopb/encode (0.3.9011) + - package_info (0.0.1): + - Flutter + - PromisesObjC (1.2.8) + - shared_preferences (0.0.1): + - Flutter + - shared_preferences_macos (0.0.1): + - Flutter + - shared_preferences_web (0.0.1): + - Flutter + - webview_flutter (0.0.1): + - Flutter + +DEPENDENCIES: + - firebase_admob (from `.symlinks/plugins/firebase_admob/ios`) + - firebase_core (from `.symlinks/plugins/firebase_core/ios`) + - firebase_core_web (from `.symlinks/plugins/firebase_core_web/ios`) + - Flutter (from `Flutter`) + - flutter_email_sender (from `.symlinks/plugins/flutter_email_sender/ios`) + - package_info (from `.symlinks/plugins/package_info/ios`) + - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`) + - shared_preferences_macos (from `.symlinks/plugins/shared_preferences_macos/ios`) + - shared_preferences_web (from `.symlinks/plugins/shared_preferences_web/ios`) + - webview_flutter (from `.symlinks/plugins/webview_flutter/ios`) + +SPEC REPOS: + trunk: + - Firebase + - FirebaseAnalytics + - FirebaseCore + - FirebaseCoreDiagnostics + - FirebaseCoreDiagnosticsInterop + - FirebaseInstallations + - Google-Mobile-Ads-SDK + - GoogleAppMeasurement + - GoogleDataTransport + - GoogleDataTransportCCTSupport + - GoogleUtilities + - nanopb + - PromisesObjC + +EXTERNAL SOURCES: + firebase_admob: + :path: ".symlinks/plugins/firebase_admob/ios" + firebase_core: + :path: ".symlinks/plugins/firebase_core/ios" + firebase_core_web: + :path: ".symlinks/plugins/firebase_core_web/ios" + Flutter: + :path: Flutter + flutter_email_sender: + :path: ".symlinks/plugins/flutter_email_sender/ios" + package_info: + :path: ".symlinks/plugins/package_info/ios" + shared_preferences: + :path: ".symlinks/plugins/shared_preferences/ios" + shared_preferences_macos: + :path: ".symlinks/plugins/shared_preferences_macos/ios" + shared_preferences_web: + :path: ".symlinks/plugins/shared_preferences_web/ios" + webview_flutter: + :path: ".symlinks/plugins/webview_flutter/ios" + +SPEC CHECKSUMS: + Firebase: 0490eca762a72e4f1582319539153897f1508dee + firebase_admob: d8c2bc95b5e0069406280ce6adb816cdee6aa595 + firebase_core: 920b9b2a74489a0cf6c5009b744f7f7f5fd84cf6 + firebase_core_web: d501d8b946b60c8af265428ce483b0fff5ad52d1 + FirebaseAnalytics: 058d71e714a1a6804d9e0f25e3bb18e377a51579 + FirebaseCore: 78276943ad85e616dfa54dafa6c89512987d9d60 + FirebaseCoreDiagnostics: 2109d10c35e8289b1ee6cabf44d9ffb055620194 + FirebaseCoreDiagnosticsInterop: 296e2c5f5314500a850ad0b83e9e7c10b011a850 + FirebaseInstallations: 575cd32f2aec0feeb0e44f5d0110a09e5e60b47b + Flutter: 0e3d915762c693b495b44d77113d4970485de6ec + flutter_email_sender: f787522d0e82f50e5766c1213dbffff22fdcf009 + Google-Mobile-Ads-SDK: 65e335fadc97c5a91a9d4546214bfd3a2fb11047 + GoogleAppMeasurement: 39ecba10918b21c83877d392246157f65db351cf + GoogleDataTransport: 653963cf5be60fb59cf051e070f0836fdc305f81 + GoogleDataTransportCCTSupport: 84e4d4bbab642f2e9d83ee65d78aca2b5527d314 + GoogleUtilities: 06eb53bb579efe7099152735900dd04bf09e7275 + nanopb: 18003b5e52dab79db540fe93fe9579f399bd1ccd + package_info: 48b108e75b8802c2d5e126f208ef540561c98aef + PromisesObjC: c119f3cd559f50b7ae681fa59dc1acd19173b7e6 + shared_preferences: 430726339841afefe5142b9c1f50cb6bd7793e01 + shared_preferences_macos: f3f29b71ccbb56bf40c9dd6396c9acf15e214087 + shared_preferences_web: 141cce0c3ed1a1c5bf2a0e44f52d31eeb66e5ea9 + webview_flutter: bec7599de6bfbe8008a739aa3ebd7b364ea9d0cd + +PODFILE CHECKSUM: cd7be0573275eed0345c476d3d67a82c45224287 + +COCOAPODS: 1.8.4 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 8ecaa1ff4..5f85dbfaf 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -19,6 +19,7 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + E0F80BF759756C21C775C9F3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D08D3AD4719B32BD5A211983 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -41,9 +42,11 @@ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; + 5A23A9B55EAA1FE694845192 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 8FEDA241C0E2D81DB0524973 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; @@ -53,6 +56,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + BA550F241569EA62B9BBD112 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + D08D3AD4719B32BD5A211983 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -62,6 +67,7 @@ files = ( 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, + E0F80BF759756C21C775C9F3 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -87,7 +93,8 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - CF3B75C9A7D2FA2A4C99F110 /* Frameworks */, + FEC5FE7D7AE8C89C036B65A4 /* Pods */, + 9EC1A7639D534D3F2CB3A830 /* Frameworks */, ); sourceTree = ""; }; @@ -123,6 +130,25 @@ name = "Supporting Files"; sourceTree = ""; }; + 9EC1A7639D534D3F2CB3A830 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D08D3AD4719B32BD5A211983 /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + FEC5FE7D7AE8C89C036B65A4 /* Pods */ = { + isa = PBXGroup; + children = ( + BA550F241569EA62B9BBD112 /* Pods-Runner.debug.xcconfig */, + 8FEDA241C0E2D81DB0524973 /* Pods-Runner.release.xcconfig */, + 5A23A9B55EAA1FE694845192 /* Pods-Runner.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -130,12 +156,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + E5CEB83A4975C0896221D3E4 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + DDB24F2868A14593886B5C73 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -157,6 +185,8 @@ TargetAttributes = { 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; + DevelopmentTeam = B6B29RJ6L5; + ProvisioningStyle = Automatic; }; }; }; @@ -222,6 +252,43 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; + DDB24F2868A14593886B5C73 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + E5CEB83A4975C0896221D3E4 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -312,20 +379,25 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = B6B29RJ6L5; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.firekamp.sudokuBrain; + PRODUCT_BUNDLE_IDENTIFIER = com.matchalagames.sudokubrain; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; VERSIONING_SYSTEM = "apple-generic"; }; name = Profile; @@ -441,20 +513,25 @@ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = B6B29RJ6L5; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.firekamp.sudokuBrain; + PRODUCT_BUNDLE_IDENTIFIER = com.matchalagames.sudokubrain; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; VERSIONING_SYSTEM = "apple-generic"; }; name = Debug; @@ -464,20 +541,25 @@ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = B6B29RJ6L5; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - PRODUCT_BUNDLE_IDENTIFIER = com.firekamp.sudokuBrain; + PRODUCT_BUNDLE_IDENTIFIER = com.matchalagames.sudokubrain; PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; VERSIONING_SYSTEM = "apple-generic"; }; name = Release; diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata index 1d526a16e..21a3cc14c 100644 --- a/ios/Runner.xcworkspace/contents.xcworkspacedata +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -4,4 +4,7 @@ + + diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png new file mode 100644 index 0000000000000000000000000000000000000000..bde17c885d6b875175e95a9522e2a2d90277949f GIT binary patch literal 428581 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