Flutter 自定义Drawer 滑出位置的大小实例代码详解

作者:三掌柜666 时间:2021-09-18 23:18:19 

Flutter开发过程中,Drawer控件的使用频率也是比较高的,其实有过移动端开发经验的人来说,Flutter中的Drawer控件就相当于ios开发或者Android开发中的“抽屉”效果,从侧边栏滑出导航菜单。对于Flutter中的Drawer控件的常规用法就不多介绍,网上大把的教程。

那么本篇博文分享一个网上教程不多的一个知识点,那就是自定义Drawer的滑出位置的大小,自定义Drawer滑出位置就需要修改一个double的widthPercent属性,widthPercent一般默认值是0.7,然后想要修改widthPercent的默认值,或者设置想要的任何大于0小于1之间的值都可以根据这个来设置。具体操作如下所示:

1、首先封装这个方法(看官可以直接复制使用)


class CustomDrawer extends StatelessWidget {

final double elevation;

final Widget child;

final String semanticLabel;

final double widthPercent;

const CustomDrawer({

Key key,

this.elevation = 16.0,

this.child,

this.semanticLabel,

this.widthPercent = 0.7,

}) :

assert(widthPercent!=null&&widthPercent<1.0&&widthPercent>0.0)

,super(key: key);

@override

Widget build(BuildContext context) {

assert(debugCheckHasMaterialLocalizations(context));

String label = semanticLabel;

switch (defaultTargetPlatform) {

case TargetPlatform.iOS:

label = semanticLabel;

break;

case TargetPlatform.android:

case TargetPlatform.fuchsia:

label = semanticLabel ?? MaterialLocalizations.of(context)?.drawerLabel;

}

final double _width=MediaQuery.of(context).size.width*widthPercent;

return Semantics(

scopesRoute: true,

namesRoute: true,

explicitChildNodes: true,

label: label,

child: ConstrainedBox(

constraints: BoxConstraints.expand(width: _width),

child: Material(

elevation: elevation,

child: child,

),

),

);

}

}

Flutter 自定义Drawer 滑出位置的大小实例代码详解

2、调用的地方

Flutter 自定义Drawer 滑出位置的大小实例代码详解


@override

Widget build(BuildContext context) {

return InkWell(

onTap: () {

Navigator.of(context).pop();

Navigator.of(context).push(new MaterialPageRoute(

builder: (BuildContext context) => new AccountManagersPage('')));

},

child: new CustomDrawer( //调用修改Drawer的方法

widthPercent:0.5, //设置Drawer滑出位置居屏幕的一半宽度

child: Container(

color: Color(0xFF1F1D5B),

child: Column(

children: <Widget>[

Expanded(

child: ListView(children: <Widget>[

Column(

children: <Widget>[

ListTile(

title: Text('设备列表',

style: TextStyle(color: Color(0xFF8B89EF))),

contentPadding: EdgeInsets.symmetric(

horizontal: 15.0, vertical: 0.0),

),

ListTile(

leading: CircleAvatar(

backgroundImage: new ExactAssetImage(

'images/menu_lamp_pole.png'),

radius: 15.0,

),

title: Text('灯杆',

style: TextStyle(

color: Color(0xFFffffff),

fontSize: 18.0,

)),

onTap: () {

Navigator.of(context).pop();

//Navigator.of(context).push(new MaterialPageRoute(builder:(BuildContext context) => new BigScreenPage(0,'灯杆列表')));

Navigator.of(context).push(new MaterialPageRoute(

builder: (BuildContext context) =>

new MainPoleView()));

}),

// Divider(),

ListTile(

leading: CircleAvatar(

backgroundImage:

new ExactAssetImage('images/menu_charge.png'),

radius: 15.0,

),

title: Text('充电桩',

style: TextStyle(

color: Color(0xFFffffff),

fontSize: 18.0,

)),

onTap: () {

Navigator.of(context).pop();

Navigator.of(context).push(new MaterialPageRoute(

builder: (BuildContext context) =>

new BigScreenPage(6, '充电桩列表')));

}),

],

)

]),

)

],

),

),

),

);

}

实现效果如下所示:

Flutter 自定义Drawer 滑出位置的大小实例代码详解

来源:https://blog.csdn.net/CC1991_/article/details/105527452

标签:flutter,自定义drawer
0
投稿

猜你喜欢

  • Java在Excel中创建透视表方法解析

    2021-11-03 05:49:45
  • Android开发之模仿微信打开网页的进度条效果(高仿)

    2021-09-02 10:17:04
  • Spring 容器初始化 register 与 refresh方法

    2021-09-19 21:20:56
  • C语言数据结构之二叉树的非递归后序遍历算法

    2021-12-23 07:10:52
  • 最值得Java开发者收藏的网站

    2022-03-09 15:57:08
  • Java11 发布前抓紧掌握这些新特性

    2022-02-08 13:20:58
  • C#实现char字符数组与字符串相互转换的方法

    2022-01-18 05:28:52
  • Java内存模型JMM详解

    2023-11-28 13:08:50
  • spring boot如何加入mail邮件支持

    2021-09-27 15:12:57
  • Android保持屏幕常亮2种实现方法

    2022-09-08 11:22:43
  • 软件开发七大过程模型

    2023-12-22 17:06:14
  • C#串口通信工具类的封装

    2023-11-23 11:19:54
  • Java源码解析之平衡二叉树

    2023-11-29 11:16:40
  • Java实现两人五子棋游戏(三) 画出棋子

    2021-05-29 04:53:53
  • Java中保证线程顺序执行的操作代码

    2023-05-14 17:36:46
  • winform去掉右上角关闭按钮的方法

    2023-02-11 16:31:40
  • C#实现XML文件读取

    2023-03-06 13:38:44
  • Android 简单实现倒计时功能

    2023-06-27 11:35:40
  • Java异常简介和架构_动力节点Java学院整理

    2022-09-03 07:07:52
  • fastjson全局日期序列化设置导致JSONField失效问题解决方案

    2021-12-13 10:58:24
  • asp之家 软件编程 m.aspxhome.com