我是一个初学者,直到最近才开始学习Flutter。
在网上搜索了很长时间之后,我终于设法找到了一个说明如何添加动态主题转换器的教程。
现在这可以正常工作-但是我仍然不知道应该在何处以及如何添加自定义颜色,例如
primaryColor: Colors.white, accentColor: Colors.green,
在ThemeData中。
我将在下面发布我的代码,请帮助我。
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());
}
}
}
如果构造普通的ThemeData类,则可以放入很多属性。例如,ThemeData(primaryColor: Colors.red)
但是,如果您使用类似的命名构造函数ThemeData.light()
,Flutter会为标准light主题放置所有默认值,ThemeData.dark()
。因此,您可以使用copyWith()
方法对某种默认值进行覆盖ThemeData.light().copyWith(primaryColor: Colors.white, accentColor: Colors.green,)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句