add shared preferences to keep setting state

This commit is contained in:
ALEZ-DEV 2024-05-17 20:27:51 +02:00
parent 5c52ddb586
commit 2c02ef39c6
6 changed files with 55 additions and 13 deletions

View File

@ -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(),

View File

@ -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,
));
}

View File

@ -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<Settings> 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<BackgroundType> 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;
}
}

View File

@ -16,6 +16,7 @@ class GameStateProvider with ChangeNotifier {
break;
}
isUpdating = false;
notifyListeners();
}
}
}

View File

@ -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;

View File

@ -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: