Flutter学习笔记(18)--Drawer抽屉组件

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

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

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

 

 

 

 

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

DrawerHeader:展示基本信息

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

 

 

 

 

 

 

DrawerHeader组件属性及描述

属性名类型说明
decorationDecorationheader区域的decoration,通常用来设置背景颜色或者背景图片
curveCurve如果decoration发生了变化,则会使用curve设置的变化曲线和duration设置的动画时间来做一个切换动画
childWidgetheader里面所显示的内容控件
paddingEdgeInsetsGeometryheader里面内容控件的padding指。如果child为null的话,则这个值无效
marginEdgeInsetsGeometryheader四周的间隙

 

UserAccountsDrawerHeader组件属性及说明
属性名类型说明
marginEdgeInsetsGeometryHeader四周的间隙
decorationDecorationheader区域的decoration,通常用来设置背景颜色或者背景图片
currentAccountPictureWidget用来设置当前用户的头像
otherAccountsPicturesList<Widget>用来设置当前用户其他账号的头像
accountNameWidget当前用户名
accountEmailWidget当前用户Email
onDetailsPressedVoidCallBack当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: 150,
                    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();
                        }
                    );
                  }
              ),    

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值