From c62009e216a3b4671cc1e50345451ab4f197b0b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Mon, 4 Jul 2022 16:54:02 +0200 Subject: [PATCH] Upgrade flutter framework and dependencies, fix/clean code --- android/gradle.properties | 4 +- .../metadata/android/en-US/changelogs/41.txt | 1 + .../metadata/android/fr-FR/changelogs/41.txt | 1 + lib/entities/moving_tile.dart | 72 +++---- lib/main.dart | 28 +-- lib/provider/data.dart | 6 +- lib/screens/home.dart | 181 +++++++++++------- lib/utils/get_images_list.dart | 2 +- pubspec.lock | 16 +- pubspec.yaml | 2 +- 10 files changed, 182 insertions(+), 131 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/41.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/41.txt diff --git a/android/gradle.properties b/android/gradle.properties index 4d8dcd2..62205f4 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,5 +1,5 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true -app.versionName=0.0.40 -app.versionCode=40 +app.versionName=0.0.41 +app.versionCode=41 diff --git a/fastlane/metadata/android/en-US/changelogs/41.txt b/fastlane/metadata/android/en-US/changelogs/41.txt new file mode 100644 index 0000000..1892140 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/41.txt @@ -0,0 +1 @@ +Upgrade flutter framework and dependencies, fix/clean code diff --git a/fastlane/metadata/android/fr-FR/changelogs/41.txt b/fastlane/metadata/android/fr-FR/changelogs/41.txt new file mode 100644 index 0000000..1d4681d --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/41.txt @@ -0,0 +1 @@ +Mise à jour du framework Flutter, corrections/améliorations de code diff --git a/lib/entities/moving_tile.dart b/lib/entities/moving_tile.dart index 63dc084..fc8d41a 100644 --- a/lib/entities/moving_tile.dart +++ b/lib/entities/moving_tile.dart @@ -20,51 +20,55 @@ class MovingTile extends Tile { ), ), child: Image( - image: this.image.image, width: this.size, height: this.size, fit: BoxFit.fill), + image: this.image.image, + width: this.size, + height: this.size, + fit: BoxFit.fill, + ), ); } Container widget(Data myProvider) { return Container( - child: DragTarget<List<int>>( - builder: ( - BuildContext context, - List<dynamic> accepted, - List<dynamic> rejected, - ) { - return Container( - height: this.size, - width: this.size, - color: Colors.cyan, - child: Draggable<List<int>>( - data: [ - this.currentCol, - this.currentRow, - ], + child: DragTarget<List<int>>( + builder: ( + BuildContext context, + List<dynamic> accepted, + List<dynamic> rejected, + ) { + return Container( + height: this.size, + width: this.size, + color: Colors.cyan, + child: Draggable<List<int>>( + data: [ + this.currentCol, + this.currentRow, + ], - // Widget when draggable is stationary - child: this._tileWidget(), + // Widget when draggable is stationary + child: this._tileWidget(), - // Widget when draggable is being dragged - feedback: this._tileWidget(), + // Widget when draggable is being dragged + feedback: this._tileWidget(), - // Widget to display on original place when being dragged - childWhenDragging: Container( - height: this.size, - width: this.size, - color: Colors.pinkAccent, + // Widget to display on original place when being dragged + childWhenDragging: Container( + height: this.size, + width: this.size, + color: Colors.pinkAccent, + ), ), - ), - ); - }, - onAccept: (List<int> data) { - myProvider.swapTiles([this.currentCol, this.currentRow], data); - }, - )); + ); + }, + onAccept: (List<int> data) { + myProvider.swapTiles([this.currentCol, this.currentRow], data); + }, + ), + ); } bool isCorrect() { - return ((this.currentRow == this.originalRow) && - (this.currentCol == this.originalCol)); + return ((this.currentRow == this.originalRow) && (this.currentCol == this.originalCol)); } } diff --git a/lib/main.dart b/lib/main.dart index dd1afff..af052e9 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -16,19 +16,21 @@ class MyApp extends StatelessWidget { Widget build(BuildContext context) { return ChangeNotifierProvider( create: (BuildContext context) => Data(), - child: Consumer<Data>(builder: (context, data, child) { - return MaterialApp( - debugShowCheckedModeBanner: false, - theme: ThemeData( - primaryColor: Colors.blue, - visualDensity: VisualDensity.adaptivePlatformDensity, - ), - home: Home(), - routes: { - Home.id: (context) => Home(), - }, - ); - }), + child: Consumer<Data>( + builder: (context, data, child) { + return MaterialApp( + debugShowCheckedModeBanner: false, + theme: ThemeData( + primaryColor: Colors.blue, + visualDensity: VisualDensity.adaptivePlatformDensity, + ), + home: Home(), + routes: { + Home.id: (context) => Home(), + }, + ); + }, + ), ); } } diff --git a/lib/provider/data.dart b/lib/provider/data.dart index 362981d..f954001 100644 --- a/lib/provider/data.dart +++ b/lib/provider/data.dart @@ -9,7 +9,7 @@ class Data extends ChangeNotifier { // application data List _images = []; String _image = ''; - List _tiles = []; + List<MovingTile> _tiles = []; // application state bool _isShufflingBoard = false; @@ -36,9 +36,9 @@ class Data extends ChangeNotifier { notifyListeners(); } - List get tiles => _tiles; + List<MovingTile> get tiles => _tiles; - set updateTiles(List value) { + set updateTiles(List<MovingTile> value) { _tiles = value; notifyListeners(); } diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 9becc8c..0c59d36 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -36,14 +36,13 @@ class Home extends StatelessWidget { GetImagesList getImagesList; getImagesList = GetImagesList(); await getImagesList.init(); - if (getImagesList.images != null) { + if (getImagesList.images.isNotEmpty) { myProvider.updateImages = getImagesList.images; shuffleImages(myProvider); } } - Future<void> selectImage( - Data myProvider, String imageCode, double tileImageSize) async { + Future<void> selectImage(Data myProvider, String imageCode, double tileImageSize) async { myProvider.updateIsShufflingBoard = true; myProvider.updateImage = imageCode; new Timer(new Duration(seconds: 1), () { @@ -67,11 +66,14 @@ class Home extends StatelessWidget { decoration: BoxDecoration( borderRadius: BorderRadius.circular(4), border: Border.all( - color: Colors.blue[200], + color: Colors.blue.shade200, width: 4, ), ), - child: Image(image: AssetImage(getImageAssetName(image)), fit: BoxFit.fill), + child: Image( + image: AssetImage(getImageAssetName(image)), + fit: BoxFit.fill, + ), ), onPressed: () { selectImage(myProvider, image, tileImageSize); @@ -93,19 +95,21 @@ class Home extends StatelessWidget { Table( defaultColumnWidth: IntrinsicColumnWidth(), children: [ - for (var imageIndex = 0; - imageIndex < images.length; - imageIndex += _selectImageColumnsCount) - TableRow(children: [ - for (var columnIndex = 0; - columnIndex < _selectImageColumnsCount; - columnIndex++) - Column(children: [ - if (imageIndex + columnIndex < images.length) - _buildImageSelectorItem( - myProvider, images[imageIndex + columnIndex], tileImageSize) - ]), - ]), + for (var imgIndex = 0; + imgIndex < images.length; + imgIndex += _selectImageColumnsCount) + TableRow( + children: [ + for (var colIndex = 0; colIndex < _selectImageColumnsCount; colIndex++) + Column( + children: [ + if (imgIndex + colIndex < images.length) + _buildImageSelectorItem( + myProvider, images[imgIndex + colIndex], tileImageSize) + ], + ), + ], + ), ], ), ], @@ -133,7 +137,10 @@ class Home extends StatelessWidget { ), ), margin: EdgeInsets.all(8), - child: Image(image: AssetImage(assetName), fit: BoxFit.fill), + child: Image( + image: AssetImage(assetName), + fit: BoxFit.fill, + ), ), onPressed: () { myProvider.updateTilesCount = value; @@ -168,7 +175,8 @@ class Home extends StatelessWidget { Future<void> splitImageInTiles(Data myProvider, double tileImageSize) async { String imageAsset = getImageAssetName(myProvider.image); Uint8List imageData = (await rootBundle.load(imageAsset)).buffer.asUint8List(); - imglib.Image image = imglib.decodeImage(imageData); + + imglib.Image image = imglib.decodeImage(imageData) ?? imglib.Image.fromBytes(1, 1, []); int x = 0, y = 0; int width = (image.width / myProvider.tilesCount).round(); @@ -177,8 +185,16 @@ class Home extends StatelessWidget { List<MovingTile> tiles = []; for (int i = 0; i < myProvider.tilesCount; i++) { for (int j = 0; j < myProvider.tilesCount; j++) { + Uint8List tileData = new Uint8List.fromList(imglib.encodeJpg(imglib.copyCrop( + image, + x, + y, + width, + height, + ))); + tiles.add(MovingTile( - Image.memory(imglib.encodeJpg(imglib.copyCrop(image, x, y, width, height))), + Image.memory(tileData), tileImageSize, j, i, @@ -196,7 +212,7 @@ class Home extends StatelessWidget { myProvider.updateIsShufflingBoard = false; } - bool _checkTilesetIsCleared(List<Tile> tiles) { + bool _checkTilesetIsCleared(List<MovingTile> tiles) { for (Tile tile in tiles) { if (!tile.isCorrect()) { return false; @@ -206,25 +222,28 @@ class Home extends StatelessWidget { } Container _buildTilesetWidget(Data myProvider) { - List tiles = myProvider.tiles; + List<MovingTile> tiles = myProvider.tiles; Color borderColor = _checkTilesetIsCleared(tiles) ? Colors.green : Colors.orange; int tileIndex = 0; Table tileset = Table( - defaultColumnWidth: IntrinsicColumnWidth(), - border: TableBorder.all( - color: Colors.black, - style: BorderStyle.solid, - width: 2, - ), - children: [ - for (var row = 0; row < myProvider.tilesCount; row++) - TableRow(children: [ + defaultColumnWidth: IntrinsicColumnWidth(), + border: TableBorder.all( + color: Colors.black, + style: BorderStyle.solid, + width: 2, + ), + children: [ + for (var row = 0; row < myProvider.tilesCount; row++) + TableRow( + children: [ for (var col = 0; col < myProvider.tilesCount; col++) Column(children: [tiles[tileIndex++].widget(myProvider)]), - ]), - ]); + ], + ), + ], + ); return Container( margin: EdgeInsets.all(8), @@ -256,12 +275,15 @@ class Home extends StatelessWidget { ), ), child: Image( - image: AssetImage(myProvider.displayTipImage + image: AssetImage( + myProvider.displayTipImage ? getImageAssetName(myProvider.image) - : 'assets/ui/tip-hidden.png'), - width: _tipImageSize, - height: _tipImageSize, - fit: BoxFit.fill), + : 'assets/ui/tip-hidden.png', + ), + width: _tipImageSize, + height: _tipImageSize, + fit: BoxFit.fill, + ), ), onPressed: () => toggleDisplayTipImage(myProvider), ), @@ -286,30 +308,47 @@ class Home extends StatelessWidget { Container _buildWinMessage(Data myProvider) { return Container( - margin: EdgeInsets.all(2), - padding: EdgeInsets.all(2), - child: Table(defaultColumnWidth: IntrinsicColumnWidth(), children: [ + margin: EdgeInsets.all(2), + padding: EdgeInsets.all(2), + child: Table( + defaultColumnWidth: IntrinsicColumnWidth(), + children: [ TableRow( children: [ - Column(children: [ - Image(image: AssetImage('assets/icons/game_win.png'), fit: BoxFit.fill), - ]), - Column(children: [ - TextButton( - child: Container( - child: Image( + Column( + children: [ + Image( + image: AssetImage('assets/icons/game_win.png'), + fit: BoxFit.fill, + ), + ], + ), + Column( + children: [ + TextButton( + child: Container( + child: Image( image: AssetImage('assets/icons/button_back.png'), - fit: BoxFit.fill), + fit: BoxFit.fill, + ), + ), + onPressed: () => resetGame(myProvider), ), - onPressed: () => resetGame(myProvider), - ), - ]), - Column(children: [ - Image(image: AssetImage('assets/icons/game_win.png'), fit: BoxFit.fill), - ]), + ], + ), + Column( + children: [ + Image( + image: AssetImage('assets/icons/game_win.png'), + fit: BoxFit.fill, + ), + ], + ), ], ), - ])); + ], + ), + ); } Container _buildShufflingIndicatorWidget() { @@ -339,8 +378,7 @@ class Home extends StatelessWidget { var content; - double _tileImageSize = - (MediaQuery.of(context).size.width - 70) / _myProvider.tilesCount; + double _tileImageSize = (MediaQuery.of(context).size.width - 70) / _myProvider.tilesCount; if (_myProvider.isShufflingBoard) { content = _buildShufflingIndicatorWidget(); @@ -368,7 +406,9 @@ class Home extends StatelessWidget { ), margin: EdgeInsets.all(8), child: Image( - image: AssetImage('assets/icons/button_shuffle.png'), fit: BoxFit.fill), + image: AssetImage('assets/icons/button_shuffle.png'), + fit: BoxFit.fill, + ), ), onPressed: () => shuffleImages(_myProvider), ), @@ -385,20 +425,23 @@ class Home extends StatelessWidget { ), ), margin: EdgeInsets.all(8), - child: - Image(image: AssetImage('assets/icons/button_back.png'), fit: BoxFit.fill), + child: Image( + image: AssetImage('assets/icons/button_back.png'), + fit: BoxFit.fill, + ), ), onPressed: () => resetGame(_myProvider), ), ]; return Scaffold( - appBar: AppBar( - backgroundColor: themePrimaryColor, - actions: _myProvider.image == '' ? menuActions : gameActions, - ), - body: SafeArea( - child: Center(child: content), - )); + appBar: AppBar( + backgroundColor: themePrimaryColor, + actions: _myProvider.image == '' ? menuActions : gameActions, + ), + body: SafeArea( + child: Center(child: content), + ), + ); } } diff --git a/lib/utils/get_images_list.dart b/lib/utils/get_images_list.dart index e1221a9..3f590aa 100644 --- a/lib/utils/get_images_list.dart +++ b/lib/utils/get_images_list.dart @@ -5,7 +5,7 @@ import 'package:flutter/services.dart'; class GetImagesList { GetImagesList(); - List _images; + List _images = []; init() async { await imagesFromLocalFile(); diff --git a/pubspec.lock b/pubspec.lock index 9fbac1c..572027b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,7 +7,7 @@ packages: name: archive url: "https://pub.dartlang.org" source: hosted - version: "3.2.0" + version: "3.3.0" async: dependency: transitive description: @@ -56,7 +56,7 @@ packages: name: crypto url: "https://pub.dartlang.org" source: hosted - version: "3.0.1" + version: "3.0.2" fake_async: dependency: transitive description: @@ -80,7 +80,7 @@ packages: name: image url: "https://pub.dartlang.org" source: hosted - version: "3.1.1" + version: "3.2.0" matcher: dependency: transitive description: @@ -122,14 +122,14 @@ packages: name: petitparser url: "https://pub.dartlang.org" source: hosted - version: "4.4.0" + version: "5.0.0" provider: dependency: "direct main" description: name: provider url: "https://pub.dartlang.org" source: hosted - version: "6.0.2" + version: "6.0.3" sky_engine: dependency: transitive description: flutter @@ -183,7 +183,7 @@ packages: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.3.1" vector_math: dependency: transitive description: @@ -197,7 +197,7 @@ packages: name: xml url: "https://pub.dartlang.org" source: hosted - version: "5.3.1" + version: "6.1.0" sdks: - dart: ">=2.17.0-0 <3.0.0" + dart: ">=2.17.0 <3.0.0" flutter: ">=1.16.0" diff --git a/pubspec.yaml b/pubspec.yaml index dbeeb10..45376e6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 1.0.0+1 environment: - sdk: ">=2.7.0 <3.0.0" + sdk: ">=2.16.1 <3.0.0" dependencies: flutter: -- GitLab