From f0367b638e29db6dc61acd93b769e0dc0bf5dd7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Thu, 27 May 2021 16:19:51 +0200 Subject: [PATCH] Add swap tiles feature on drop tile on an other --- android/gradle.properties | 4 ++-- lib/entities/tile.dart | 9 ++++++++- lib/provider/data.dart | 13 +++++++++++++ lib/screens/home.dart | 6 +++--- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/android/gradle.properties b/android/gradle.properties index 135006f..85b94f8 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.6 -app.versionCode=6 +app.versionName=0.0.7 +app.versionCode=7 diff --git a/lib/entities/tile.dart b/lib/entities/tile.dart index e9919d7..2860b50 100644 --- a/lib/entities/tile.dart +++ b/lib/entities/tile.dart @@ -1,4 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +import '../provider/data.dart'; class Tile { final Image image; @@ -35,7 +38,7 @@ class Tile { ); } - Container widget() { + Container widget(Data myProvider) { return Container( child: DragTarget<List<int>>( builder: ( @@ -70,6 +73,10 @@ class Tile { }, onAccept: (List<int> data) { print(data.toString()); + myProvider.swapTiles( + [this.currentCol, this.currentRow], + data + ); }, ) ); diff --git a/lib/provider/data.dart b/lib/provider/data.dart index 5979a1b..601037d 100644 --- a/lib/provider/data.dart +++ b/lib/provider/data.dart @@ -1,5 +1,7 @@ import 'package:flutter/foundation.dart'; +import '../entities/tile.dart'; + class Data extends ChangeNotifier { // application data @@ -38,6 +40,17 @@ class Data extends ChangeNotifier { notifyListeners(); } + void swapTiles(List<int> tile1, List<int> tile2) { + int indexTile1 = _tiles.indexWhere((tile) => ((tile.currentCol == tile1[0]) && (tile.currentRow == tile1[1]))); + int indexTile2 = _tiles.indexWhere((tile) => ((tile.currentCol == tile2[0]) && (tile.currentRow == tile2[1]))); + + Tile swap = _tiles[indexTile1]; + _tiles[indexTile1] = _tiles[indexTile2]; + _tiles[indexTile2] = swap; + + notifyListeners(); + } + void resetGame() { _image = ''; notifyListeners(); diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 42432a2..6d7bd07 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -117,14 +117,14 @@ class Home extends StatelessWidget { y += height; } + tiles.shuffle(); + return tiles; } Container _buildTilesetWidget(Data myProvider) { List tiles = myProvider.tiles; - tiles.shuffle(); - int tileIndex = 0; Table tileset = Table( @@ -139,7 +139,7 @@ class Home extends StatelessWidget { for (var row = 0; row < _linesCount; row++) TableRow(children: [ for (var col = 0; col < _columnsCount; col++) - Column(children: [tiles[tileIndex++].widget()]), + Column(children: [tiles[tileIndex++].widget(myProvider)]), ]), ] ); -- GitLab