diff --git a/android/gradle.properties b/android/gradle.properties index bc2d95e8567abcfd41c26ebeb95fced48f43e773..818e87b23b224ced309ae5c147e5ed827826e237 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,5 +1,5 @@ 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 diff --git a/assets/files/images.json b/assets/files/images.json new file mode 100644 index 0000000000000000000000000000000000000000..059fd9cddbfce35aea8998e40b73768c370b5411 --- /dev/null +++ b/assets/files/images.json @@ -0,0 +1,9 @@ +{ + "images": [ + "acb90f2491a73ba81e9f3d540ba66ffb", + "78edb7a85c822c76eae85da9fcd31324", + "0962959cf3392e84b9816de7fd80b656", + "7c2f42e74e249ce9dad4a0802dde22c2", + "" + ] +} diff --git a/assets/images/0962959cf3392e84b9816de7fd80b656.png b/assets/images/0962959cf3392e84b9816de7fd80b656.png new file mode 100644 index 0000000000000000000000000000000000000000..0f291e2a7462f17997ecebc6b2b42903d6e7addf Binary files /dev/null and b/assets/images/0962959cf3392e84b9816de7fd80b656.png differ diff --git a/assets/images/78edb7a85c822c76eae85da9fcd31324.png b/assets/images/78edb7a85c822c76eae85da9fcd31324.png new file mode 100644 index 0000000000000000000000000000000000000000..14442f59574386590e2ff3dcfa8c57e83f898ee9 Binary files /dev/null and b/assets/images/78edb7a85c822c76eae85da9fcd31324.png differ diff --git a/assets/images/7c2f42e74e249ce9dad4a0802dde22c2.png b/assets/images/7c2f42e74e249ce9dad4a0802dde22c2.png new file mode 100644 index 0000000000000000000000000000000000000000..d33dd6253a9ca5e766dee502cdd89a9d92004d05 Binary files /dev/null and b/assets/images/7c2f42e74e249ce9dad4a0802dde22c2.png differ diff --git a/assets/images/acb90f2491a73ba81e9f3d540ba66ffb.png b/assets/images/acb90f2491a73ba81e9f3d540ba66ffb.png new file mode 100644 index 0000000000000000000000000000000000000000..8e7ab6e66364fe10bb5bd220ee7fa824c4bba0af Binary files /dev/null and b/assets/images/acb90f2491a73ba81e9f3d540ba66ffb.png differ diff --git a/lib/provider/data.dart b/lib/provider/data.dart index 4cc589c9909302b9db1c6aee006128755da24337..d61bebb8103b208285f8005b61bb39906add3e74 100644 --- a/lib/provider/data.dart +++ b/lib/provider/data.dart @@ -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(); } diff --git a/lib/screens/home.dart b/lib/screens/home.dart index cfbb3d6d1a506b2bddf30c4ea5f92520933227f7..8e10bef92f5a7433dfea81da38c397ea322de1ae 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -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), ), - ), + ) ); } } diff --git a/lib/utils/get_images_list.dart b/lib/utils/get_images_list.dart new file mode 100644 index 0000000000000000000000000000000000000000..b0498796164a7da03a5cf5a7423526470b06e94b --- /dev/null +++ b/lib/utils/get_images_list.dart @@ -0,0 +1,31 @@ +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; +} diff --git a/pubspec.yaml b/pubspec.yaml index 2f3c8064f6121adac1db4dcefe0e513a1a02a215..b580f698c318185ea50c34247f965dc1cec08ec3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -19,3 +19,4 @@ flutter: uses-material-design: true assets: - assets/files/ + - assets/images/