美文网首页学习笔记
Flutter 抽屉菜单-Drawer使用

Flutter 抽屉菜单-Drawer使用

作者: DDLH | 来源:发表于2019-12-12 20:20 被阅读0次

Drawer

Drawer是Android开发中Material风格常用的设计,就是我们常说的“抽屉”效果,一个从侧边栏拉出来的导航面板。

在Flutter使用Material风格,最为常用的组件之一就是Scaffold了;Scaffold的drawer属性是一个Widget类型的组件,从左侧边栏拉出,通常就是用一个Drawer对象实现(Scaffold的endDrawer属性定义了一个从右侧边栏拉出的导航面板);

如果没有设置AppBar的leading属性,则当使用Drawer的时候会自动显示一个IconButton来告诉用户有侧边栏(在 Android 上通常是显示为三个横的图标)。

Drawer的child属性定义了其展示的内容,通常是用一个 ListView来实现,而在ListView最上面通常会有个 DrawerHeader来设置当前用户的基本信息,最常用的一个具体的 DrawerHeader 是 UserAccountsDrawerHeader 。

DrawerHeader的使用

  • decoration header区域的decoration,通常用来设置背景颜色或者背景图片
  • margin Header四周的间隙 默认值:EdgeInsets.only(bottom: 8.0)
  • padding Header里面内容控件的padding值,如果child为null,则这个值无效 默认值:const EdgeInsets.fromLTRB(16.0, 16.0, 16.0, 8.0)
  • durationcurve 如果decoration发生了变化,则会使用 curve设置的变化曲线和duration设置的动画时间来做一个切换动画
  • child Header里面所显示的内容控件
DrawerHeader(
  decoration: BoxDecoration(
    color: Colors.lightBlueAccent,
  ),
  child: Center(
    child: SizedBox(
      width: 60.0,
      height: 60.0,
      child: CircleAvatar(
        child: Text('R'),
      ),
    ),
  ),
),
image.png

UserAccountsDrawerHeader的使用

如果想在DrawerHeader中显示用户账户信息,比如类似于 Gmail 的 联系人头像、用户名、Email 等信息,则可以使用 UserAccountsDrawerHeader这个特殊的DrawerHeader。

UserAccountsDrawerHeader(
  //通常用来设置背景颜色或者背景图片
  decoration: BoxDecoration(
    image: DecorationImage(
        //设置UserAccountsDrawerHeader背景图
        image: NetworkImage(
            'http://img02.tooopen.com/images/20131212/sy_51552288528.jpg'),
        fit: BoxFit.cover),
  ),
  //当前用户的名字
  accountName: Text('我是Drawer'),
  //当前用户的Email
  accountEmail: Text('wo shi Email'),
  //用来设置当前用户的头像
  currentAccountPicture: CircleAvatar(
    backgroundImage: NetworkImage(
        'http://b-ssl.duitang.com/uploads/item/201507/04/20150704212949_PSfNZ.jpeg'),
  ),
  //当 accountName 或者 accountEmail 被点击的时候所触发的回调函数,可以用来显示其他额外的信息
  // onDetailsPressed: () {
  //   print("onDetailsPressed");
  // },
  //用来设置当前用户的其他账号的头像(最多显示三个)
  // otherAccountsPictures: <Widget>[
  //   CircleAvatar(
  //     backgroundImage: NetworkImage(
  //         'http://img02.tooopen.com/images/20131212/sy_51552288528.jpg'),
  //   ),
  // ],
),

在菜单 Item 部分我们使用 ListTile 来处理,左边是一个图标右边是文字的样式。

ListTile(
  leading: Icon(Icons.settings),
  title: Text('设置'),
),
Divider(), //分割线
ListTile(
  leading: Icon(Icons.close),
  title: Text('关闭'),
  onTap: () => Navigator.pop(context), // 关闭抽屉
)
效果图

手动打开与关闭Drawer抽屉

代码中打开抽屉菜单的方法在ScaffoldState中,通过Scaffold.of(context)可以获取父级最近的Scaffold 组件的State对象。

Scaffold.of(context).openDrawer(), // 打开抽屉

Navigator.pop(context), // 关闭抽屉

leading: Builder(
  builder: (context) => GestureDetector(
    child: Padding(
      padding: EdgeInsets.all(8.0),
      child: new Icon(Icons.home),
    ),
    onTap: () => Scaffold.of(context).openDrawer(), // 打开抽屉
  ),
),



ListTile(
  leading: Icon(Icons.close),
  title: Text('关闭'),
  onTap: () => Navigator.pop(context), // 关闭抽屉
)

禁止手势侧滑出Drawer

默认是带手势侧滑的,那如何禁止手势侧滑出Drawer,我们只需要修改一个属性即可

drawerEdgeDragWidth: 0.0,

相关文章

网友评论

    本文标题:Flutter 抽屉菜单-Drawer使用

    本文链接:https://www.haomeiwen.com/subject/bdmigctx.html