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

Merge branch '2-add-select-image-page' into 'master'

Resolve "Add select image page"

Closes #2

See merge request !2
parents 1cb5fee5 ea02181b
No related branches found
No related tags found
1 merge request!2Resolve "Add select image page"
Pipeline #1182 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.1 app.versionName=0.0.2
app.versionCode=1 app.versionCode=2
{
"images": [
"acb90f2491a73ba81e9f3d540ba66ffb",
"78edb7a85c822c76eae85da9fcd31324",
"0962959cf3392e84b9816de7fd80b656",
"7c2f42e74e249ce9dad4a0802dde22c2",
""
]
}
assets/images/0962959cf3392e84b9816de7fd80b656.png

203 KiB

assets/images/78edb7a85c822c76eae85da9fcd31324.png

212 KiB

assets/images/7c2f42e74e249ce9dad4a0802dde22c2.png

257 KiB

assets/images/acb90f2491a73ba81e9f3d540ba66ffb.png

162 KiB

...@@ -2,21 +2,22 @@ import 'package:flutter/foundation.dart'; ...@@ -2,21 +2,22 @@ import 'package:flutter/foundation.dart';
class Data extends ChangeNotifier { class Data extends ChangeNotifier {
// randomization // application data
bool _searchingImage = false; List _images = [];
String _image = ''; String _image = '';
bool get searchingImage => _searchingImage; String get image => _image;
set searchingImage(bool value) { set updateImage(String value) {
_searchingImage = value; _image = value;
notifyListeners(); notifyListeners();
} }
String get image => _image; List get images => _images;
set updateImage(String value) { set updateImages(List value) {
_image = value; _images = value;
notifyListeners(); notifyListeners();
} }
......
...@@ -2,56 +2,125 @@ import 'package:flutter/material.dart'; ...@@ -2,56 +2,125 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../provider/data.dart'; import '../provider/data.dart';
import '../utils/get_images_list.dart';
class Home extends StatelessWidget { class Home extends StatelessWidget {
static const String id = 'home'; static const String id = 'home';
Future<void> resetGame(Data myProvider) async {
myProvider.updateImage = '';
}
Future<void> getImagesList(Data myProvider) async {
GetImagesList getImagesList;
getImagesList = GetImagesList();
await getImagesList.init();
if (getImagesList.images != null) {
myProvider.updateImages = getImagesList.images;
}
}
Container _buildImageSelectorItem(Data myProvider, String image) {
double imageSize = 200;
String imageAsset = 'assets/images/'+image+'.png';
return Container(
child: FlatButton(
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
border: Border.all(
color: Colors.blue[200],
width: 8,
),
),
margin: EdgeInsets.all(2),
child: Image(
image: AssetImage(imageAsset),
width: imageSize,
height: imageSize,
fit: BoxFit.fill
),
),
onPressed: () {
myProvider.updateImage = image;
},
),
);
}
Container _buildImageSelector(Data myProvider) {
if (myProvider.images.length == 0) {
getImagesList(myProvider);
}
List images = myProvider.images;
return Container(
padding: EdgeInsets.all(5),
child: ListView(
children: [
for (var image in images)
_buildImageSelectorItem(myProvider, image),
],
),
);
}
Container _buildGameWidget(Data myProvider) {
double imageSize = 250;
String imageAsset = 'assets/images/'+myProvider.image+'.png';
return Container(
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
margin: EdgeInsets.all(4),
padding: EdgeInsets.all(4),
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(4),
border: Border.all(
color: Colors.green,
width: 4,
),
),
child: Image(
image: AssetImage(imageAsset),
width: imageSize,
height: imageSize,
fit: BoxFit.fill
),
),
],
),
);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Data _myProvider = Provider.of<Data>(context); Data _myProvider = Provider.of<Data>(context);
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text('Puzzle game'), title: Text('Puzzle'),
actions: <Widget>[
_myProvider.image == ''
? Text('')
: IconButton(
icon: const Icon(Icons.arrow_left_outlined),
onPressed: () => resetGame(_myProvider),
),
],
), ),
body: Center( body: SafeArea(
child: Column( child: Center(
mainAxisAlignment: MainAxisAlignment.center, child: _myProvider.image == ''
children: <Widget>[ ? _buildImageSelector(_myProvider)
Container( : _buildGameWidget(_myProvider),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
margin: EdgeInsets.all(4),
padding: EdgeInsets.all(4),
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(4),
border: Border.all(
color: Colors.green,
width: 4,
),
),
child: FlatButton(
child: Text(
'🎲',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 50,
fontWeight: FontWeight.w600,
color: Colors.black,
),
),
),
),
],
),
),
],
), ),
), )
); );
} }
} }
import 'dart:async';
import 'dart:convert';
import 'package:flutter/services.dart';
import 'dart:math' show Random;
class GetImagesList {
GetImagesList();
List _images;
init() async {
await imagesFromLocalFile();
}
Future<void> imagesFromLocalFile() async {
String jsonString;
try {
jsonString = await rootBundle.loadString('assets/files/images.json');
final jsonResponse = await json.decode(jsonString);
List imagesList = jsonResponse['images'];
_images = imagesList;
} catch (e) {
_images = [];
}
// Remove empty images
_images.removeWhere((value) => (value == ''));
}
List get images => _images;
}
...@@ -19,3 +19,4 @@ flutter: ...@@ -19,3 +19,4 @@ flutter:
uses-material-design: true uses-material-design: true
assets: assets:
- assets/files/ - assets/files/
- assets/images/
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