Не отображается актуальное значение настроек
Пишу страницу пользовательских настроек, использую Shared Preference и setting_ui. Проблема заключается в том что при переключении toggle switch настройки сохраняются в shared preference, но при перезаходе в экран настроек toggle switch возвращается в прежнее положение false, если использовать hot reload, то переключатель примет нужное положение true или fals в зависимости от того какое значение было сохранено. Как исправить проблему отображения настроек?
Настройки
import 'package:flutter/material.dart';
import 'package:ingredients_scanner/models/product_preferences.dart';
import 'package:shared_preferences/shared_preferences.dart';
class UserPreferences extends ChangeNotifier {
UserPreferences._shared(final SharedPreferences sharedPreferences)
: _sharedPreferences = sharedPreferences;
static UserPreferences? _instance;
final SharedPreferences _sharedPreferences;
static Future<UserPreferences> getUserPreferences() async {
if (_instance == null) {
final SharedPreferences preferences =
await SharedPreferences.getInstance();
_instance = UserPreferences._shared(preferences);
}
return _instance!;
}
static const String _TAG_INIT = 'init';
static const String _TAG_CAMERA_FLASH = 'camera_flash';
Future<void> init(final ProductPreferences productPreferences) async {
if (_sharedPreferences.getBool(_TAG_INIT) != null) {
return;
}
await productPreferences.resetImportances();
await _sharedPreferences.setBool(_TAG_INIT, true);
}
Future<void> setCameraFlash(bool cameraFlash) async {
await _sharedPreferences.setBool(_TAG_CAMERA_FLASH, cameraFlash);
}
bool getCameraFlash() =>
_sharedPreferences.getBool(_TAG_CAMERA_FLASH) ?? false;
}
Отображение
import 'package:auto_route/annotations.dart';
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:ingredients_scanner/models/user_pereference.dart';
import 'package:settings_ui/settings_ui.dart';
@RoutePage()
class SettingsScreen extends StatefulWidget {
const SettingsScreen({super.key});
@override
State<SettingsScreen> createState() => _SettingsScreenState();
}
class _SettingsScreenState extends State<SettingsScreen> {
UserPreferences? service;
@override
void initState() {
loadPreferences();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Settings Screen')),
body: SettingsList(sections: [
SettingsSection(
tiles: [
SettingsTile(
title: const Text('Language'),
onPressed: (context) {},
),
SettingsTile.switchTile(
title: const Text('Camera Flash'),
initialValue: service?.getCameraFlash(),
onToggle: (value) {
setState(() {
service?.setCameraFlash(value);
});
},
),
],
),
]),
);
}
loadPreferences() async {
service = await UserPreferences.getUserPreferences();
}
}