From 065a7a0c9e7085bc19a316fce81522267a31cef7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr>
Date: Fri, 30 Jul 2021 15:37:18 +0200
Subject: [PATCH] Save/retrieve settings

---
 android/gradle.properties                     |   4 +-
 .../metadata/android/en-US/changelogs/40.txt  |   1 +
 .../metadata/android/fr-FR/changelogs/40.txt  |   1 +
 lib/provider/data.dart                        |  21 ++-
 lib/screens/home.dart                         |  15 +-
 pubspec.lock                                  | 134 +++++++++++++++++-
 pubspec.yaml                                  |   1 +
 7 files changed, 165 insertions(+), 12 deletions(-)
 create mode 100644 fastlane/metadata/android/en-US/changelogs/40.txt
 create mode 100644 fastlane/metadata/android/fr-FR/changelogs/40.txt

diff --git a/android/gradle.properties b/android/gradle.properties
index c8bbff9..4d8dcd2 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.39
-app.versionCode=39
+app.versionName=0.0.40
+app.versionCode=40
diff --git a/fastlane/metadata/android/en-US/changelogs/40.txt b/fastlane/metadata/android/en-US/changelogs/40.txt
new file mode 100644
index 0000000..987d73c
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/40.txt
@@ -0,0 +1 @@
+Save/retrieve game settings
diff --git a/fastlane/metadata/android/fr-FR/changelogs/40.txt b/fastlane/metadata/android/fr-FR/changelogs/40.txt
new file mode 100644
index 0000000..c2e5e4f
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/40.txt
@@ -0,0 +1 @@
+Sauvegarde et recharge des paramètres de jeu
diff --git a/lib/provider/data.dart b/lib/provider/data.dart
index 8162bc6..7889fcf 100644
--- a/lib/provider/data.dart
+++ b/lib/provider/data.dart
@@ -1,4 +1,5 @@
 import 'package:flutter/foundation.dart';
+import 'package:shared_preferences/shared_preferences.dart';
 
 class Data extends ChangeNotifier {
 
@@ -12,9 +13,12 @@ class Data extends ChangeNotifier {
   List get availableSkins => _availableSkins;
 
   // Application default configuration
-  String _level = 'medium';
-  String _size = '3x3';
-  String _skin = 'default';
+  String _level = null;
+  String _levelDefault = 'medium';
+  String _size = null;
+  String _sizeDefault = '3x3';
+  String _skin = null;
+  String _skinDefault = 'default';
   bool _showConflicts = false;
 
   // Game data
@@ -78,7 +82,7 @@ class Data extends ChangeNotifier {
     }
   }
 
-  setParameterValue(String parameterCode, String parameterValue) {
+  setParameterValue(String parameterCode, String parameterValue) async {
     switch(parameterCode) {
       case 'difficulty': { updateLevel = parameterValue; }
       break;
@@ -87,6 +91,15 @@ class Data extends ChangeNotifier {
       case 'skin': { updateSkin = parameterValue; }
       break;
     }
+    final prefs = await SharedPreferences.getInstance();
+    prefs.setString(parameterCode, parameterValue);
+  }
+
+  void initParametersValues() async {
+    final prefs = await SharedPreferences.getInstance();
+    setParameterValue('difficulty', prefs.getString('difficulty') ?? _levelDefault);
+    setParameterValue('size', prefs.getString('size') ?? _sizeDefault);
+    setParameterValue('skin', prefs.getString('skin') ?? _skinDefault);
   }
 
   List get cells => _cells;
diff --git a/lib/screens/home.dart b/lib/screens/home.dart
index 8eca130..e797369 100644
--- a/lib/screens/home.dart
+++ b/lib/screens/home.dart
@@ -7,9 +7,22 @@ import '../layout/parameters.dart';
 import '../provider/data.dart';
 import '../utils/game_utils.dart';
 
-class Home extends StatelessWidget {
+class Home extends StatefulWidget {
   static const String id = 'home';
 
+  @override
+  _HomeState createState() => _HomeState();
+}
+
+class _HomeState extends State<Home> {
+  @override
+  void initState() {
+    super.initState();
+
+    Data myProvider = Provider.of<Data>(context, listen: false);
+    myProvider.initParametersValues();
+  }
+
   @override
   Widget build(BuildContext context) {
     Data myProvider = Provider.of<Data>(context);
diff --git a/pubspec.lock b/pubspec.lock
index 0d88ec6..183d1e8 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -35,7 +35,7 @@ packages:
       name: charcode
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.2.0"
+    version: "1.3.1"
   clock:
     dependency: transitive
     description:
@@ -57,6 +57,20 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "1.2.0"
+  ffi:
+    dependency: transitive
+    description:
+      name: ffi
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.1.2"
+  file:
+    dependency: transitive
+    description:
+      name: file
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "6.1.2"
   flutter:
     dependency: "direct main"
     description: flutter
@@ -67,6 +81,18 @@ packages:
     description: flutter
     source: sdk
     version: "0.0.0"
+  flutter_web_plugins:
+    dependency: transitive
+    description: flutter
+    source: sdk
+    version: "0.0.0"
+  js:
+    dependency: transitive
+    description:
+      name: js
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.6.3"
   matcher:
     dependency: transitive
     description:
@@ -80,7 +106,7 @@ packages:
       name: meta
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.4.0"
+    version: "1.7.0"
   nested:
     dependency: transitive
     description:
@@ -95,6 +121,48 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "1.8.0"
+  path_provider_linux:
+    dependency: transitive
+    description:
+      name: path_provider_linux
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.2"
+  path_provider_platform_interface:
+    dependency: transitive
+    description:
+      name: path_provider_platform_interface
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.1"
+  path_provider_windows:
+    dependency: transitive
+    description:
+      name: path_provider_windows
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.3"
+  platform:
+    dependency: transitive
+    description:
+      name: platform
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "3.0.0"
+  plugin_platform_interface:
+    dependency: transitive
+    description:
+      name: plugin_platform_interface
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.1"
+  process:
+    dependency: transitive
+    description:
+      name: process
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "4.2.3"
   provider:
     dependency: "direct main"
     description:
@@ -102,6 +170,48 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "5.0.0"
+  shared_preferences:
+    dependency: "direct main"
+    description:
+      name: shared_preferences
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.6"
+  shared_preferences_linux:
+    dependency: transitive
+    description:
+      name: shared_preferences_linux
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.2"
+  shared_preferences_macos:
+    dependency: transitive
+    description:
+      name: shared_preferences_macos
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.2"
+  shared_preferences_platform_interface:
+    dependency: transitive
+    description:
+      name: shared_preferences_platform_interface
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.0"
+  shared_preferences_web:
+    dependency: transitive
+    description:
+      name: shared_preferences_web
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.1"
+  shared_preferences_windows:
+    dependency: transitive
+    description:
+      name: shared_preferences_windows
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.2"
   sky_engine:
     dependency: transitive
     description: flutter
@@ -148,7 +258,7 @@ packages:
       name: test_api
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.4.0"
+    version: "0.4.1"
   typed_data:
     dependency: transitive
     description:
@@ -163,6 +273,20 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "2.1.0"
+  win32:
+    dependency: transitive
+    description:
+      name: win32
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.2.5"
+  xdg_directories:
+    dependency: transitive
+    description:
+      name: xdg_directories
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.2.0"
 sdks:
-  dart: ">=2.12.0 <3.0.0"
-  flutter: ">=1.16.0"
+  dart: ">=2.13.0 <3.0.0"
+  flutter: ">=2.0.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index 3823b90..2a25000 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -11,6 +11,7 @@ dependencies:
     sdk: flutter
   provider: ^5.0.0
   badges: ^2.0.1
+  shared_preferences: ^2.0.6
 
 dev_dependencies:
   flutter_test:
-- 
GitLab