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,
),
),
);
}
}
2、调用的地方
@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, '充电桩列表')));
}),
],
)
]),
)
],
),
),
),
);
}
实现效果如下所示:
来源: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