主题化
这是为您的应用程序提供多主题选择的一种有针对性且有效的方式。
主题化分别依赖于 `provider` 和 `shared_preference` 来进行状态管理和数据保留。
主题化解决了在从共享首选项获取最后一个主题状态之前,应用程序启动时加载默认主题的问题。在看到两篇公开文章中出现此问题后,我决定尝试一下 ![]()
关键代码
在 `main()` 函数中,在 `runApp()` 加载之前,会获取一个 `SharedPreferences` 的唯一实例(整个应用程序不会再创建其他实例),并将其传递给 `ThemeProvider`。这是因为在加载应用程序之前,获取上一个/最后一个主题状态至关重要。是的,`themeProvider.assertTheme()`。
final pref = await SharedPreferences.getInstance();
ThemeProvider themeProvider = ThemeProvider(pref);
themeProvider.assertTheme();
保留 `themeProvider.assertTheme()` 值的关键是将相关数据赋给一个 `static` 变量。
static ThemeData? _themeData;
`_themeData` 在应用程序生命周期中 `ThemeProvider` 对象的创建和重新创建过程中会保留其值。
在这里,我们类型为 `ThemeData` 的变量将发挥作用。
如果您觉得这个仓库有用,请给它点个star ⭐。谢谢。
