1.Flutter 抽屉组件drawer 自定义宽度,触发按钮

2023-11-08

效果图如下:

在这里插入图片描述

实现代码如下:

详解都在代码内哦!

drawer: Drawer(
  child: ListView(  //抽屉里面一个list部件
    padding: EdgeInsets.all(0), //顶部padding为0
    children: <Widget>[ //所有子部件
      UserAccountsDrawerHeader( //用户信息栏
        accountName: Text("用户名"),
        accountEmail: Text("yonghuyouxiang@xxx.com"),
        currentAccountPicture: CircleAvatar(  //头像
          backgroundImage: NetworkImage('https://t7.baidu.com/it/u=3616242789,1098670747&fm=79&app=86&size=h300&n=0&g=4n&f=jpeg'),
        ),
        otherAccountsPictures: <Widget>[  //其他账号头像
          CircleAvatar(backgroundImage: NetworkImage('https://t8.baidu.com/it/u=3571592872,3353494284&fm=79&app=86&size=h300&n=0&g=4n&f=jpeg'),),
          CircleAvatar(backgroundImage: NetworkImage("http://b-ssl.duitang.com/uploads/item/201707/01/20170701155239_2E8zH.jpeg"),)
        ],
        onDetailsPressed: (){}, //下拉箭头
        decoration: BoxDecoration(  //背景图片
          image: DecorationImage(
              image: NetworkImage(
                  'https://c-ssl.duitang.com/uploads/item/201211/21/20121121100635_yPV3U.thumb.1900_0.jpeg'
              ),
              fit: BoxFit.cover	//图片不变性裁剪居中显示
          ),
        ),
      ),
      ListTile(   //下部标题
        title: Text("设置"),
        trailing: Icon(Icons.settings)
      ),
      ListTile(
        leading: Icon(Icons.settings),
        title: Text('设置'),
      ),
      ListTile(
        title: Text('设置'),
        leading: Icon(Icons.settings),
        trailing: Icon(Icons.arrow_forward_ios)
      ),
      Divider(),
      ListTile(
        leading: new CircleAvatar(
          child: CircleAvatar(backgroundImage: NetworkImage("http://b-ssl.duitang.com/uploads/item/201707/01/20170701155239_2E8zH.jpeg"),),
        ),
        title: Text("其他用户"),
      ),
      ListTile(
        leading: new CircleAvatar(
          child: new Icon(Icons.check_box),
        ),
        title: Text("任务清单"),
      ),
      ListTile(
        leading: Icon(Icons.wifi),
        title: new Text('无线网络'),
        subtitle: new Text('100MB/S'),
      ),
    ],
  ),
),

main.dart 全部实现代码如下:

//material 是flutter的UI库 里面提供了它的部件
import 'package:flutter/material.dart';

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

//静态部件
class MyDream extends StatelessWidget {
  const MyDream({Key key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        theme: ThemeData(
            primarySwatch: Colors.blue, //主要的样式
            primaryColor: Colors.blue,
            canvasColor: Colors.white //内容样式
            ),
        home: MyDreamPage(),  //页面主体内容
      );
  }
}

//有状态部件
class MyDreamPage extends StatefulWidget {
  @override //重新createState方法
  _MyDreamPageState createState() => _MyDreamPageState();
}
class _MyDreamPageState extends State<MyDreamPage> {
  static const title = '标题const';
  int _num = 0;
  @override //重写build函数
  Widget build(BuildContext context) {
    return Scaffold(  //脚手架
      appBar: AppBar(
        title: Text(title),
      ),
      body: Text("$_num"),
      drawer: Drawer(
        child: ListView(  //抽屉里面一个list部件
          padding: EdgeInsets.all(0), //顶部padding为0
          children: <Widget>[ //所有子部件
            UserAccountsDrawerHeader( //用户信息栏
              accountName: Text("用户名"),
              accountEmail: Text("yonghuyouxiang@xxx.com"),
              currentAccountPicture: CircleAvatar(  //头像
                backgroundImage: NetworkImage('https://t7.baidu.com/it/u=3616242789,1098670747&fm=79&app=86&size=h300&n=0&g=4n&f=jpeg'),
              ),
              otherAccountsPictures: <Widget>[  //其他账号头像
                CircleAvatar(backgroundImage: NetworkImage('https://t8.baidu.com/it/u=3571592872,3353494284&fm=79&app=86&size=h300&n=0&g=4n&f=jpeg'),),
                CircleAvatar(backgroundImage: NetworkImage("http://b-ssl.duitang.com/uploads/item/201707/01/20170701155239_2E8zH.jpeg"),)
              ],
              onDetailsPressed: (){}, //下拉箭头
              decoration: BoxDecoration(  //背景图片
                image: DecorationImage(
                    image: NetworkImage(
                        'https://c-ssl.duitang.com/uploads/item/201211/21/20121121100635_yPV3U.thumb.1900_0.jpeg'
                    ),
                    fit: BoxFit.cover
                ),
              ),
            ),
            ListTile(   //下部标题
              title: Text("设置"),
              trailing: Icon(Icons.settings)
            ),
            ListTile(
              leading: Icon(Icons.settings),
              title: Text('设置'),
            ),
            ListTile(
              title: Text('设置'),
              leading: Icon(Icons.settings),
              trailing: Icon(Icons.arrow_forward_ios)
            ),
            Divider(),
            ListTile(
              leading: new CircleAvatar(
                child: CircleAvatar(backgroundImage: NetworkImage("http://b-ssl.duitang.com/uploads/item/201707/01/20170701155239_2E8zH.jpeg"),),
              ),
              title: Text("其他用户"),
            ),
            ListTile(
              leading: new CircleAvatar(
                child: new Icon(Icons.check_box),
              ),
              title: Text("任务清单"),
            ),
            ListTile(
              leading: Icon(Icons.wifi),
              title: new Text('无线网络'),
              subtitle: new Text('100MB/S'),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton( //浮动按钮
        onPressed: () => {
          setState(() {
            _num++;
          })
        }, //点击的事件函数
        tooltip: '添加',
        child: Icon(Icons.add), //图标
      ),
    );
  }
}

自定义点击事件打开侧边栏:

class _MyDreamPageState extends State<MyDreamPage> {
  //创建key
  GlobalKey<ScaffoldState> _globalKey = GlobalKey();
  static const title = '标题const';
  int _num = 0;
  @override //重写build函数
  Widget build(BuildContext context) {
    return Scaffold(
      key: _globalKey,
      //脚手架
      appBar: AppBar(
        title: Text(title),
      ),
      body: IconButton(	//当点击这个标签时就打开drawer侧边栏
          icon: Icon(Icons.open_in_browser),
          onPressed: () {
          	//当点击这个标签时就打开drawer侧边栏
            _globalKey.currentState.openDrawer();
          }),
      drawer: Drawer(...),
      floatingActionButton: FloatingActionButton(
        //当点击这个 浮动按钮 时也会打开drawer侧边栏
        onPressed: () => {
          _globalKey.currentState.openDrawer();
        }, //点击的事件函数
        tooltip: '打开侧边栏',
        child: Icon(Icons.add), //图标
      ),

自定义宽度:

endDrawer: Container(	//显示右侧 侧边栏
  width: 300,	//显示侧边栏的宽度
  color: Colors.blue,	//背景颜色
  child: Column(children: <Widget>[
    //一些布局样式
  ],),
),
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

1.Flutter 抽屉组件drawer 自定义宽度,触发按钮 的相关文章

  • Android 应用程序在启动时打开应用程序信息屏幕,而不是启动主 Activity

    我不确定这是否是一个问题 但这是我第一次遇到这个问题 我正在开发一个应用程序 当我在进行一些编码后断开应用程序与 Android Studio 和 PC 的连接时 如果我尝试在手机上打开应用程序 它会启动app info屏幕 我们看到强制停
  • 从历史堆栈中删除活动

    我的应用程序在用户第一次运行应用程序时显示注册活动 如下所示 活动启动画面 欢迎来到游戏 注册帐户 ActivitySplashScreenSignUp 很好 填写此信息 ActivityGameMain 游戏主屏幕 因此 当用户单击每个屏
  • 需要使用手机后退按钮返回 Web 视图的帮助

    这是我的代码 package com testappmobile import android app Activity import android os Bundle import android view KeyEvent impor
  • 如何在android中压缩和解压png图像

    您好 在我的应用程序中 当我单击 zip 按钮时 我需要压缩图像文件 当我单击解压缩按钮时 我需要解压缩文件 我尝试使用下面的代码来压缩图像 但我的问题是当我单击 zip 按钮时 正在创建 zip 文件 但之后在使用 winzip 软件的系
  • 如何访问android库项目中的资源

    我正在构建一个 android 库项目 它内部需要一些静态资源 图像 xml 等 然后我想知道我可以把这些资源放在哪里以及如何访问它们 既然我把资源放到了assets文件夹 我使用 AssetManager 来访问资源 public cla
  • 位图内存不足错误

    我对这个错误有疑问 我从 URL 制作网站图标解析器 我这样做是这样的 public class GrabIconsFromWebPage public static String replaceUrl String url StringB
  • Android中如何检测WIFI连接何时建立?

    我需要检测何时通过 WIFI 建立网络连接 发送什么广播来确定已建立有效的网络连接 我需要验证是否存在有效的 HTTP 网络连接 我应该监听什么以及需要进行哪些额外测试才能知道是否存在有效连接 您可以注册一个BroadcastReceive
  • Android:使 Dialog 周围的所有内容都比默认值更暗

    我有一个具有以下样式的自定义对话框 它显示了一个无边框对话框 后面的任何内容都会 稍微 变暗 我的设计师希望背后的一切都比 Android 的默认设置更暗 但不是完全黑色 有这样的设置吗 我能想到的唯一解决方法是使用全屏活动而不是对话框 只
  • Dart 从 UInt8List 获取扩展

    我正在使用该包图像选择器 https pub dev packages image picker接受来自用户的图像 这会产生 PickedFile 和字节数组 由于图像随后被上传 我想知道如何从字节数组中猜测 mime 类型 PickedF
  • 适用于 Android 的 Google 云端硬盘\文档 API

    我在几个小时内将 Dropbox 与我的应用程序集成 因为 SDK 描述清晰并且有很好的使用示例 Google Drive 似乎只有一个 一刀切 的 Gdata SDK 它非常重 有很多依赖项 它使我的应用程序的大小增加了三倍 而且不是很直
  • 如何在 AD 1.0.0 的 AngularDart 中从其父组件引用子组件

    我一直在使用这个答案 AngularDart 如何在自定义组件模板中包含子组件 https stackoverflow com questions 25733154 angulardart how to include subcompone
  • 有多少种方法可以将位图转换为字符串,反之亦然?

    在我的应用程序中 我想以字符串的形式将位图图像发送到服务器 我想知道有多少种方法可以将位图转换为字符串 现在我使用 Base64 格式进行编码和解码 它需要更多的内存 是否有其他可能性以不同的方式做同样的事情 从而消耗更少的内存 现在我正在
  • TextInputLayout 对于在 EditText 中以编程方式给出提示没有效果

    我有一个 EditText 它的父级是 TextInputLayout 我试图以编程方式为 EditText 提供提示 不在布局中 在这种情况下 文本输入提示动画不起作用 它像简单的 EditText 一样工作 有人可以建议如何处理它吗 下
  • 屏幕开/关检测

    在这里 我试图确定屏幕是否打开 但按下电源锁定 解锁按钮时它似乎不起作用 应用程序运行没有错误 但 if else 中的代码似乎没有效果 Edited现在代码可以工作了 谢谢Olgun 但媒体播放器播放不会停止 并且每次在屏幕上 离屏时都会
  • Android 地理围栏无法正常工作(未调用 IntentService)

    这是我的代码 安卓清单
  • 在 Nougat 7.1.1 中点击应用程序快捷方式时出现应用程序未安装错误

    我在向现有应用程序添加静态应用程序快捷方式时遇到一些问题 我按照以下步骤操作https developer android com guide topics ui shortcuts html https developer android
  • 如何在Android中创建一个简洁的两栏输入表单?

    我想创建一个整洁的两列输入表单 如下所示 到目前为止我的 xml 布局代码
  • 使用Intent拨打电话需要权限吗?

    在我的一个应用程序中 我使用以下代码来拨打电话 Intent intent new Intent Intent ACTION CALL Uri parse startActivity intent 文档说我确实需要以下清单许可才能这样做
  • Flash 对象未显示在phonegap android 中

    我已经在 android 手机间隙创建了一个应用程序 我有一个屏幕 我想显示一个静态 flash obj 所以我在屏幕 HTML 页面中放入了以下代码
  • 传递 Stack 中两个小部件之间的所有手势

    我正在开发一个应用程序 在地图上显示标记 如下所示 它的工作方式是标记在地图小部件 上方 呈现为Stack 我的问题是 目前 标记 吸收 用于控制下方地图的手势 如果手势在标记上开始 因此我想知道 有没有办法在堆栈中的两个小部件之间传递所有

随机推荐