Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • android/org.benoitharrault.puzzlegame
1 result
Show changes
Commits on Source (4)
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
app.versionName=0.0.39
app.versionCode=39
app.versionName=0.0.41
app.versionCode=41
Clean some code, remove deprecations
Upgrade flutter framework and dependencies, fix/clean code
Nettoyage de code, correction des deprectations
Mise à jour du framework Flutter, corrections/améliorations de code
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'tile.dart';
import '../provider/data.dart';
......@@ -8,19 +7,8 @@ class MovingTile extends Tile {
int currentCol;
int currentRow;
MovingTile(
image,
size,
originalCol,
originalRow,
this.currentCol,
this.currentRow
): super(
image,
size,
originalCol,
originalRow
);
MovingTile(image, size, originalCol, originalRow, this.currentCol, this.currentRow)
: super(image, size, originalCol, originalRow);
Container _tileWidget() {
return Container(
......@@ -35,7 +23,7 @@ class MovingTile extends Tile {
image: this.image.image,
width: this.size,
height: this.size,
fit: BoxFit.fill
fit: BoxFit.fill,
),
);
}
......@@ -74,20 +62,13 @@ class MovingTile extends Tile {
);
},
onAccept: (List<int> data) {
myProvider.swapTiles(
[this.currentCol, this.currentRow],
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));
}
}
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../provider/data.dart';
class Tile{
class Tile {
final Image image;
final double size;
final int originalCol;
final int originalRow;
Tile(
@required this.image,
@required this.size,
@required this.originalCol,
@required this.originalRow,
this.image,
this.size,
this.originalCol,
this.originalRow,
);
Container widget(Data myProvider) {
return Container();
}
bool isCorrect() {}
bool isCorrect() {
return false;
}
}
......@@ -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(),
},
);
},
),
);
}
}
......@@ -3,14 +3,13 @@ import 'package:flutter/foundation.dart';
import '../entities/moving_tile.dart';
class Data extends ChangeNotifier {
// application configuration
int _tilesCount = 4;
// application data
List _images = [];
String _image = '';
List _tiles = [];
List<MovingTile> _tiles = [];
// application state
bool _isShufflingBoard = false;
......@@ -37,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();
}
......@@ -59,8 +58,10 @@ class Data extends ChangeNotifier {
}
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])));
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])));
MovingTile swap = _tiles[indexTile1];
_tiles[indexTile1] = _tiles[indexTile2];
......
......@@ -15,9 +15,9 @@ import '../utils/get_images_list.dart';
class Home extends StatelessWidget {
static const String id = 'home';
Color themePrimaryColor = Colors.blue;
double _tipImageSize = 100;
int _selectImageColumnsCount = 3;
final Color themePrimaryColor = Colors.blue;
final double _tipImageSize = 100;
final int _selectImageColumnsCount = 3;
Future<void> resetGame(Data myProvider) async {
myProvider.updateImage = '';
......@@ -29,14 +29,14 @@ class Home extends StatelessWidget {
}
String getImageAssetName(String imageCode) {
return 'assets/images/'+imageCode+'.png';
return 'assets/images/' + imageCode + '.png';
}
Future<void> getImagesList(Data myProvider) async {
GetImagesList getImagesList;
getImagesList = GetImagesList();
await getImagesList.init();
if (getImagesList.images != null) {
if (getImagesList.images.isNotEmpty) {
myProvider.updateImages = getImagesList.images;
shuffleImages(myProvider);
}
......@@ -45,7 +45,7 @@ class Home extends StatelessWidget {
Future<void> selectImage(Data myProvider, String imageCode, double tileImageSize) async {
myProvider.updateIsShufflingBoard = true;
myProvider.updateImage = imageCode;
Timer timer = new Timer(new Duration(seconds: 1), () {
new Timer(new Duration(seconds: 1), () {
splitImageInTiles(myProvider, tileImageSize);
});
}
......@@ -58,22 +58,26 @@ class Home extends StatelessWidget {
Container _buildImageSelectorItem(Data myProvider, String image, double tileImageSize) {
return Container(
child: FlatButton(
padding: EdgeInsets.all(2),
child: TextButton(
style: TextButton.styleFrom(
padding: EdgeInsets.all(2),
),
child: Container(
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
fit: BoxFit.fill,
),
),
onPressed: () { selectImage(myProvider, image, tileImageSize); },
onPressed: () {
selectImage(myProvider, image, tileImageSize);
},
),
);
}
......@@ -91,21 +95,20 @@ class Home extends StatelessWidget {
Table(
defaultColumnWidth: IntrinsicColumnWidth(),
children: [
for (var imageIndex = 0; imageIndex < images.length; imageIndex += _selectImageColumnsCount)
for (var imgIndex = 0;
imgIndex < images.length;
imgIndex += _selectImageColumnsCount)
TableRow(
children: [
for (var columnIndex = 0; columnIndex < _selectImageColumnsCount; columnIndex++)
for (var colIndex = 0; colIndex < _selectImageColumnsCount; colIndex++)
Column(
children: [
if (imageIndex + columnIndex < images.length)
if (imgIndex + colIndex < images.length)
_buildImageSelectorItem(
myProvider,
images[imageIndex + columnIndex],
tileImageSize
)
]
myProvider, images[imgIndex + colIndex], tileImageSize)
],
),
]
],
),
],
),
......@@ -114,8 +117,9 @@ class Home extends StatelessWidget {
);
}
FlatButton _buildTilesetSizeSelectorItem(Data myProvider, int value) {
String assetName = 'assets/icons/difficulty_' + value.toString() + 'x' + value.toString() + '.png';
TextButton _buildTilesetSizeSelectorItem(Data myProvider, int value) {
String assetName =
'assets/icons/difficulty_' + value.toString() + 'x' + value.toString() + '.png';
Color borderColor = themePrimaryColor;
......@@ -123,7 +127,7 @@ class Home extends StatelessWidget {
borderColor = Colors.white;
}
return FlatButton(
return TextButton(
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(4),
......@@ -135,10 +139,12 @@ class Home extends StatelessWidget {
margin: EdgeInsets.all(8),
child: Image(
image: AssetImage(assetName),
fit: BoxFit.fill
fit: BoxFit.fill,
),
),
onPressed: () { myProvider.updateTilesCount = value; },
onPressed: () {
myProvider.updateTilesCount = value;
},
);
}
......@@ -168,30 +174,33 @@ 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);
Uint8List imageData = (await rootBundle.load(imageAsset)).buffer.asUint8List();
imglib.Image image = imglib.decodeImage(imageData) ?? imglib.Image.fromBytes(1, 1, []);
int x = 0, y = 0;
int width = (image.width / myProvider.tilesCount).round();
int height = (image.height / myProvider.tilesCount).round();
List<MovingTile> tiles = List<MovingTile>();
List<MovingTile> tiles = [];
for (int i = 0; i < myProvider.tilesCount; i++) {
for (int j = 0; j < myProvider.tilesCount; j++) {
tiles.add(
MovingTile(
Image.memory(
imglib.encodeJpg(
imglib.copyCrop(image, x, y, width, height)
)
),
tileImageSize,
j, i,
j, i,
)
);
Uint8List tileData = new Uint8List.fromList(imglib.encodeJpg(imglib.copyCrop(
image,
x,
y,
width,
height,
)));
tiles.add(MovingTile(
Image.memory(tileData),
tileImageSize,
j,
i,
j,
i,
));
x += width;
}
......@@ -203,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;
......@@ -213,14 +222,13 @@ 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,
......@@ -228,11 +236,13 @@ class Home extends StatelessWidget {
),
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)]),
]),
]
TableRow(
children: [
for (var col = 0; col < myProvider.tilesCount; col++)
Column(children: [tiles[tileIndex++].widget(myProvider)]),
],
),
],
);
return Container(
......@@ -252,7 +262,7 @@ class Home extends StatelessWidget {
Container _buildTipWidget(Data myProvider) {
return Container(
child: FlatButton(
child: TextButton(
child: Container(
margin: EdgeInsets.all(4),
padding: EdgeInsets.all(4),
......@@ -267,12 +277,12 @@ class Home extends StatelessWidget {
child: Image(
image: AssetImage(
myProvider.displayTipImage
? getImageAssetName(myProvider.image)
: 'assets/ui/tip-hidden.png'
? getImageAssetName(myProvider.image)
: 'assets/ui/tip-hidden.png',
),
width: _tipImageSize,
height: _tipImageSize,
fit: BoxFit.fill
fit: BoxFit.fill,
),
),
onPressed: () => toggleDisplayTipImage(myProvider),
......@@ -288,7 +298,9 @@ class Home extends StatelessWidget {
children: [
_buildTilesetWidget(myProvider),
SizedBox(height: 20),
_checkTilesetIsCleared(myProvider.tiles) ? _buildWinMessage(myProvider) : _buildTipWidget(myProvider),
_checkTilesetIsCleared(myProvider.tiles)
? _buildWinMessage(myProvider)
: _buildTipWidget(myProvider),
],
),
);
......@@ -298,45 +310,44 @@ class Home extends StatelessWidget {
return Container(
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: [
FlatButton(
child: Container(
child: Image(
image: AssetImage('assets/icons/button_back.png'),
fit: BoxFit.fill
),
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,
),
onPressed: () => resetGame(myProvider),
),
]
),
Column(
children: [
Image(
image: AssetImage('assets/icons/game_win.png'),
fit: BoxFit.fill
),
]
),
onPressed: () => resetGame(myProvider),
),
],
),
Column(
children: [
Image(
image: AssetImage('assets/icons/game_win.png'),
fit: BoxFit.fill,
),
],
),
],
),
]
)
],
),
);
}
......@@ -384,7 +395,7 @@ class Home extends StatelessWidget {
_buildTilesetSizeSelectorItem(_myProvider, 3),
_buildTilesetSizeSelectorItem(_myProvider, 4),
_buildTilesetSizeSelectorItem(_myProvider, 5),
FlatButton(
TextButton(
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(4),
......@@ -396,7 +407,7 @@ class Home extends StatelessWidget {
margin: EdgeInsets.all(8),
child: Image(
image: AssetImage('assets/icons/button_shuffle.png'),
fit: BoxFit.fill
fit: BoxFit.fill,
),
),
onPressed: () => shuffleImages(_myProvider),
......@@ -404,7 +415,7 @@ class Home extends StatelessWidget {
];
List<Widget> gameActions = [
FlatButton(
TextButton(
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(4),
......@@ -416,7 +427,7 @@ class Home extends StatelessWidget {
margin: EdgeInsets.all(8),
child: Image(
image: AssetImage('assets/icons/button_back.png'),
fit: BoxFit.fill
fit: BoxFit.fill,
),
),
onPressed: () => resetGame(_myProvider),
......@@ -429,10 +440,8 @@ class Home extends StatelessWidget {
actions: _myProvider.image == '' ? menuActions : gameActions,
),
body: SafeArea(
child: Center(
child: content
),
)
child: Center(child: content),
),
);
}
}
import 'dart:async';
import 'dart:convert';
import 'package:flutter/services.dart';
import 'dart:math' show Random;
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:
......@@ -49,21 +49,21 @@ packages:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.15.0"
version: "1.16.0"
crypto:
dependency: transitive
description:
name: crypto
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
version: "3.0.2"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
version: "1.3.0"
flutter:
dependency: "direct main"
description: flutter
......@@ -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:
......@@ -94,7 +94,7 @@ packages:
name: material_color_utilities
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.3"
version: "0.1.4"
meta:
dependency: transitive
description:
......@@ -115,21 +115,21 @@ packages:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0"
version: "1.8.1"
petitparser:
dependency: transitive
description:
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
......@@ -141,7 +141,7 @@ packages:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.1"
version: "1.8.2"
stack_trace:
dependency: transitive
description:
......@@ -176,28 +176,28 @@ packages:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.8"
version: "0.4.9"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
version: "1.3.1"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
version: "2.1.2"
xml:
dependency: transitive
description:
name: xml
url: "https://pub.dartlang.org"
source: hosted
version: "5.3.1"
version: "6.1.0"
sdks:
dart: ">=2.14.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:
......
// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility that Flutter provides. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:puzzlegame/main.dart';
void main() {
}