如需转载,请注明出处:Flutter学习笔记(18)--Drawer抽屉组件

Drawer(抽屉组件)可以实现类似抽屉拉出和推入的效果,可以从侧边栏拉出导航面板。通常Drawer是和ListView组件组合使用的。

Drawer组件属性及说明
属性名 类型 默认值 说明
child Widget   Drawer的child可以放置任意可显示的对象
elevation double 16 墨纸设计中组件的z坐标顺序

Drawer组件可以添加头部效果,用DrawerHeader和UserAccountsDrawerHeader这两个组件可以实现。

DrawerHeader:展示基本信息

UserAccountsDraweHeader:展示用户头像、用户名、Email等信息

DrawerHeader组件属性及描述

属性名 类型 说明
decoration Decoration header区域的decoration,通常用来设置背景颜色或者背景图片
curve Curve 如果decoration发生了变化,则会使用curve设置的变化曲线和duration设置的动画时间来做一个切换动画
child Widget header里面所显示的内容控件
padding EdgeInsetsGeometry header里面内容控件的padding指。如果child为null的话,则这个值无效
margin EdgeInsetsGeometry header四周的间隙
UserAccountsDrawerHeader组件属性及说明
属性名 类型 说明
margin EdgeInsetsGeometry Header四周的间隙
decoration Decoration header区域的decoration,通常用来设置背景颜色或者背景图片
currentAccountPicture Widget 用来设置当前用户的头像
otherAccountsPictures List<Widget> 用来设置当前用户其他账号的头像
accountName Widget 当前用户名
accountEmail Widget 当前用户Email
onDetailsPressed VoidCallBack 当accountName或accountEmail被点击的时候所触发的回调函数,可以用来显示其他额外的信息

Demo示例:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget{
final List<Tab> _mTabs = <Tab>[
Tab(text: 'Tab1',icon: Icon(Icons.airline_seat_flat_angled),),
Tab(text: 'Tab2',icon: Icon(Icons.airline_seat_flat_angled),),
Tab(text: 'Tab3',icon: Icon(Icons.airline_seat_flat_angled),),
];
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Drawer Demo',
home: DefaultTabController(
length: _mTabs.length,
child: new Scaffold(
appBar: new AppBar(
//自定义Drawer的按钮
leading: Builder(
builder: (BuildContext context){
return IconButton(
icon: Icon(Icons.wifi_tethering),
onPressed: (){
Scaffold.of(context).openDrawer();
}
);
}
),
title: new Text('Drawer Demo'),
backgroundColor: Colors.cyan,
bottom: new TabBar(
tabs: _mTabs
),
),
body: new TabBarView(
children: _mTabs.map((Tab tab){
return new Center(
child: new Text(tab.text),
);
}).toList()
),
drawer: Drawer(
child: ListView(
children: <Widget>[
Container(
height: ,
child: UserAccountsDrawerHeader(
//设置用户名
accountName: new Text('Drawer Demo 抽屉组件'),
//设置用户邮箱
accountEmail: new Text('www.baidu.com'),
//设置当前用户的头像
currentAccountPicture: new CircleAvatar(
backgroundImage: new AssetImage('images/timg.jpg'),
),
//回调事件
onDetailsPressed: (){
},
),
),
ListTile(
leading: Icon(Icons.wifi),
title: new Text('无线网络1'),
subtitle: new Text('我是副标题'),
),
ListTile(
leading: Icon(Icons.wifi),
title: new Text('无线网络2'),
subtitle: new Text('我是副标题'),
),
ListTile(
leading: Icon(Icons.wifi),
title: new Text('无线网络3'),
subtitle: new Text('我是副标题'),
onTap: (){
print('ssss');
},
),
ListTile(
leading: Icon(Icons.wifi),
title: new Text('无线网络4'),
subtitle: new Text('我是副标题'),
),
],
),
),
)
),
);
}
}

效果截图:

Demo感觉没什么好解释的,就是一般的简单用法,特别说一下,添加Drawer组件,Scaffold会自动给我们生成一个Drawer的按钮,如果我们在appBar中手动设置leading,确实是会更改这个按钮的图标,但是点击这个图标就不会弹出Drawer了,所以如果我们有需要自定义Drawer的图标的话,需要如下处理:

            leading: Builder(
builder: (BuildContext context){
return IconButton(
icon: Icon(Icons.wifi_tethering),
onPressed: (){
Scaffold.of(context).openDrawer();
}
);
}
),

Flutter学习笔记(18)--Drawer抽屉组件的更多相关文章

  1. Flutter学习笔记(9)--组件Widget

    如需转载,请注明出处:Flutter学习笔记(9)--组件Widget 在Flutter中,所有的显示都是Widget,Widget是一切的基础,我们可以通过修改数据,再用setState设置数据(调 ...

  2. Flutter学习笔记(10)--容器组件、图片组件

    如需转载,请注明出处:Flutter学习笔记(10)--容器组件.图片组件 上一篇Flutter学习笔记(9)--组件Widget我们说到了在Flutter中一个非常重要的理念"一切皆为组件 ...

  3. Flutter学习笔记(8)--Dart面向对象

    如需转载,请注明出处:Flutter学习笔记(7)--Dart异常处理 Dart作为高级语言,支持面向对象的很多特性,并且支持基于mixin的继承方式,基于mixin的继承方式是指:一个类可以继承自多 ...

  4. Flutter学习笔记(15)--MaterialApp应用组件及routes路由详解

    如需转载,请注明出处:Flutter学习笔记(15)--MaterialApp应用组件及routes路由详解 最近一段时间生病了,整天往医院跑,也没状态学东西了,现在是好了不少了,也该继续学习啦!!! ...

  5. Flutter学习笔记(16)--Scaffold脚手架、AppBar组件、BottomNavigationBar组件

    如需转载,请注明出处:Flutter学习笔记(15)--MaterialApp应用组件及routes路由详解 今天的内容是Scaffold脚手架.AppBar组件.BottomNavigationBa ...

  6. Flutter学习笔记(11)--文本组件、图标及按钮组件

    如需转载,请注明出处:Flutter学习笔记(10)--容器组件.图片组件 文本组件 文本组件(text)负责显示文本和定义显示样式,下表为text常见属性 Text组件属性及描述 属性名 类型 默认 ...

  7. Flutter学习笔记(12)--列表组件

    如需转载,请注明出处:Flutter学习笔记(12)--列表组件 在日常的产品项目需求中,经常会有列表展示类的需求,在Android中常用的做法是收集数据源,然后创建列表适配器Adapter,将数据源 ...

  8. Flutter学习笔记(13)--表单组件

    如需转载,请注明出处:Flutter学习笔记(13)--表单组件 表单组件是个包含表单元素的区域,表单元素允许用户输入内容,比如:文本区域,下拉表单,单选框.复选框等,常见的应用场景有:登陆.注册.输 ...

  9. Flutter学习笔记(21)--TextField文本框组件和Card卡片组件

    如需转载,请注明出处:Flutter学习笔记(21)--TextField文本框组件和Card卡片组件 今天来学习下TextField文本框组件和Card卡片组件. 只要是应用程序就少不了交互,基本上 ...

随机推荐

  1. Golang 受欢迎的原因:大道至简

    前言 Golang自2009年发布第一个版本,2012年发布1.0版本.在这10年的时间里,不断有开发者加入Golang的阵营中,不断共建Golang生态.其中比较有代表性的Golang编写软件作品是 ...

  2. maven多仓库配置(公司服务器与阿里云仓库)

    1. 问题描述 公司内网搭建的有maven私有服务器,但是碰到好几次只有gav没有jar的情况或者最新版本更新不及时,所以需要公司服务器和远程仓库(阿里云)相结合来满足项目需求. 2. 解决方案: m ...

  3. markdown的博客

    测试一下markdown写博客 function firstProgram() { console.log("This is my first markdown blog"); }

  4. 【区分】Typescript 中 interface 和 type

    在接触 ts 相关代码的过程中,总能看到 interface 和 type 的身影.只记得,曾经遇到 type 时不懂查阅过,记得他们很像,相同的功能用哪一个都可以实现.但最近总看到他们,就想深入的了 ...

  5. python-if条件判断与while/for循环

    条件判断if 让计算机像人一样,能判断是非对错,根据条件做一些事情. if ''' ------ if代码结构:------- if 条件: 代码体 tips:同一缩进范围内的代码被视作同一代码体,p ...

  6. 《VR入门系列教程》之3---运动追踪与输入设备

    运动追踪设备    第二种可以使人脑相信它真实处于虚拟世界的关键技术就是运动追踪技术,它可以通过追踪头部的运动状态实时更新渲染的场景.这与我们在真实世界中观看周围非常类似.    高速的惯性测量单元( ...

  7. PHP 跨域处理

    PHP 跨域处理 跨域访问失败是会出现 No 'Access-Control-Allow-Origin' header is present on the requested resource. Or ...

  8. vue项目目录结构详解

    项目简介基于 vue.js 的前端开发环境,用于前后端分离后的单页应用开发,可以在开发时使用 ES Next.scss 等最新语言特性.项目包含: 基础库: vue.js.vue-router.vue ...

  9. 入门训练-4. Fibonacci数列

    问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n ...

  10. [解决方案]IIS配置后报错404,500,502等系列问题

    很多时候刚部署完服务器的IIS以后,第一次部署站点都会出现形形色色,各种各样的报错问题,但这些问题大同小异,我这里就给大家提供的解决的方案,以达到以不变应万变的效果 目的:让大家学会处理类似问题的方法 ...