From 4cda62e592fa8f0631223ded7d03e8dc8440a353 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Thu, 27 May 2021 21:25:46 +0200 Subject: [PATCH] Allow choose tileset division count --- android/gradle.properties | 4 +-- lib/provider/data.dart | 10 +++++++ lib/screens/home.dart | 60 +++++++++++++++++++++++++++++++-------- 3 files changed, 60 insertions(+), 14 deletions(-) diff --git a/android/gradle.properties b/android/gradle.properties index 65eed64..4bb5439 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.8 -app.versionCode=8 +app.versionName=0.0.9 +app.versionCode=9 diff --git a/lib/provider/data.dart b/lib/provider/data.dart index 601037d..3f05b5a 100644 --- a/lib/provider/data.dart +++ b/lib/provider/data.dart @@ -4,6 +4,9 @@ import '../entities/tile.dart'; class Data extends ChangeNotifier { + // application configuration + int _tilesCount = 3; + // application data List _images = []; String _image = ''; @@ -19,6 +22,13 @@ class Data extends ChangeNotifier { notifyListeners(); } + int get tilesCount => _tilesCount; + + set updateTilesCount(int value) { + _tilesCount = value; + notifyListeners(); + } + List get images => _images; set updateImages(List value) { diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 6d7bd07..bcb1e83 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -12,9 +12,6 @@ import '../utils/get_images_list.dart'; class Home extends StatelessWidget { static const String id = 'home'; - int _linesCount = 4; - int _columnsCount = 4; - double _selectorImageSize = 200; double _tipImageSize = 100; double _tileImageSize = 80; @@ -84,6 +81,43 @@ class Home extends StatelessWidget { ); } + FlatButton _buildTilesetSizeSelectorItem(Data myProvider, int value) { + BoxDecoration border = + myProvider.tilesCount == value + ? BoxDecoration( + borderRadius: BorderRadius.circular(4), + border: Border.all( + color: Colors.blue[100], + width: 4, + ), + ) + : null; + + return FlatButton( + child: Container( + padding: EdgeInsets.all(5), + decoration: border, + child: Text(value.toString()+'x'+value.toString()), + ), + onPressed: () { myProvider.updateTilesCount = value; }, + ); + } + + Container _buildTilesetSizeSelector(Data myProvider) { + return Container( + child: Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + _buildTilesetSizeSelectorItem(myProvider, 3), + _buildTilesetSizeSelectorItem(myProvider, 4), + ], + ), + ), + ); + } + Future<List<Tile>> splitImageInTiles(Data myProvider) async { String imageAsset = getImageAssetName(myProvider.image); Uint8List imageData = (await rootBundle.load(imageAsset)) @@ -92,12 +126,12 @@ class Home extends StatelessWidget { imglib.Image image = imglib.decodeImage(imageData); int x = 0, y = 0; - int width = (image.width / _linesCount).round(); - int height = (image.height / _columnsCount).round(); + int width = (image.width / myProvider.tilesCount).round(); + int height = (image.height / myProvider.tilesCount).round(); List<Tile> tiles = List<Tile>(); - for (int i = 0; i < _linesCount; i++) { - for (int j = 0; j < _columnsCount; j++) { + for (int i = 0; i < myProvider.tilesCount; i++) { + for (int j = 0; j < myProvider.tilesCount; j++) { tiles.add( Tile( Image.memory( @@ -136,9 +170,9 @@ class Home extends StatelessWidget { width: 2, ), children: [ - for (var row = 0; row < _linesCount; row++) + for (var row = 0; row < myProvider.tilesCount; row++) TableRow(children: [ - for (var col = 0; col < _columnsCount; col++) + for (var col = 0; col < myProvider.tilesCount; col++) Column(children: [tiles[tileIndex++].widget(myProvider)]), ]), ] @@ -236,9 +270,11 @@ class Home extends StatelessWidget { _myProvider.image == '' ? Text('') : IconButton( - icon: const Icon(Icons.arrow_left_outlined), - onPressed: () => resetGame(_myProvider), - ), + icon: const Icon(Icons.arrow_left_outlined), + onPressed: () => resetGame(_myProvider), + ) + , + _myProvider.image == '' ? _buildTilesetSizeSelector(_myProvider) : Text(''), ], ), body: SafeArea( -- GitLab