使用主题可以在App里面共享颜色和字体样式.在Flutter里面有两种方式来使用主题,一种是全局范围的,一种是使用Theme Widget,Theme Widget可以在App的某个部分使用主题.全局的主题其实也就是MaterialApp将Theme作为跟Widget了.
- ThemeData({
- brightness: colorScheme.brightness,//深色还是浅色,也就是暗黑模式还是正常模式
- MaterialColor? primarySwatch//主题颜色样本(设置后,导航栏,tabbar颜色,悬浮按钮颜色,switch按钮的默认颜色都是该颜色.)
- Color? primaryColor,//主色,单独设置导航栏和tabbar颜色
- Color? accentColor,//次颜色,决定大多数widget的颜色,如进度条, switch开关,悬浮按钮等
- Color cardColor,//卡片颜色
- Color dividerColor,//分割线颜色
- ButtonThemeData buttonTheme,/*
- 按钮主题(按钮默认最小宽度是88,高度是36),可以全局设定按钮的大小
- 实例:
- buttonTheme: ButtonThemeData(
- height:44,
- minWidth:60,
- buttonColors:colors.red,
- ).*/
- Color cursorColor,//输入框光标颜色
- Color? dialogBackgroundColor,//对话框背景颜色
- TextTheme? textTheme,
- /*
- 全局设置字体主题,包括标题,body等文字样式
- textTheme: TextTheme(
- body1:textStyle(fontSize:16),//body1是系统默认的字体大小14.这些将全局改为16.body2是默认14号字体的加粗样式.
- )
- */
- iconTheme: iconTheme,//icon默认样式
- TargetPlatform platform,//指定平台,应用特定平台控件风格
- })
MaterialApp接收一个theme的参数,类型为ThemeData,为App提供的颜色和字体.支持的参数可以在这里查看.
- MaterialApp(
- title: 'Flutter Demo',
- theme: ThemeData(
- brightness: Brightness.dark,
- primarySwatch: Colors.blue,
- ),
- );
如果想为某个页面使用不同与App的风格,可以使用Theme来覆盖App的主题
- Theme(
- data: ThemeData(
- accentColor: Colors.blue,
- ),
- child: Text("hellol world"),
-
- );
如果不想覆盖所有的样式,可以继承App的主题,只覆盖部分样式,使用copyWith方法.
- Theme(
- data: Theme.of(context).copyWith(accentColor: Colors.yellow)
- child: Text("hellol world"),
-
- );