Skip to content
Snippets Groups Projects
Commit ea02181b 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
1 merge request!2Resolve "Add select image page"
Pipeline #1175 passed
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
app.versionName=0.0.1
app.versionCode=1
app.versionName=0.0.2
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';
class Data extends ChangeNotifier {
// randomization
bool _searchingImage = false;
// application data
List _images = [];
String _image = '';
bool get searchingImage => _searchingImage;
String get image => _image;
set searchingImage(bool value) {
_searchingImage = value;
set updateImage(String value) {
_image = value;
notifyListeners();
}
String get image => _image;
List get images => _images;
set updateImage(String value) {
_image = value;
set updateImages(List value) {
_images = value;
notifyListeners();
}
......
......@@ -2,56 +2,125 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../provider/data.dart';
import '../utils/get_images_list.dart';
class Home extends StatelessWidget {
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
Widget build(BuildContext context) {
Data _myProvider = Provider.of<Data>(context);
return Scaffold(
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(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
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: FlatButton(
child: Text(
'🎲',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 50,
fontWeight: FontWeight.w600,
color: Colors.black,
),
),
),
),
],
),
),
],
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:
uses-material-design: true
assets:
- 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