首页 > 解决方案 > 通过 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 变量已经包含要更改的颜色字符串。

标签: flutter

解决方案


您可以使用它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();

推荐阅读