我正在为我的应用程序设置暗模式和亮模式,但是数据持久性存在问题,因为当我重新启动应用程序时,我的主题会恢复为默认主题,而不是我上次在应用程序,经过一些研究,我被提议使用 shared_preferences 插件,但我不知道如何在我的情况下使用它,因为我将主题从暗更改为亮的方式是通过更改变量 主题模式 主题模式 中的初始值toggleDarkTheme() 和 切换LightTheme() 方法如下面的代码所示,那么如何使用 shared_preferences 在我的设备中保存该值?
我的 theme_provider.dart 文件:
// Flutter imports:
import 'package:flutter/material.dart';
// Package imports:
import 'package:flutter_riverpod/flutter_riverpod.dart';
final themeProvider = ChangeNotifierProvider<ThemeProvider>((ref) {
return ThemeProvider();
});
class ThemeProvider with ChangeNotifier {
ThemeMode themeMode = ThemeMode.system;
void toggleDarkTheme() {
themeMode = ThemeMode.dark;
notifyListeners();
}
void toggleLightTheme() {
themeMode = ThemeMode.light;
notifyListeners();
}
}
mixin MyThemes {
static final darkTheme = ThemeData.dark().copyWith(
...
);
static final lightTheme = ThemeData.light().copyWith(
...
);
}
主要.dart:final themeStatus = watch(themeProvider);
return MaterialApp(
themeMode: themeStatus.themeMode,
darkTheme: MyThemes.darkTheme,
theme: MyThemes.lightTheme,
最佳答案
我正在使用 theme_mode_handler与 shared_preferences在我的应用程序中切换和保留主题。
下面是一个例子:
添加 theme_mode_handler
给您的 pubspec.yaml
dependencies:
theme_mode_handler: ^3.0.0
shared_preferences: ^2.0.6
创建一个实现 IThemeModeManager
的类界面:import 'package:shared_preferences/shared_preferences.dart';
import 'package:theme_mode_handler/theme_mode_manager_interface.dart';
class ThemeManager implements IThemeModeManager{
@override
Future<String> loadThemeMode() async {
final _prefs = await SharedPreferences.getInstance();
return _prefs.getString("THEME_PREF");
}
@override
Future<bool> saveThemeMode(String value) async {
final _prefs = await SharedPreferences.getInstance();
return _prefs.setString("THEME_PREF", value);
}
}
用 ThemeModeHandler
包裹 MaterialApp小部件并将其传递给您的经理的实例:import 'package:theme_mode_handler/theme_mode_handler.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ThemeModeHandler(
manager: ThemeManager(),
builder: (ThemeMode themeMode) {
return MaterialApp(
themeMode: themeMode,
darkTheme: MyThemes.darkTheme,
theme: MyThemes.lightTheme,
home: MyHomePage(),
);
},
);
}
}
然后最后更改您可以使用的主题:ThemeModeHandler.of(context).saveThemeMode(ThemeMode.dark); //Dark theme
ThemeModeHandler.of(context).saveThemeMode(ThemeMode.light); //Light theme
ThemeModeHandler.of(context).saveThemeMode(ThemeMode.system); //System theme
关于flutter - 如何在flutter中使用当前主题保存应用程序的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68267016/