flutter - 通过 Flutter 中的按钮输入更改主题
问题描述
我做了一个按钮,当按下那个按钮时,我想改变主题的颜色。我正在尝试使用从按钮接收到的值来修改颜色,但它不起作用。
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
String themeColors=context.watch<DisplayList>().themeColor;
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
primaryColor: Colors.${themeColors}, //How do I fix this part?
),
还是有其他方法可以改变颜色?
themeColors 变量已经包含要更改的颜色字符串。
解决方案
您可以使用它findAncestorStateOfType
来管理根小部件的状态。
class App extends StatefulWidget {
const App({Key? key}) : super(key: key);
static _AppState? of(BuildContext context) => context.findAncestorStateOfType<_AppState>();
@override
_AppState createState() => _AppState();
}
class _AppState extends State<App> {
late bool isDarkMode;
late ThemeModeStorage storage;
void toggleDarkMode() {
setState(() {
isDarkMode = !isDarkMode;
});
storage.writeBool(value: isDarkMode);
}
...
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeConfig(isDarkMode).themeData,
home: HomeScreen(),
);
}
}
所以你可以在你的应用程序的任何地方调用它。
App.of(context)?.toggleDarkMode();
推荐阅读
- ios - 为什么 numberOfRowsInComponent 函数运行了这么多次?
- c++ - Oracle 中 DBMS_ALERT 的 ODBC 等效项
- javascript - Google App 脚本 - 例外:您无权调用 UrlFetchApp.fetch
- php - 如何在 PHP 中将多个文本区域 $_POST 到 SQL 数据库中?
- python - 使用python从文本中拆分特定模式(例如:2公斤大米)
- c++ - 我可以以某种方式将枚举类型与字符串结构结合起来吗?
- testcontainers - Testcontainers execInContainer 不适用于 CockroachDB
- oracle - 使用 tnsname.ora 和 liquibase 连接到 oracle 数据库
- docker - 无法在 docker 容器内执行命令[Jenkins Pipeline]
- javascript - 如何根据对象属性在javascript中动态生成假数据对象?