在Flutter中的主题数据中添加自定义颜色的位置

在Flutter中的主题数据中添加自定义颜色的位置,flutter,dart,Flutter,Dart,我是个初学者,最近才开始学习颤振 在网上搜索了很长时间后,我终于找到了一个教程,解释了如何添加动态主题转换器 现在这一切都很完美——但是我仍然不知道该在哪里添加自定义颜色,比如 primaryColor: Colors.white, accentColor: Colors.green, 在主题数据中 我将在下面发布我的代码,请帮助我 main.dart void main() => runApp(MyApp()); class MyApp extends StatelessWidget

我是个初学者,最近才开始学习颤振

在网上搜索了很长时间后,我终于找到了一个教程,解释了如何添加动态主题转换器

现在这一切都很完美——但是我仍然不知道该在哪里添加自定义颜色,比如

primaryColor: Colors.white, accentColor: Colors.green,
在主题数据中

我将在下面发布我的代码,请帮助我

main.dart
void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    return ChangeNotifierProvider<ThemeChanger>(
      create: (_) => ThemeChanger(ThemeData.light()),
      child: MaterialAppWithTheme(),
    );
  }
}

class MaterialAppWithTheme extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final theme = Provider.of<ThemeChanger>(context);
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: theme.getTheme(),
      home: MdLayout(),
    );
  }
}

theme.dart
class ThemeChanger with ChangeNotifier{
  ThemeData _themeData;

  ThemeChanger(this._themeData);

  getTheme() => _themeData;

  setTheme(ThemeData theme) {
    _themeData = theme;

    notifyListeners();
  }
}

theme_switch_state.dart
class ThemeSwitchState extends State {
  bool switchControl = false;

  @override
  Widget build(BuildContext context) {
    return Column(mainAxisAlignment: MainAxisAlignment.center, children: [
      Transform.scale(
          scale: 1.5,
          child: Switch(
            onChanged: toggleSwitch,
            value: switchControl,
            activeColor: Colors.blue,
            activeTrackColor: Colors.grey,
            inactiveThumbColor: Colors.green,
            inactiveTrackColor: Colors.white,
          )),
    ]);
  }

  void toggleSwitch(bool value) {
    ThemeChanger _themeChanger = Provider.of<ThemeChanger>(context, listen: false);

    if (switchControl == false) {
      setState(() {
        switchControl = true;
      });
      print('Theme is Dark');

      // Put your code here which you want to execute on Switch ON event.
      _themeChanger.setTheme(ThemeData.dark());

    } else {
      setState(() {
        switchControl = false;
      });
      print('Theme is Light');

      // Put your code here which you want to execute on Switch OFF event.
      _themeChanger.setTheme(ThemeData.light());
    }
  }
}
main.dart
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回ChangeNotifierProvider(
创建:()=>themechance(ThemeData.light()),
子项:MaterialAppWithTheme(),
);
}
}
类MaterialAppWithTheme扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
最终主题=提供者(上下文);
返回材料PP(
debugShowCheckedModeBanner:false,
theme:theme.getTheme(),
主页:MdLayout(),
);
}
}
主题飞镖
使用ChangeNotifier对Mechance进行分类{
主题数据;
Themechance(本主题数据);
getTheme()=>\u主题数据;
setTheme(主题数据主题){
_主题数据=主题;
notifyListeners();
}
}
主题\u开关\u状态.dart
类ThemeSwitchState扩展状态{
布尔开关控制=假;
@凌驾
小部件构建(构建上下文){
返回列(mainAxisAlignment:mainAxisAlignment.center,子项:[
变换比例(
比例:1.5,
孩子:开关(
一旦更改:切换开关,
值:开关控制,
activeColor:Colors.blue,
activeTrackColor:Colors.grey,
颜色:Colors.green,
颜色:颜色。白色,
)),
]);
}
无效切换开关(布尔值){
ThemeChanger _ThemeChanger=Provider.of(上下文,侦听:false);
if(switchControl==false){
设置状态(){
开关控制=真;
});
印刷品(“主题为黑色”);
//将您要在Switch on事件中执行的代码放在这里。
_setTheme(ThemeData.dark());
}否则{
设置状态(){
开关控制=假;
});
印刷(“主题是光”);
//将您要在关闭事件时执行的代码放在此处。
_themeChanger.setTheme(主题data.light());
}
}
}

如果您构造普通的主题数据类,那么有太多的属性可以将值放入其中。例如,
ThemeData(primaryColor:Colors.red)
,但如果使用指定的构造函数,如
ThemeData.light()
,flift会为标准灯光主题放置所有默认值,而
ThemeData.dark()
也是如此。因此,您可以使用
copyWith()
方法以某种方式覆盖默认值,
ThemeData.light().copyWith(primaryColor:Colors.white,accentColor:Colors.green,)

如果您构建普通的ThemeData类,那么可以将值放入的属性太多了。例如,
ThemeData(primaryColor:Colors.red)
,但如果使用指定的构造函数,如
ThemeData.light()
,flift会为标准灯光主题放置所有默认值,而
ThemeData.dark()
也是如此。因此,您可以使用
copyWith()
方法以某种方式覆盖默认值,
ThemeData.light().copyWith(primaryColor:Colors.white,accentColor:Colors.green,)