iis服务器助手广告
返回顶部
首页 > 资讯 > 移动开发 >Flutter 底部弹窗ModelBottomSheet的使用示例
  • 915
分享到

Flutter 底部弹窗ModelBottomSheet的使用示例

2024-04-02 19:04:59 915人浏览 八月长安
摘要

目录实现效果 代码结构 基本使用 自定义底部弹窗 总结 实现效果 最终实现效果如图片所示,分布演示了基础的,全屏的和自定义的底部弹窗形式。 代码结构 在消息页面 message

实现效果

最终实现效果如图片所示,分布演示了基础的,全屏的和自定义的底部弹窗形式。

代码结构

在消息页面 message.dart 中,使用 Column 组件构建了三个按钮,点击每个按钮调用不同的底部弹窗显示。这部分代码不展示,核心注意的方式是按钮的 onPressed 响应方法,需要使用 async 修饰,这是因为 ModalBottomSheet 的返回结果是一个 Future 对象,需要通过 await 来获取返回结果。


onPressed: () async {
  int selectedIndex = await _showCustomModalBottomSheet(context, _options);
  print("自定义底部弹层:选中了第$selectedIndex个选项");
},
//...

基本使用

基本使用对于全屏和默认只差一个参数,演示代码中,我们使用了一组模拟的数据构建选项数据,然后再传给显示底部弹窗的方法,实际这组数据大部分是从后台获取的。当 isScrollControlled 是 true 时,则是全屏弹窗,默认是 false。


Future<int> _showBasicModalBottomSheet(context, List<String> options) async {
    return showModalBottomSheet<int>(
      isScrollControlled: false,
      context: context,
      builder: (BuildContext context) {
        return ListView.builder(
          itemBuilder: (BuildContext context, int index) {
            return ListTile(
                title: Text(options[index]),
                onTap: () {
                  Navigator.of(context).pop(index);
                });
          },
          itemCount: options.length,
        );
      },
    );
  }

需要注意的有四点:

  • 弹窗需要上下文的 context,这是因为实际页面展示是通过 Navigator 的 push 方法导航的新的页面完成的。
  • 弹窗的组件构建的 builder 方法,这里可以返回自己自定义的组件,后面的自定义组件就是在这里做文章。
  • 在列表的元素的选中点击事件 onTap 方法中,需要使用 Navigator的 pop 方法返回上一个页面,这里可以携带选中的下标(或其他值)返回,上一个页面可以使用 await 的方式接收对应返回的结果。
  • 点击蒙层也可以消失,这时候实际调用的方法是 Navigator.of(context).pop()。因为没有携带参数,所以接收的结果是 null,需要特殊处理一下。

自定义底部弹窗

在自定义底部弹窗中,我们做了如下自定义项:

  • 弹窗的高度指定为屏幕高度的一半,这可以通过自定义组件的 Container 高度实现。
  • 增加了标题栏,且标题栏有关闭按钮:标题在整个标题栏是居中的,而关闭按钮是在标题栏右侧顶部。这可以通过 Stack 堆栈布局组件实现不同的组件层叠及位置。
  • 左上角和右上角做了圆角处理,这个可以通过 Container 的装饰完成,但需要注意的是,由于底部弹窗默认是有颜色的,因此要显示出圆角需要将底部弹窗的颜色设置为透明。

自定义弹窗的代码如下所示:


Future<int> _showCustomModalBottomSheet(context, List<String> options) async {
  return showModalBottomSheet<int>(
    backgroundColor: Colors.transparent,
    isScrollControlled: true,
    context: context,
    builder: (BuildContext context) {
      return Container(
        clipBehavior: Clip.antiAlias,
        decoration: BoxDecoration(
          color: Colors.white,
          borderRadius: BorderRadius.only(
            topLeft: const Radius.circular(20.0),
            topRight: const Radius.circular(20.0),
          ),
        ),
        height: MediaQuery.of(context).size.height / 2.0,
        child: Column(children: [
          SizedBox(
            height: 50,
            child: Stack(
              textDirection: TextDirection.rtl,
              children: [
                Center(
                  child: Text(
                    '底部弹窗',
                    style: TextStyle(
                        fontWeight: FontWeight.bold, fontSize: 16.0),
                  ),
                ),
                IconButton(
                    icon: Icon(Icons.close),
                    onPressed: () {
                      Navigator.of(context).pop();
                    }),
              ],
            ),
          ),
          Divider(height: 1.0),
          Expanded(
            child: ListView.builder(
              itemBuilder: (BuildContext context, int index) {
                return ListTile(
                    title: Text(options[index]),
                    onTap: () {
                      Navigator.of(context).pop(index);
                    });
              },
              itemCount: options.length,
            ),
          ),
        ]),
      );
    },
  );
}

这里有几个额外需要注意的点:

  • 获取屏幕的尺寸可以使用MediaQuery.of(context).size属性完成。
  • Stack 组件根据子元素的次序依次堆叠,最后面的在最顶层。textDirection 用于排布起始位置。
  • 由于 Column 下面嵌套了一个 ListView,因此需要使用 Expanded 将 ListView 包裹起来,以便有足够的空间供 ListView 的内容区滚动,否则会报布局溢出警告。

总结

本篇介绍了三种 ModalBottomSheet 的方式, 可以看到 ModalBottomSheet 非常灵活。实际开发过程中,还可以根据需要,利用 ModalBottomSheet的 builder 方法返回不同的组件进而定制自己的底部弹层组件,能够满足绝大多数场景。同时,借 ModalBottomSheet 的启发,我们自己也可以使用 Navigator方法来实现其他形式的弹层,例如从底部弹出登录页,登录后再返回原页面。

以上就是Flutter 底部弹窗ModelBottomSheet的使用示例的详细内容,更多关于Flutter 底部弹窗ModelBottomSheet的资料请关注编程网其它相关文章!

--结束END--

本文标题: Flutter 底部弹窗ModelBottomSheet的使用示例

本文链接: https://www.lsjlt.com/news/127730.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Flutter 底部弹窗ModelBottomSheet的使用示例
    目录实现效果 代码结构 基本使用 自定义底部弹窗 总结 实现效果 最终实现效果如图片所示,分布演示了基础的,全屏的和自定义的底部弹窗形式。 代码结构 在消息页面 message...
    99+
    2024-04-02
  • Flutter底部弹窗ModelBottomSheet怎么用
    这篇文章给大家分享的是有关Flutter底部弹窗ModelBottomSheet怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实现效果最终实现效果如图片所示,分布演示了基础的,全屏的和自定义的底部弹窗形式。...
    99+
    2023-06-15
  • Flutter实现底部弹窗效果
    目录实现效果代码结构基本使用自定义底部弹窗总结在实际开发过程中,经常会用到底部弹窗来进行快捷操作,例如选择一个选项,选择下一步操作等等。在 Flutter 中提供了一个 showMo...
    99+
    2024-04-02
  • Android底部弹窗的实现示例代码
    本文主要是介绍Android中实现底部弹窗的的正确姿势,如果你在实现底部弹窗时遇到了一些问题,那么请仔细阅读本文,相信文章会对你有所帮助。收获早知道阅读完本文后,你可以有以下收获 利用PopupWindow实现底部弹窗 PopupWin...
    99+
    2023-05-30
    android 底部弹窗 roi
  • Flutter 底部弹窗如何实现多项选择
    目录多选和单选的不同之处 实现方式 界面变更 代码实现 总结 多选和单选的不同之处 单选的时候,选中一个就可以直接把结果返回,因此本身底部弹窗无需状态管理。但到多选的时候,需要知...
    99+
    2024-04-02
  • Flutter实现固定header底部滑动页效果示例
    目录正文实现正文 实现的效果是这样的: 刚开始的时候,是在dev上找了两个轮子,简单测了下,都不太满意,滑动事件处理的比较粗糙,总有bug。就在想着,要不要拿源码改一版的时候,让我...
    99+
    2022-12-29
    Flutter固定header底部滑动页 Flutter header
  • djangoadmin使用SimpleUI自定义按钮弹窗框示例
    目录django admin 使用SimpleUI自定义按钮弹窗框示例补充:详解Django admin高级用法简单使用自定义admin类admin显示属性的设置模板的定制重写自带模...
    99+
    2023-05-15
    django admin自定义按钮弹窗框 django admin 使用SimpleUI Django admin用法
  • Android中怎么利用Activity从底部弹出菜单或窗口
    这篇文章给大家介绍Android中怎么利用Activity从底部弹出菜单或窗口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。第一步:设计要弹出窗口的xml布局:<xml version="1....
    99+
    2023-05-30
    android activity
  • uni-app中弹窗的使用与自定义弹窗
    目录一、uni-app中自带的弹窗二、实例1、uni.showToast(OBJECT)(消息提示框)2、uni.showModal(OBJECT)(显示两个按钮的提示框)3、uni...
    99+
    2024-04-02
  • 实现jQuery弹窗效果的示例分析
    这篇文章主要介绍实现jQuery弹窗效果的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本文实例为大家分享了jQuery弹窗效果展示的具体代码,供大家参考,具体内容如下<...
    99+
    2024-04-02
  • layer弹窗插件操作的示例分析
    这篇文章主要介绍了layer弹窗插件操作的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:1、首先去http://layer...
    99+
    2024-04-02
  • Vue2 Dialog弹窗函数式调用实践示例
    目录前言Vue2 的弹窗常用的使用方式第一种:将弹窗写在上下文中第二种:原型上注入全局方法第三种:通过依赖注入的方式合理的使用方式功能实现结语前言 Dialog 对话框组件几乎是每...
    99+
    2023-01-15
    Vue2 Dialog弹窗函数式调用 Vue2 Dialog
  • 在Android项目中实现一个底部支付弹窗的方法
    在Android项目中实现一个底部支付弹窗的方法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android底部支付弹窗实现的效果:实现的思路:通过继承PopupWindow自...
    99+
    2023-05-31
    android roi 目中
  • uni-app中弹窗的使用与自定义弹窗的方法
    这篇文章主要介绍“uni-app中弹窗的使用与自定义弹窗的方法”,在日常操作中,相信很多人在uni-app中弹窗的使用与自定义弹窗的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”uni-app中弹窗的使用...
    99+
    2023-06-30
  • Sticky Footer绝对底部的示例分析
    这篇文章给大家分享的是有关Sticky Footer绝对底部的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。绝对底部,或者说 Sticky Footer,是一种古老且经典...
    99+
    2024-04-02
  • Android开发Flutter 桌面应用窗口化实战示例
    目录前言一、应用窗口的常规配置应用窗口化自定义窗口导航栏美化应用窗口二、windows平台特定交互注册表操作执行控制台指令实现应用单例三、桌面应用的交互习惯按钮点击态获取应用启动参数...
    99+
    2024-04-02
  • Android Flutter实现弹簧动画交互的示例详解
    目录1.创建一个动画控制器2.使用手势移动Widget3.创建一个动画Widget4.计算速度以模拟弹簧运动物理模拟可以让应用程序的交互感觉逼真和互动,例如,你可能希望为一个 Wid...
    99+
    2023-05-18
    Android Flutter弹簧动画交互 Flutter弹簧动画交互 Android 动画交互
  • Android应用-flutter使用Positioned将控件定位到底部中间
    文章目录 场景描述示例解释 场景描述 要将Positioned定位到屏幕底部中间的位置,你可以使用MediaQuery来获取屏幕的高度,然后设置Positioned的bottom属性和left或right属性,一般我们left...
    99+
    2023-12-25
    flutter Positioned 底部 中间
  • Flutter开发Widgets 之 PageView使用示例
    目录构造方法以及参数:基本用法无限滚动实现指示器切换动画总结:构造方法以及参数: PageView可用于Widget的整屏滑动切换,如当代常用的短视频APP中的上下滑动切换的功能,也...
    99+
    2024-04-02
  • vue弹窗父子组件调用问题示例详解
    目录一、vue弹窗 父子组件 emit 传图片二、vue父组件调用子组件里的不同方法一、vue弹窗 父子组件 emit 传图片 1、:modal-append-to-body=&qu...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作