From 2c02ef39c63acfaa609071edc1c72e9b6c6a1fb2 Mon Sep 17 00:00:00 2001 From: ALEZ-DEV Date: Fri, 17 May 2024 20:27:51 +0200 Subject: [PATCH] add shared preferences to keep setting state --- babylonia_terminal_launcher/lib/app.dart | 5 +- babylonia_terminal_launcher/lib/main.dart | 9 +++- .../lib/models/settings.dart | 46 +++++++++++++++---- .../lib/providers/game_state_provider.dart | 1 + .../lib/providers/settings_provider.dart | 6 ++- babylonia_terminal_launcher/pubspec.yaml | 1 + 6 files changed, 55 insertions(+), 13 deletions(-) diff --git a/babylonia_terminal_launcher/lib/app.dart b/babylonia_terminal_launcher/lib/app.dart index 4259ebe..c2e5993 100644 --- a/babylonia_terminal_launcher/lib/app.dart +++ b/babylonia_terminal_launcher/lib/app.dart @@ -7,14 +7,15 @@ import './screens/screens.dart'; import './providers/providers.dart'; class BabyloniaLauncher extends StatelessWidget { - const BabyloniaLauncher({super.key}); + const BabyloniaLauncher({super.key, required this.settingsProvider}); + final SettingsProvider settingsProvider; @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider( - create: (context) => SettingsProvider(), + create: (context) => settingsProvider, ), ChangeNotifierProvider( create: (context) => GameStateProvider(), diff --git a/babylonia_terminal_launcher/lib/main.dart b/babylonia_terminal_launcher/lib/main.dart index d394156..085044f 100644 --- a/babylonia_terminal_launcher/lib/main.dart +++ b/babylonia_terminal_launcher/lib/main.dart @@ -4,10 +4,17 @@ import 'package:media_kit/media_kit.dart'; import './app.dart'; import './messages/generated.dart'; +import './providers/providers.dart'; void main() async { await initializeRust(); WidgetsFlutterBinding.ensureInitialized(); MediaKit.ensureInitialized(); - runApp(const BabyloniaLauncher()); + + final SettingsProvider settings = SettingsProvider(); + await settings.init(); + + runApp(BabyloniaLauncher( + settingsProvider: settings, + )); } diff --git a/babylonia_terminal_launcher/lib/models/settings.dart b/babylonia_terminal_launcher/lib/models/settings.dart index 602fef6..706b851 100644 --- a/babylonia_terminal_launcher/lib/models/settings.dart +++ b/babylonia_terminal_launcher/lib/models/settings.dart @@ -1,4 +1,7 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; +import 'package:shared_preferences/shared_preferences.dart'; enum BackgroundType { contain, @@ -10,7 +13,40 @@ enum BackgroundType { } class Settings { - BackgroundType _backgroundType = BackgroundType.cover; + final SharedPreferences prefs; + + Settings({required this.prefs}); + + static Future create() async { + final prefs = await SharedPreferences.getInstance(); + return Settings(prefs: prefs); + } + + BackgroundType? _backgroundType; + String backgroundTypeKey = 'background_type'; + + BackgroundType get selectedBackgroundType { + final bt = prefs.getString(backgroundTypeKey); + if (bt == null) { + _backgroundType = BackgroundType.disable; + prefs.setString( + backgroundTypeKey, + getStringNameOfBackgroundType(_backgroundType!), + ); + } else { + _backgroundType ??= getBackgroundTypeFromString(bt); + } + + return _backgroundType!; + } + + set selectedBackgroundType(BackgroundType selectedBackground) { + _backgroundType = selectedBackground; + prefs.setString( + backgroundTypeKey, + getStringNameOfBackgroundType(selectedBackground), + ); + } static final List backgoundList = [ BackgroundType.contain, @@ -74,12 +110,4 @@ class Settings { 'Can\'t convert BackgroundType to widget BoxFit!'); } } - - BackgroundType get selectedBackgroundType { - return _backgroundType; - } - - set selectedBackgroundType(BackgroundType selectedBackground) { - _backgroundType = selectedBackground; - } } diff --git a/babylonia_terminal_launcher/lib/providers/game_state_provider.dart b/babylonia_terminal_launcher/lib/providers/game_state_provider.dart index 5a81793..c8fdee4 100644 --- a/babylonia_terminal_launcher/lib/providers/game_state_provider.dart +++ b/babylonia_terminal_launcher/lib/providers/game_state_provider.dart @@ -16,6 +16,7 @@ class GameStateProvider with ChangeNotifier { break; } isUpdating = false; + notifyListeners(); } } } diff --git a/babylonia_terminal_launcher/lib/providers/settings_provider.dart b/babylonia_terminal_launcher/lib/providers/settings_provider.dart index bd74114..1b9b97c 100644 --- a/babylonia_terminal_launcher/lib/providers/settings_provider.dart +++ b/babylonia_terminal_launcher/lib/providers/settings_provider.dart @@ -3,7 +3,11 @@ import 'package:flutter/material.dart'; import './../models/settings.dart'; class SettingsProvider with ChangeNotifier { - final Settings _settings = Settings(); + late final Settings _settings; + + Future init() async { + _settings = await Settings.create(); + } set setSelectedBackgroundType(BackgroundType selectedBackground) { _settings.selectedBackgroundType = selectedBackground; diff --git a/babylonia_terminal_launcher/pubspec.yaml b/babylonia_terminal_launcher/pubspec.yaml index 5cdb155..f777fcc 100644 --- a/babylonia_terminal_launcher/pubspec.yaml +++ b/babylonia_terminal_launcher/pubspec.yaml @@ -46,6 +46,7 @@ dependencies: provider: ^6.1.2 rinf: ^6.9.0 protobuf: ^3.1.0 + shared_preferences: ^2.2.3 dependency_overrides: media_kit: