gpt4 book ai didi

flutter - 如何在flutter中使用当前主题保存应用程序的状态?

转载 作者:行者123 更新时间:2023-12-04 07:24:57 24 4
gpt4 key购买 nike

我正在为我的应用程序设置暗模式和亮模式,但是数据持久性存在问题,因为当我重新启动应用程序时,我的主题会恢复为默认主题,而不是我上次在应用程序,经过一些研究,我被提议使用 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_handlershared_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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com