前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flutter 的 Drawer 侧边栏以及侧边栏布局

Flutter 的 Drawer 侧边栏以及侧边栏布局

作者头像
拉维
发布2019-08-24 18:34:47
5.4K0
发布2019-08-24 18:34:47
举报
文章被收录于专栏:iOS小生活

在iOS原生开发中,实现抽屉视图还是比较麻烦的,有时还需要借助第三方组件来实现。但是在Flutter中,我们利用Drawer组件就可以很轻松实现抽屉视图。

简而言之就是,新建一个Drawer组件,然后配置给Scaffold组件的drawer属性,这样就实现侧边栏抽屉视图了。

代码语言:javascript
复制
Scaffold(      //左侧侧边栏      drawer: Drawer(        child: Column(          children: <Widget>[            Row(              children: <Widget>[                Expanded(
                  //DrawerHeader(可以自己定义,想实现啥功能就实现啥功能)                  // child: DrawerHeader(                  //   //侧边栏的头部                  //   child: Text("这是侧边栏的头部"),                  //   decoration: BoxDecoration(                   //     // color: Colors.yellow,//头部背景颜色                  //     //头部背景图片                  //     image: DecorationImage(                  //       image: NetworkImage("https://www.itying.com/images/flutter/2.png"),                  //       fit: BoxFit.cover                  //     )                  //     ),                  // ),
                  //UserAccountsDrawerHeader(格式比较固定)                  child: UserAccountsDrawerHeader(                    accountName: Text("拉维领队"),//姓名                    accountEmail: Text("1145599720@qq.com"),//邮箱                    //头像                    currentAccountPicture: CircleAvatar(                      backgroundImage: NetworkImage("https://www.itying.com/images/flutter/2.png"),                    ),                    //装饰                    decoration: BoxDecoration(                      color: Colors.orange                    ),                  ),                )              ],            ),            ListTile(              title: Text("我的空间"),              leading: CircleAvatar(                //圆角图片                child: Icon(Icons.home),              ),            ),            Divider(), //分割线            ListTile(              title: Text("用户中心"),              leading: CircleAvatar(                child: Icon(Icons.verified_user),              ),              //监听点击实现              onTap: (){                //收起抽屉视图                Navigator.pop(context);                //跳转到用户中心页面                Navigator.pushNamed(context, "/userCenterPage");              },            ),            Divider(), //分割线            ListTile(              title: Text("设置中心"),              leading: CircleAvatar(                child: Icon(Icons.settings),              ),            )          ],        ),      ),
      //右侧侧边栏      endDrawer: Drawer(        child: Text("右侧侧边栏"),      ),            //配置顶部导航栏      appBar: AppBar(        title: Text("DrawerDemo"),      ),      body: _tabPages[_tabbarIndex],      bottomNavigationBar: BottomNavigationBar(        //这里是配置底部tabBar的代码      ),    );

效果如下:

关于上面代码,有以下几点需要说明:

1,通过配置Scaffold的drawer属性,我们可以实现左侧侧边栏;通过配置Scaffold的endDrawer属性,我们可以实现右侧侧边栏。

2,配置了Scaffold的drawer属性或者endDrawer属性之后,flutter会自动帮我们在顶部导航栏的左侧或者右侧加上一个按钮,如下图所示:

3,抽屉视图通过 Drawer 组件来实现。

4,我们可以自己来配置抽屉视图,一般是通过Column组件来定义侧边栏的内容。

5,Divider组件可以用来实现分割线。

6,可以通过 DrawerHeader 或者 UserAccountsDrawerHeader 组件来实现抽屉视图的头部。DrawerHeader可以自定义,想实现啥功能就实现啥功能;而 UserAccountsDrawerHeader 的布局、样式和内容是固定的,如果对个性化要求不高,个人还是倾向于使用UserAccountsDrawerHeader

7,无论是DrawerHeader 还是 UserAccountsDrawerHeader 组件,我们都可以使用 decoration 来装饰,可以用 BoxDecoration 来配置侧边栏头部的背景颜色、背景图片等。

8,可以通过配置 ListTile 的 onTap 来监听 ListTile 的点击事件。

9,当点击抽屉视图中的某个组件来跳转到另外一个页面,然后从这个页面返回的时候,默认情况下,抽屉视图是不会消失的,也就是说,再返回回来的时候,抽屉视图效果还是存在的。

那么,当点击抽屉视图中的某个组件来跳转到另外一个页面,然后从这个页面返回的时候,如何让抽屉视图消失呢?我们在页面跳转之前通过 Navigator.pop(context); 这行代码来实现“隐藏抽屉视图”的功能。

以上。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iOS小生活 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档