Skip to content
Snippets Groups Projects
Commit 705f1397 authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Merge branch '45-upgrade-flutter-framework-and-dependencies' into 'master'

Resolve "Upgrade Flutter framework and dependencies"

Closes #45

See merge request !43
parents 9d26ee74 c62009e2
No related branches found
No related tags found
1 merge request!43Resolve "Upgrade Flutter framework and dependencies"
Pipeline #2941 passed
org.gradle.jvmargs=-Xmx1536M org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
app.versionName=0.0.40 app.versionName=0.0.41
app.versionCode=40 app.versionCode=41
Upgrade flutter framework and dependencies, fix/clean code
Mise à jour du framework Flutter, corrections/améliorations de code
...@@ -20,51 +20,55 @@ class MovingTile extends Tile { ...@@ -20,51 +20,55 @@ class MovingTile extends Tile {
), ),
), ),
child: Image( 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) { Container widget(Data myProvider) {
return Container( return Container(
child: DragTarget<List<int>>( child: DragTarget<List<int>>(
builder: ( builder: (
BuildContext context, BuildContext context,
List<dynamic> accepted, List<dynamic> accepted,
List<dynamic> rejected, List<dynamic> rejected,
) { ) {
return Container( return Container(
height: this.size, height: this.size,
width: this.size, width: this.size,
color: Colors.cyan, color: Colors.cyan,
child: Draggable<List<int>>( child: Draggable<List<int>>(
data: [ data: [
this.currentCol, this.currentCol,
this.currentRow, this.currentRow,
], ],
// Widget when draggable is stationary // Widget when draggable is stationary
child: this._tileWidget(), child: this._tileWidget(),
// Widget when draggable is being dragged // Widget when draggable is being dragged
feedback: this._tileWidget(), feedback: this._tileWidget(),
// Widget to display on original place when being dragged // Widget to display on original place when being dragged
childWhenDragging: Container( childWhenDragging: Container(
height: this.size, height: this.size,
width: this.size, width: this.size,
color: Colors.pinkAccent, color: Colors.pinkAccent,
),
), ),
), );
); },
}, onAccept: (List<int> data) {
onAccept: (List<int> data) { myProvider.swapTiles([this.currentCol, this.currentRow], data);
myProvider.swapTiles([this.currentCol, this.currentRow], data); },
}, ),
)); );
} }
bool isCorrect() { bool isCorrect() {
return ((this.currentRow == this.originalRow) && return ((this.currentRow == this.originalRow) && (this.currentCol == this.originalCol));
(this.currentCol == this.originalCol));
} }
} }
...@@ -16,19 +16,21 @@ class MyApp extends StatelessWidget { ...@@ -16,19 +16,21 @@ class MyApp extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return ChangeNotifierProvider( return ChangeNotifierProvider(
create: (BuildContext context) => Data(), create: (BuildContext context) => Data(),
child: Consumer<Data>(builder: (context, data, child) { child: Consumer<Data>(
return MaterialApp( builder: (context, data, child) {
debugShowCheckedModeBanner: false, return MaterialApp(
theme: ThemeData( debugShowCheckedModeBanner: false,
primaryColor: Colors.blue, theme: ThemeData(
visualDensity: VisualDensity.adaptivePlatformDensity, primaryColor: Colors.blue,
), visualDensity: VisualDensity.adaptivePlatformDensity,
home: Home(), ),
routes: { home: Home(),
Home.id: (context) => Home(), routes: {
}, Home.id: (context) => Home(),
); },
}), );
},
),
); );
} }
} }
...@@ -9,7 +9,7 @@ class Data extends ChangeNotifier { ...@@ -9,7 +9,7 @@ class Data extends ChangeNotifier {
// application data // application data
List _images = []; List _images = [];
String _image = ''; String _image = '';
List _tiles = []; List<MovingTile> _tiles = [];
// application state // application state
bool _isShufflingBoard = false; bool _isShufflingBoard = false;
...@@ -36,9 +36,9 @@ class Data extends ChangeNotifier { ...@@ -36,9 +36,9 @@ class Data extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
List get tiles => _tiles; List<MovingTile> get tiles => _tiles;
set updateTiles(List value) { set updateTiles(List<MovingTile> value) {
_tiles = value; _tiles = value;
notifyListeners(); notifyListeners();
} }
......
...@@ -36,14 +36,13 @@ class Home extends StatelessWidget { ...@@ -36,14 +36,13 @@ class Home extends StatelessWidget {
GetImagesList getImagesList; GetImagesList getImagesList;
getImagesList = GetImagesList(); getImagesList = GetImagesList();
await getImagesList.init(); await getImagesList.init();
if (getImagesList.images != null) { if (getImagesList.images.isNotEmpty) {
myProvider.updateImages = getImagesList.images; myProvider.updateImages = getImagesList.images;
shuffleImages(myProvider); shuffleImages(myProvider);
} }
} }
Future<void> selectImage( Future<void> selectImage(Data myProvider, String imageCode, double tileImageSize) async {
Data myProvider, String imageCode, double tileImageSize) async {
myProvider.updateIsShufflingBoard = true; myProvider.updateIsShufflingBoard = true;
myProvider.updateImage = imageCode; myProvider.updateImage = imageCode;
new Timer(new Duration(seconds: 1), () { new Timer(new Duration(seconds: 1), () {
...@@ -67,11 +66,14 @@ class Home extends StatelessWidget { ...@@ -67,11 +66,14 @@ class Home extends StatelessWidget {
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(4), borderRadius: BorderRadius.circular(4),
border: Border.all( border: Border.all(
color: Colors.blue[200], color: Colors.blue.shade200,
width: 4, width: 4,
), ),
), ),
child: Image(image: AssetImage(getImageAssetName(image)), fit: BoxFit.fill), child: Image(
image: AssetImage(getImageAssetName(image)),
fit: BoxFit.fill,
),
), ),
onPressed: () { onPressed: () {
selectImage(myProvider, image, tileImageSize); selectImage(myProvider, image, tileImageSize);
...@@ -93,19 +95,21 @@ class Home extends StatelessWidget { ...@@ -93,19 +95,21 @@ class Home extends StatelessWidget {
Table( Table(
defaultColumnWidth: IntrinsicColumnWidth(), defaultColumnWidth: IntrinsicColumnWidth(),
children: [ children: [
for (var imageIndex = 0; for (var imgIndex = 0;
imageIndex < images.length; imgIndex < images.length;
imageIndex += _selectImageColumnsCount) imgIndex += _selectImageColumnsCount)
TableRow(children: [ TableRow(
for (var columnIndex = 0; children: [
columnIndex < _selectImageColumnsCount; for (var colIndex = 0; colIndex < _selectImageColumnsCount; colIndex++)
columnIndex++) Column(
Column(children: [ children: [
if (imageIndex + columnIndex < images.length) if (imgIndex + colIndex < images.length)
_buildImageSelectorItem( _buildImageSelectorItem(
myProvider, images[imageIndex + columnIndex], tileImageSize) myProvider, images[imgIndex + colIndex], tileImageSize)
]), ],
]), ),
],
),
], ],
), ),
], ],
...@@ -133,7 +137,10 @@ class Home extends StatelessWidget { ...@@ -133,7 +137,10 @@ class Home extends StatelessWidget {
), ),
), ),
margin: EdgeInsets.all(8), margin: EdgeInsets.all(8),
child: Image(image: AssetImage(assetName), fit: BoxFit.fill), child: Image(
image: AssetImage(assetName),
fit: BoxFit.fill,
),
), ),
onPressed: () { onPressed: () {
myProvider.updateTilesCount = value; myProvider.updateTilesCount = value;
...@@ -168,7 +175,8 @@ class Home extends StatelessWidget { ...@@ -168,7 +175,8 @@ class Home extends StatelessWidget {
Future<void> splitImageInTiles(Data myProvider, double tileImageSize) async { Future<void> splitImageInTiles(Data myProvider, double tileImageSize) async {
String imageAsset = getImageAssetName(myProvider.image); String imageAsset = getImageAssetName(myProvider.image);
Uint8List imageData = (await rootBundle.load(imageAsset)).buffer.asUint8List(); 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 x = 0, y = 0;
int width = (image.width / myProvider.tilesCount).round(); int width = (image.width / myProvider.tilesCount).round();
...@@ -177,8 +185,16 @@ class Home extends StatelessWidget { ...@@ -177,8 +185,16 @@ class Home extends StatelessWidget {
List<MovingTile> tiles = []; List<MovingTile> tiles = [];
for (int i = 0; i < myProvider.tilesCount; i++) { for (int i = 0; i < myProvider.tilesCount; i++) {
for (int j = 0; j < myProvider.tilesCount; j++) { 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( tiles.add(MovingTile(
Image.memory(imglib.encodeJpg(imglib.copyCrop(image, x, y, width, height))), Image.memory(tileData),
tileImageSize, tileImageSize,
j, j,
i, i,
...@@ -196,7 +212,7 @@ class Home extends StatelessWidget { ...@@ -196,7 +212,7 @@ class Home extends StatelessWidget {
myProvider.updateIsShufflingBoard = false; myProvider.updateIsShufflingBoard = false;
} }
bool _checkTilesetIsCleared(List<Tile> tiles) { bool _checkTilesetIsCleared(List<MovingTile> tiles) {
for (Tile tile in tiles) { for (Tile tile in tiles) {
if (!tile.isCorrect()) { if (!tile.isCorrect()) {
return false; return false;
...@@ -206,25 +222,28 @@ class Home extends StatelessWidget { ...@@ -206,25 +222,28 @@ class Home extends StatelessWidget {
} }
Container _buildTilesetWidget(Data myProvider) { Container _buildTilesetWidget(Data myProvider) {
List tiles = myProvider.tiles; List<MovingTile> tiles = myProvider.tiles;
Color borderColor = _checkTilesetIsCleared(tiles) ? Colors.green : Colors.orange; Color borderColor = _checkTilesetIsCleared(tiles) ? Colors.green : Colors.orange;
int tileIndex = 0; int tileIndex = 0;
Table tileset = Table( Table tileset = Table(
defaultColumnWidth: IntrinsicColumnWidth(), defaultColumnWidth: IntrinsicColumnWidth(),
border: TableBorder.all( border: TableBorder.all(
color: Colors.black, color: Colors.black,
style: BorderStyle.solid, style: BorderStyle.solid,
width: 2, width: 2,
), ),
children: [ children: [
for (var row = 0; row < myProvider.tilesCount; row++) for (var row = 0; row < myProvider.tilesCount; row++)
TableRow(children: [ TableRow(
children: [
for (var col = 0; col < myProvider.tilesCount; col++) for (var col = 0; col < myProvider.tilesCount; col++)
Column(children: [tiles[tileIndex++].widget(myProvider)]), Column(children: [tiles[tileIndex++].widget(myProvider)]),
]), ],
]); ),
],
);
return Container( return Container(
margin: EdgeInsets.all(8), margin: EdgeInsets.all(8),
...@@ -256,12 +275,15 @@ class Home extends StatelessWidget { ...@@ -256,12 +275,15 @@ class Home extends StatelessWidget {
), ),
), ),
child: Image( child: Image(
image: AssetImage(myProvider.displayTipImage image: AssetImage(
myProvider.displayTipImage
? getImageAssetName(myProvider.image) ? getImageAssetName(myProvider.image)
: 'assets/ui/tip-hidden.png'), : 'assets/ui/tip-hidden.png',
width: _tipImageSize, ),
height: _tipImageSize, width: _tipImageSize,
fit: BoxFit.fill), height: _tipImageSize,
fit: BoxFit.fill,
),
), ),
onPressed: () => toggleDisplayTipImage(myProvider), onPressed: () => toggleDisplayTipImage(myProvider),
), ),
...@@ -286,30 +308,47 @@ class Home extends StatelessWidget { ...@@ -286,30 +308,47 @@ class Home extends StatelessWidget {
Container _buildWinMessage(Data myProvider) { Container _buildWinMessage(Data myProvider) {
return Container( return Container(
margin: EdgeInsets.all(2), margin: EdgeInsets.all(2),
padding: EdgeInsets.all(2), padding: EdgeInsets.all(2),
child: Table(defaultColumnWidth: IntrinsicColumnWidth(), children: [ child: Table(
defaultColumnWidth: IntrinsicColumnWidth(),
children: [
TableRow( TableRow(
children: [ children: [
Column(children: [ Column(
Image(image: AssetImage('assets/icons/game_win.png'), fit: BoxFit.fill), children: [
]), Image(
Column(children: [ image: AssetImage('assets/icons/game_win.png'),
TextButton( fit: BoxFit.fill,
child: Container( ),
child: Image( ],
),
Column(
children: [
TextButton(
child: Container(
child: Image(
image: AssetImage('assets/icons/button_back.png'), image: AssetImage('assets/icons/button_back.png'),
fit: BoxFit.fill), fit: BoxFit.fill,
),
),
onPressed: () => resetGame(myProvider),
), ),
onPressed: () => resetGame(myProvider), ],
), ),
]), Column(
Column(children: [ children: [
Image(image: AssetImage('assets/icons/game_win.png'), fit: BoxFit.fill), Image(
]), image: AssetImage('assets/icons/game_win.png'),
fit: BoxFit.fill,
),
],
),
], ],
), ),
])); ],
),
);
} }
Container _buildShufflingIndicatorWidget() { Container _buildShufflingIndicatorWidget() {
...@@ -339,8 +378,7 @@ class Home extends StatelessWidget { ...@@ -339,8 +378,7 @@ class Home extends StatelessWidget {
var content; var content;
double _tileImageSize = double _tileImageSize = (MediaQuery.of(context).size.width - 70) / _myProvider.tilesCount;
(MediaQuery.of(context).size.width - 70) / _myProvider.tilesCount;
if (_myProvider.isShufflingBoard) { if (_myProvider.isShufflingBoard) {
content = _buildShufflingIndicatorWidget(); content = _buildShufflingIndicatorWidget();
...@@ -368,7 +406,9 @@ class Home extends StatelessWidget { ...@@ -368,7 +406,9 @@ class Home extends StatelessWidget {
), ),
margin: EdgeInsets.all(8), margin: EdgeInsets.all(8),
child: Image( 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), onPressed: () => shuffleImages(_myProvider),
), ),
...@@ -385,20 +425,23 @@ class Home extends StatelessWidget { ...@@ -385,20 +425,23 @@ class Home extends StatelessWidget {
), ),
), ),
margin: EdgeInsets.all(8), margin: EdgeInsets.all(8),
child: child: Image(
Image(image: AssetImage('assets/icons/button_back.png'), fit: BoxFit.fill), image: AssetImage('assets/icons/button_back.png'),
fit: BoxFit.fill,
),
), ),
onPressed: () => resetGame(_myProvider), onPressed: () => resetGame(_myProvider),
), ),
]; ];
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
backgroundColor: themePrimaryColor, backgroundColor: themePrimaryColor,
actions: _myProvider.image == '' ? menuActions : gameActions, actions: _myProvider.image == '' ? menuActions : gameActions,
), ),
body: SafeArea( body: SafeArea(
child: Center(child: content), child: Center(child: content),
)); ),
);
} }
} }
...@@ -5,7 +5,7 @@ import 'package:flutter/services.dart'; ...@@ -5,7 +5,7 @@ import 'package:flutter/services.dart';
class GetImagesList { class GetImagesList {
GetImagesList(); GetImagesList();
List _images; List _images = [];
init() async { init() async {
await imagesFromLocalFile(); await imagesFromLocalFile();
......
...@@ -7,7 +7,7 @@ packages: ...@@ -7,7 +7,7 @@ packages:
name: archive name: archive
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.2.0" version: "3.3.0"
async: async:
dependency: transitive dependency: transitive
description: description:
...@@ -56,7 +56,7 @@ packages: ...@@ -56,7 +56,7 @@ packages:
name: crypto name: crypto
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.0.1" version: "3.0.2"
fake_async: fake_async:
dependency: transitive dependency: transitive
description: description:
...@@ -80,7 +80,7 @@ packages: ...@@ -80,7 +80,7 @@ packages:
name: image name: image
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.1.1" version: "3.2.0"
matcher: matcher:
dependency: transitive dependency: transitive
description: description:
...@@ -122,14 +122,14 @@ packages: ...@@ -122,14 +122,14 @@ packages:
name: petitparser name: petitparser
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.4.0" version: "5.0.0"
provider: provider:
dependency: "direct main" dependency: "direct main"
description: description:
name: provider name: provider
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "6.0.2" version: "6.0.3"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
...@@ -183,7 +183,7 @@ packages: ...@@ -183,7 +183,7 @@ packages:
name: typed_data name: typed_data
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.3.0" version: "1.3.1"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
...@@ -197,7 +197,7 @@ packages: ...@@ -197,7 +197,7 @@ packages:
name: xml name: xml
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "5.3.1" version: "6.1.0"
sdks: sdks:
dart: ">=2.17.0-0 <3.0.0" dart: ">=2.17.0 <3.0.0"
flutter: ">=1.16.0" flutter: ">=1.16.0"
...@@ -4,7 +4,7 @@ publish_to: 'none' ...@@ -4,7 +4,7 @@ publish_to: 'none'
version: 1.0.0+1 version: 1.0.0+1
environment: environment:
sdk: ">=2.7.0 <3.0.0" sdk: ">=2.16.1 <3.0.0"
dependencies: dependencies:
flutter: flutter:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment