首页 > 解决方案 > ThemeData 中的 copyWith 在 MaterialApp 中不起作用

问题描述

如何在 ThemeData 中将 fontFamily 与 copyWith 一起使用或如何修复我的以下错误?

   class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Consumer2<ThemeNotifier, SettingNotifier>(builder:
            (context, ThemeNotifier theme, SettingNotifier settings, child) {
          return MaterialApp(
            theme: theme.getTheme().copyWith(
                  textTheme: theme.getTheme()
                      .textTheme
                      .apply(fontFamily: settings.getFontSetting()),
                ),
            debugShowCheckedModeBanner: false,
            home: MainHomePage(),
          );
        });
      }
    }

主题数据类如何在主题数据中添加fontFamily或在copyWith中添加文本主题我想在MaterialApp中添加带有copyWith的textTheme到getFonts任何人都可以解决这个问题...................... .....................

class ThemeNotifier with ChangeNotifier {
  ThemeData _themeData;
  ThemeData getTheme() => _themeData;

  ThemeNotifier() {
    ThemeManager.readData('themeMode').then((value) {
      print('App Theme value read from storage: ' + value.toString());
      var themeMode = value;

      if (themeMode == 'yellow') {
        _themeData = yellow;
      } else {
        if (themeMode == 'red') {
          _themeData = red;
        } else {
          if (themeMode == 'green') {
            _themeData = green;
          } else {
            _themeData = orange;
          }
        }
      }
      notifyListeners();
    });
  }

  void setOrangeTheme() async {
    _themeData = orange;
    ThemeManager.saveData('themeMode', 'orange');
    notifyListeners();
  }

  void setRedTheme() async {
    _themeData = red;
    ThemeManager.saveData('themeMode', 'red');
    notifyListeners();
  }

  void setYellowTheme() async {
    _themeData = yellow;
    ThemeManager.saveData('themeMode', 'yellow');
    notifyListeners();
  }

  void setGreenTheme() async {
    _themeData = green;
    ThemeManager.saveData('themeMode', 'green');
    notifyListeners();
  }
}

标签: flutter

解决方案


查看。这个

 ThemeData _buildDarkTheme() {
  final baseTheme = ThemeData(fontFamily: "Sunflower",);
    return baseTheme.copyWith(
   brightness: Brightness.dark,
     primaryColor: Colors.grey[800],
  accentColor: Colors.grey[850]);
} 

然后在我将其应用到我的应用程序时执行此操作,如下所示:

   class MyApp extends StatelessWidget {
MyApp({Key key}) : super(key: key);
 @override
Widget build(BuildContext context) {
  return new MaterialApp(
    theme: _buildDarkTheme(),
    home: new Scaffold(
      appBar: _buildAppBar(),
      body: new Container(
        color: Theme.of(context).accentColor,
        height: double.infinity,
        child:.....
    

推荐阅读