我希望用户可以在我的应用中更改并保存主题颜色 . 但是,我不知道如何在应用程序开始运行时加载保存的主题颜色 . 例如,我想直接在下面的评论位置加载保存的主题颜色 . 我试过SharedPreference . 但是,SharedPreference实例需要使用await运行 . 似乎不能在这里使用 . 有没有什么办法可以直接在这里加载保存的主题,而不是使用setState或类似的东西?
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: // how to load saved theme here?
),
home: new MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
2 回答
这个答案更进一步 . 它显示了如何加载和保存主题首选项,如何构建
ThemeData
,以及如何从应用程序的页面更改主题 .使用
shared_preferences
插件保存用户首选项(选择了哪个主题) .使用整个Flutter框架中使用的"controller pattern"为您的应用程序提供当前选定的主题(及其更改) .
使用
InheritedWidget
在应用程序的任何部分使用控制器 .以下是控制器的外观:
以下是在应用程序中使用控制器和
InheritedWidget
的方法:您可以选择如何加载它 . 第一个是Gunter在评论中说的 - 你把
MyApp
变成一个有状态的小部件并用initState()
加载它,然后setState它 .这看起来像这样:
第二种选择是使用FutureBuilder .
第三个选项是在实际启动应用程序之前进行加载 - 在main方法中 . 我不知道这是否真的被推荐,好像共享偏好需要一段时间它可能会延迟你的应用程序的开始,但实际上它应该非常快,你可能想要避免闪光不同的主题显示无论如何 .