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

Add select image page

parent 1cb5fee5
No related branches found
No related tags found
No related merge requests found
Pipeline #1174 passed
This commit is part of merge request !2. Comments created here will be created in the context of that merge request.
{
"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