Flutter 如何设置App的主色调与字体

 更新时间:2021年05月21日 08:32:51   作者:岛上码农  
App 开发过程中,肯定希望给用户带来一致的体验,这其中最基础的就是色调、字体保持一致。在 Flutter 中,可以设置全局的主题色调和字体,从而在其他页面引用主色调和字体,实现页面展示层面的一致。

Flutter 的主题色和字体可以在MaterialApp 中设置,即在 main.dart 的入口返回的 MaterialApp 组件统一设置全局的主色调和字体。如下面的代码所示:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'App 框架',
      theme: ThemeData(
        primaryColor: Colors.blue,
        accentColor: Colors.blue[600],
        textTheme: TextTheme(
          headline1: TextStyle(
              fontSize: 36.0, fontWeight: FontWeight.bold, color: Colors.white),
          headline2: TextStyle(
              fontSize: 32.0, fontWeight: FontWeight.w400, color: Colors.white),
          headline3: TextStyle(
              fontSize: 28.0, fontWeight: FontWeight.w400, color: Colors.white),
          headline4: TextStyle(
              fontSize: 24.0, fontWeight: FontWeight.w400, color: Colors.white),
          headline6: TextStyle(
              fontSize: 14.0, fontWeight: FontWeight.w200, color: Colors.white),
          bodyText1: TextStyle(
            fontSize: 20.0,
            fontWeight: FontWeight.w200,
          ),
        ),
        fontFamily: 'Georgia',
      ),
      home: AppHomePage(),
    );
  }
}

通过 MateriaApp 的 theme 属性,构建 ThemeData 来配置全局主题。其中ThemeData常用的属性如下所示:

  • brightness:为 Brightness 枚举,包括 dark 和 light 两种模式,其中 dark 对应的是深色模式(即夜间模式),light 对应浅色模式。
  • primaryColor:主色调,设置后导航栏就会变成主色调颜色。注意的是导航栏的字体颜色会根据主色调和 brightness 自动计算显示的颜色是偏浅色还是深色。
  • accentColor:辅助色,根据需要设置。
  • textTheme:文字主体。早期版本的 flutter 设置的比较少,新版本可能是为了支持Web端,字体的属性设置基本和 html 的保持一致了,包括 headline1到 headline6,bodyText1,感觉就是对应 html 中的 h1-h6和 body 的字体。各级字体均可以通过构建 TextStyle 来设置对应的字体参数。
  • fontFamily:字体族。

在应用中可以通过 Theme.of(context)获取当前主体,再获取对应的属性来继承主题的色调或字体。如下面的代码的 Text 的样式就继承了主体的bodyText1的字体特性。

@override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text(
          '岛',
          style: Theme.of(context).textTheme.bodyText1,
        ),
      ),
    );
  }

而在BottomNavigationBar中的 selectedItemColor(选择颜色)则继承了主色调。

@override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('岛上码农', style: Theme.of(context).textTheme.headline4),
      ),
      body: IndexedStack(
        index: _index,
        children: _homeWidgets,
      ),
      bottomNavigationBar: BottomNavigationBar(
        type: BottomNavigationBarType.fixed,
        currentIndex: _index,
        onTap: _onBottomNagigationBarTapped,
        selectedItemColor: Theme.of(context).primaryColor,
        items: [
          _getBottomNavItem(
              '动态', 'images/dynamic.png', 'images/dynamic-hover.png'),
          _getBottomNavItem(
              ' 消息', 'images/message.png', 'images/message-hover.png'),
          _getBottomNavItem(
              '分类浏览', 'images/category.png', 'images/category-hover.png'),
          _getBottomNavItem(
              '个人中心', 'images/mine.png', 'images/mine-hover.png'),
        ],
      ),
    );
  }

通过这种方式可以在 main.dart 中的 MaterialApp 中统一配置色调和字体达到全局一致的目的。如果想要调整色调和字体,只需要在一处修改即可。最终结果如下图所示(有图更改了主题色为绿色)。

有强迫症的同学可能会发现状态栏的颜色是黑色的,这个该如何修改呢?很简单,对 AppBar的属性设置一下 brightness 属性即可:

return Scaffold(
      appBar: AppBar(
        title: Text('岛上码农', style: Theme.of(context).textTheme.headline4),
        brightness: Brightness.dark,
      ),
  //...

以上即为 Flutter App 的主题色与字体的设置,实际另一种操作方式也可以使用全局常量的方式,约定好整个工程使用的主色调,辅助色,字体也能达到目的。下一篇介绍如何构建列表,欢迎点赞鼓励!

以上就是Flutter 如何设置App的主色调与字体的详细内容,更多关于Flutter 设置App的主色调与字体的资料请关注脚本之家其它相关文章!

相关文章

  • Android监听滑动控件实现状态栏颜色切换

    Android监听滑动控件实现状态栏颜色切换

    这篇文章给大家分享一个平时在滑动页面经常遇到的效果:滑动过程动态修改状态栏颜色,文中有详细的示例代码,对我们的学习或工作有一定的帮助,感兴趣的小伙伴自己动手试试吧
    2023-08-08
  • Android自定义带进度条WebView仿微信加载过程

    Android自定义带进度条WebView仿微信加载过程

    这篇文章主要为大家详细介绍了Android自定义带进度条WebView仿微信加载过程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Android分享微信小程序技巧之图片优化

    Android分享微信小程序技巧之图片优化

    这篇文章主要给大家介绍了关于Android分享微信小程序技巧之图片优化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • android的编译和运行过程深入分析

    android的编译和运行过程深入分析

    首先来看一下使用Java语言编写的Android应用程序从源码到安装包的整个过程,此过程对了解android的编译和运行过程有很大的帮助
    2012-12-12
  • Android实现多点触控功能

    Android实现多点触控功能

    这篇文章主要为大家详细介绍了Android实现多点触控功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Android 新手引导蒙层效果实现代码示例

    Android 新手引导蒙层效果实现代码示例

    本篇文章主要介绍了Android 新手引导蒙层效果实现代码示例,具有一定的参考价值,有兴趣的可以了解一下。
    2017-01-01
  • Android自定义ViewGroup实现可滚动的横向布局(2)

    Android自定义ViewGroup实现可滚动的横向布局(2)

    这篇文章主要介绍了Android自定义ViewGroup实现可滚动的横向布局,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Android 开发隐藏标题栏的方法总结

    Android 开发隐藏标题栏的方法总结

    这篇文章主要介绍了android 开发隐藏标题栏的方法总结的相关资料,需要的朋友可以参考下
    2017-04-04
  • Android 曲线图的绘制示例代码

    Android 曲线图的绘制示例代码

    本篇文章主要介绍了Android 曲线图的绘制示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Android入门之onTouchEvent触碰事件的示例详解

    Android入门之onTouchEvent触碰事件的示例详解

    今天给大家带来的是TouchListener与OnTouchEvent的比较,以及多点触碰的知识点! 文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-12-12

最新评论