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
android.useAndroidX=true
android.enableJetifier=true
app.versionName=0.0.40
app.versionCode=40
app.versionName=0.0.41
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 {
),
),
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));
}
}
......@@ -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(),
},
);
},
),
);
}
}
......@@ -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();
}
......
......@@ -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),
),
);
}
}
......@@ -5,7 +5,7 @@ import 'package:flutter/services.dart';
class GetImagesList {
GetImagesList();
List _images;
List _images = [];
init() async {
await imagesFromLocalFile();
......
......@@ -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"
......@@ -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:
......
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