Flutter之Scaffold

1,624 阅读1分钟

介绍:

scaffold 是一个路由页的骨架, 一个完整的路由页可能会包含导航栏,抽屉菜单(Drawer)以及底部Tab导航菜单等。

属性

  • AppBar 导航栏骨架
  • body
  • FloatingActionButton漂浮按钮
  • Drawer抽屉菜单
  • BottomNavigationBar底部导航栏

AppBar

  • leading:在标题前面的一个控件,通常显示应用的logo,返回按钮
  • title:标题
  • actions:Widget列表,可以直接用iconButton显示,也可以用PopupMenuButton(showMenu ,用position固定位置)显示为三个点。

Drawer

默认从左侧边栏拉出来的导航面板,endDrawer定义了一个从右侧边栏拉出。

如果appBar中的leading属性没有设置,就会使用Drawer自动显示的iconbutton(三个杠)

drawer一般会和listview配合起来使用

DrawerHeader

  • decoration header区域的,通常设置背景颜色或者背景图片
  • child header里面显示的内容控件
  • padding
  • margin

UserAccountDrawerHeader

  • accountName 当前用户的名字
  • accountEmail 当前用户的email
  • onDetailPressed 点击上面两个的时候所触发的回调函数
  • otherAccountsPictures 用来设置当前用户的其他账号的头像(最多显示三个)
  • currentAccountPicture 用来设置当前用户的头像

通过按钮调用侧边栏注意事项:

给目标StatefulWidget添加GlobalKey,在创建scaffold的时候添加此参数

//定义一个globalKey, 由于GlobalKey要保持全局唯一性,使用静态变量存储
static GlobalKey<ScaffoldState> _globalKey= GlobalKey();
...
return Scaffold(
    key: _globalKey , //设置key
    ...  
)

通过GlobalKey来获取state对象

_globalKey.currentState.openDrawer()  //打开侧边栏

如果想自定义一个菜单图标,可以设置leading

Scaffold(
  appBar: AppBar(
    title: Text("App Name"),
    leading: Builder(builder: (context) {
      return IconButton(
        icon: Icon(Icons.dashboard, color: Colors.white), //自定义图标
        onPressed: () {
          // 打开抽屉菜单  
          Scaffold.of(context).openDrawer();   //获取父级最近的scaffold组件的state对象
        },
      );
    }),
  )