You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Shared_Preferences保存animated_theme_switcher切换的主题,重启后生效

实现步骤

1. 引入本地存储依赖

首先在pubspec.yaml中添加本地存储库依赖:

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^2.2.2 # 可替换为当前最新版本
  animated_theme_switcher: # 保留你已安装的现有依赖

执行flutter pub get完成依赖安装。

2. 修改App初始化逻辑,读取已保存的主题

App启动时优先读取本地存储的主题配置,无存储记录时才 fallback 到系统默认主题,修改main.dart入口逻辑:

void main() async {
  // 初始化组件绑定,保证runApp前的异步操作正常执行
  WidgetsFlutterBinding.ensureInitialized();
  // 读取本地存储的主题配置
  final prefs = await SharedPreferences.getInstance();
  final savedIsDark = prefs.getBool('isDarkMode');
  late ThemeData initialTheme;

  if (savedIsDark != null) {
    // 存在存储的主题配置,直接使用
    initialTheme = savedIsDark ? darkTheme : lightTheme;
  } else {
    // 无存储记录,使用系统默认主题
    final isPlatformDark = WidgetsBinding.instance.window.platformBrightness == Brightness.dark;
    initialTheme = isPlatformDark ? darkTheme : lightTheme;
  }

  runApp(MyApp(initialTheme: initialTheme));
}

// 修改MyApp类接收初始主题参数
class MyApp extends StatelessWidget {
  final ThemeData initialTheme;
  const MyApp({super.key, required this.initialTheme});

  @override
  Widget build(BuildContext context) {
    return ThemeProvider(
      // 直接使用读取到的初始主题,无需再在此处判断系统亮度
      initTheme: initialTheme,
      builder: (context, theme) {
        return MaterialApp(
          theme: theme,
          home: MyApp1(),
          debugShowCheckedModeBanner: false,
        );
      },
    );
  }
}

3. 修改主题切换逻辑,持久化用户选择

在主题切换按钮的点击事件中,新增存储用户所选主题的逻辑:

onPressed: () async {
  var brightness = ThemeProvider.of(context)!.brightness;
  final newIsDark = brightness == Brightness.light;

  // 新增:将用户选择的主题存入本地
  final prefs = await SharedPreferences.getInstance();
  await prefs.setBool('isDarkMode', newIsDark);

  ThemeSwitcher.of(context)!.changeTheme(
    theme: newIsDark ? darkTheme : lightTheme,
    reverseAnimation: brightness == Brightness.dark,
  );
  setState(() {
    toggle = !toggle;
  });
},

以上修改完成后,用户选择的主题会持久化保存在本地,应用重启后会优先读取存储的配置加载对应主题。

内容的提问来源于stack exchange,提问作者Anatoly Kuznetsov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:45:00