介绍:
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对象
},
);
}),
)