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
{
"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,23 +2,75 @@ import 'package:flutter/material.dart'; ...@@ -2,23 +2,75 @@ 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';
@override Future<void> resetGame(Data myProvider) async {
Widget build(BuildContext context) { myProvider.updateImage = '';
Data _myProvider = Provider.of<Data>(context); }
return Scaffold( Future<void> getImagesList(Data myProvider) async {
appBar: AppBar( GetImagesList getImagesList;
title: Text('Puzzle game'), 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,
), ),
body: Center( ),
child: Column( margin: EdgeInsets.all(2),
mainAxisAlignment: MainAxisAlignment.center, child: Image(
children: <Widget>[ image: AssetImage(imageAsset),
Container( 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( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
...@@ -34,24 +86,41 @@ class Home extends StatelessWidget { ...@@ -34,24 +86,41 @@ class Home extends StatelessWidget {
width: 4, width: 4,
), ),
), ),
child: FlatButton( child: Image(
child: Text( image: AssetImage(imageAsset),
'🎲', width: imageSize,
textAlign: TextAlign.center, height: imageSize,
style: TextStyle( fit: BoxFit.fill
fontSize: 50,
fontWeight: FontWeight.w600,
color: Colors.black,
),
),
), ),
), ),
], ],
), ),
);
}
@override
Widget build(BuildContext context) {
Data _myProvider = Provider.of<Data>(context);
return Scaffold(
appBar: AppBar(
title: Text('Puzzle'),
actions: <Widget>[
_myProvider.image == ''
? Text('')
: IconButton(
icon: const Icon(Icons.arrow_left_outlined),
onPressed: () => resetGame(_myProvider),
), ),
], ],
), ),
body: SafeArea(
child: Center(
child: _myProvider.image == ''
? _buildImageSelector(_myProvider)
: _buildGameWidget(_myProvider),
), ),
)
); );
} }
} }
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.
Please register or to comment