【发布时间】:2022-01-03 00:28:05
【问题描述】:
我正在尝试在应用加载时加载已保存的首选项,但不知道该怎么做。我要么得到错误,要么最终创建了一个循环。
providers.dart
class SettingsProvider with ChangeNotifier {
SharedPreferences? _prefs;
String _savedCurrency = '£';
String _currentTheme = 'light';
String get currencySymbol => _savedCurrency;
String get currentTheme => _currentTheme;
_initPrefs() async {
_prefs ??= await SharedPreferences.getInstance();
}
loadSettings() {
_savedCurrency = '£';
_currentTheme = 'light';
loadSavedTheme();
loadSavedCurrency();
}
// Currency
Future<void> loadSavedCurrency() async {
await _initPrefs();
_savedCurrency = _prefs!.getString('currency') ?? '£';
notifyListeners();
}
Future<void> saveNewCurrency(String newCurrency) async {
await _initPrefs();
_prefs!.setString('currency', newCurrency);
_savedCurrency = newCurrency;
notifyListeners();
}
//Theme
Future<void> loadSavedTheme() async {
await _initPrefs();
_currentTheme = _prefs!.getString('theme') ?? '£';
notifyListeners();
}
Future<void> saveNewTheme(String newTheme) async {
await _initPrefs();
_prefs!.setString('theme', newTheme);
_currentTheme = newTheme;
notifyListeners();
}
}
main.dart
Future main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) => MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => GoogleSignInProvider()),
ChangeNotifierProvider(
create: (_) => SettingsProvider().loadSettings()),
],
builder: (context, child) {
String? _theme =
Provider.of<SettingsProvider>(context, listen: true)
.currentTheme;
print('theme is $_theme');
return MaterialApp(
home: LandingPage(),
theme: ThemeData.light(),
darkTheme: ThemeData.dark(),
themeMode: applyThemeMode(_theme),
);
});
}
ThemeMode applyThemeMode(String? theme) {
if (theme == null || theme.isEmpty) {
return ThemeMode.system;
}
if (theme == 'light') {
return ThemeMode.light;
} else if (theme == 'dark') {
return ThemeMode.dark;
} else {
return ThemeMode.system;
}
}
【问题讨论】:
标签: flutter dart sharedpreferences provider