AppBar 和 SliverAppBar 都是继承至 StatefulWidget 类,都代表 Toobar,二则的区别在于 AppBar 位置的固定的应用最上面的;而 SliverAppBar 是可以跟随内容滚动的。
image.png

leading:

在标题前面显示的一个控件,在首页通常显示应用的 logo;在其他界面通常显示为返回按钮。

title:

Toolbar 中主要内容,通常显示为当前界面的标题文字。

actions:

一个 Widget 列表,代表 Toolbar 中所显示的菜单,对于常用的菜单,通常使用 IconButton 来表示;对于不常用的菜单通常使用PopupMenuButton 来显示为三个点,点击后弹出二级菜单。

bottom:

一个 AppBarBottomWidget 对象,通常是 TabBar。用来在 Toolbar 标题下面显示一个 Tab 导航栏。

elevation:

纸墨设计中控件的 z 坐标顺序,默认值为 4,对于可滚动的 SliverAppBar,当 SliverAppBar 和内容同级的时候,该值为 0, 当内容滚动
SliverAppBar 变为 Toolbar 的时候,修改 elevation 的值。

flexibleSpace:

一个显示在 AppBar 下方的控件,高度和 AppBar 高度一样,可以实现一些特殊的效果,该属性通常在 SliverAppBar 中使用

backgroundColor:

Appbar 的颜色,默认值为 ThemeData.primaryColor。该值通常和下面的三个属性一起使用:

brightness:

App bar 的亮度,有白色和黑色两种主题,默认值为 ThemeData.primaryColorBrightness

iconTheme:

App bar 上图标的颜色、透明度、和尺寸信息。默认值为 ThemeData.primaryIconTheme

textTheme:

App bar 上的文字样式。默认值为 ThemeData.primaryTextTheme

centerTitle:

标题是否居中显示,默认值根据不同的操作系统,显示方式不一样

详细设置

https://www.jianshu.com/p/cc4ab84bdc19
http://blog.chengyunfeng.com/?p=1044

AppBar 有以下常用属性:

  • leading → Widget - 在标题前面显示的一个控件,在首页通常显示应用的 logo;在其他界面通常显示为返回按钮。
  • title → Widget - Toolbar 中主要内容,通常显示为当前界面的标题文字。
  • actions → List - 一个 Widget 列表,代表 Toolbar 中所显示的菜单,对于常用的菜单,通常使用 IconButton 来表示;对于不常用的菜单通常使用 PopupMenuButton 来显示为三个点,点击后弹出二级菜单。
  • bottom → PreferredSizeWidget - 一个 AppBarBottomWidget 对象,通常是 TabBar。用来在 Toolbar 标题下面显示一个 Tab 导航栏。
  • elevation → double - 控件的 z 坐标顺序,默认值为 4,对于可滚动的 SliverAppBar,当 SliverAppBar 和内容同级的时候,该值为 0, 当内容滚动 SliverAppBar 变为 Toolbar 的时候,修改 elevation 的值。
  • flexibleSpace → Widget - 一个显示在 AppBar 下方的控件,高度和 AppBar 高度一样,可以实现一些特殊的效果,该属性通常在 SliverAppBar 中使用。
  • backgroundColor → Color - Appbar 的颜色,默认值为 ThemeData.primaryColor。改值通常和下面的三个属性一起使用。
  • brightness → Brightness - Appbar 的亮度,有白色和黑色两种主题,默认值为 ThemeData.primaryColorBrightness。
  • iconTheme → IconThemeData - Appbar 上图标的颜色、透明度、和尺寸信息。默认值为 ThemeData.primaryIconTheme。
  • textTheme → TextTheme - Appbar 上的文字样式。
  • centerTitle → bool - 标题是否居中显示,默认值根据不同的操作系统,显示方式不一样。
  • toolbarOpacity → double
    image.png
    1. // 返回每个隐藏的菜单项
    2. SelectView(IconData icon, String text, String id) {
    3. return new PopupMenuItem<String>(
    4. value: id,
    5. child: new Row(
    6. mainAxisAlignment: MainAxisAlignment.spaceEvenly,
    7. children: <Widget>[
    8. new Icon(icon, color: Colors.blue),
    9. new Text(text),
    10. ],
    11. )
    12. );
    13. }
    14. appBar: new AppBar(
    15. title: new Text('首页'),
    16. leading: new Icon(Icons.home),
    17. backgroundColor: Colors.blue,
    18. centerTitle: true,
    19. actions: <Widget>[
    20. // 非隐藏的菜单
    21. new IconButton(
    22. icon: new Icon(Icons.add_alarm),
    23. tooltip: 'Add Alarm',
    24. onPressed: () {}
    25. ),
    26. // 隐藏的菜单
    27. new PopupMenuButton<String>(
    28. itemBuilder: (BuildContext context) => <PopupMenuItem<String>>[
    29. this.SelectView(Icons.message, '发起群聊', 'A'),
    30. this.SelectView(Icons.group_add, '添加服务', 'B'),
    31. this.SelectView(Icons.cast_connected, '扫一扫码', 'C'),
    32. ],
    33. onSelected: (String action) {
    34. // 点击选项的时候
    35. switch (action) {
    36. case 'A': break;
    37. case 'B': break;
    38. case 'C': break;
    39. }
    40. },
    41. ),
    42. ],
    43. ),

image.png