flutter 主题theme介绍

309 阅读2分钟

ThemeData介绍

theme: ThemeData(
    Brightness? brightness,         // 应用整体主题的亮度,用于按钮之类的小部件,已确定在使用主色或强调色时选择什么颜色。
    VisualDensity? visualDensity,   // 视觉密度
    MaterialColor? primarySwatch,   // 主题样式,设置primaryColor后该背景色会被覆盖
    Color? primaryColor,           // 主要部分背景颜色(导航栏和tabBar等)
    Brightness? primaryColorBrightness,   // primaryColor的亮度
    Color? primaryColorLight,              // primaryColor的浅色版
    Color? primaryColorDark,              // primaryColor的深色版
    Color? accentColor,                       // 前景色(文本和按钮等)
    Brightness? accentColorBrightness,   
    Color? canvasColor,       // MaterialType.canvas的默认颜色
    Color? shadowColor,     // 阴影颜色
    Color? scaffoldBackgroundColor,    // scaffold的背景颜色,典型Material应用程序或应用程序内页面的背景颜色。
    Color? bottomAppBarColor,         // BottomAppBar的默认颜色。
    Color? cardColor,          // Card的颜色
    Color? dividerColor,      // Divider和popipMenuDivider的颜色,也用于ListTitle之间,DataTable的行之间。
    Color? focusColor,         // 突出颜色
    Color? hoverColor,       // 
    Color? highlightColor,   // 高亮颜色,选中的泼墨动画期间使用的突出显示颜色,或用于指示菜单中的项。
    Color? splashColor,
    InteractiveInkFeatureFactory? splashFactory,
    Color? selectedRowColor,       // 选中row的颜色
    Color? unselectedWidgetColor,
    Color? disabledColor,      // 不可点击时的颜色
    Color? buttonColor,       // RaiseButton按钮的颜色、
    ButtonThemeData? buttonTheme,   // 定义按钮的默认主题
    ToggleButtonsThemeData? toggleButtonsTheme,
    Color? secondaryHeaderColor,
   Color? textSelectionHandleColor,
    Color? backgroundColor,
    Color? dialogBackgroundColor,
    Color? indicatorColor,           // 选项卡中选定的选项卡指示器的颜色
    Color? hintColor,        // 用于提示文本或占位符文本的颜色,例如在TextField中。
    AppBarTheme? appBarTheme,    // 导航栏主题
    ScrollbarThemeData? scrollbarTheme,
   ... 
),

在MaterialApp中直接定义主题各种相关颜色等

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      theme: ThemeData(‘...’), // 这里定义
      home: MyHomePage(),
    );
  }
}

flutter 会自动适配你配置的相关,同时你可以手动指定配置的style,方法如下: Text中使用MaterialApp的textTheme.title主题,当textTheme.title切换时, 这里的Text也会切换;如深夜模式/白昼模式切换

Container(
  color: Theme.of(context).accentColor,
  child: new Text(
    'Text with a background color',
    style: Theme.of(context).textTheme.title,
  ),
);