主题

Theme Widget可以为Material APP定义主题数据(ThemeData),Material组件库里很多Widget都使用了主题数据,如导航栏颜色、标题字体、Icon样式等。Theme内会使用InheritedWidget来为其子树Widget共享样式数据。

ThemeData

ThemeData是Material Design Widget库的主题数据,Material库的Widget需要遵守相应的设计规范,而这些规范可自定义部分都定义在ThemeData,所以我们可以通过ThemeData来自定义应用主题。我们可以通过Theme.of方法来获取当前的ThemeData。

  1. ThemeData({
  2. Brightness brightness, //深色还是浅色
  3. MaterialColor primarySwatch, //主题颜色样本,见下面介绍
  4. Color primaryColor, //主色,决定导航栏颜色
  5. Color accentColor, //次级色,决定大多数Widget的颜色,如进度条、开关等。
  6. Color cardColor, //卡片颜色
  7. Color dividerColor, //分割线颜色
  8. ButtonThemeData buttonTheme, //按钮主题
  9. Color cursorColor, //输入框光标颜色
  10. Color dialogBackgroundColor,//对话框背景颜色
  11. String fontFamily, //文字字体
  12. TextTheme textTheme,// 字体主题,包括标题、body等文字样式
  13. IconThemeData iconTheme, // Icon的默认样式
  14. TargetPlatform platform, //指定平台,应用特定平台控件风格
  15. ...
  16. })

上面只是ThemeData的一小部分属性,完整列表读者可以查看SDK定义。上面属性中需要说明的是primarySwatch,它是主题颜色的一个”样本”,通过这个样本可以在一些条件下生成一些其它的属性,例如,如果没有指定primaryColor,并且当前主题不是深色主题,那么primaryColor就会默认为primarySwatch指定的颜色,还有一些相似的属性如accentColorindicatorColor等也会受primarySwatch影响