Flutter-底部分享弹窗(showModalBottomSheet)

news/2024/12/20 11:43:24/

showModalBottomSheet 构造函数的样式

Future<T?> showModalBottomSheet<T>({required BuildContext context,             // 上下文对象,通常是当前页面的上下文bool isScrollControlled = false,           // 控制底部弹窗的大小,如果为 true,则弹窗可以根据内容大小自动调整bool isDismissible = true,                 // 是否点击外部区域时可以关闭弹窗bool enableDrag = true,                   // 是否允许拖动弹窗来关闭double? backgroundColor,                  // 背景颜色ShapeBorder? shape,                       // 弹窗的形状(圆角、矩形等)Color? barrierColor,                      // 点击外部区域的背景颜色required WidgetBuilder builder,           // 弹出框的内容
})

需求描述

当弹窗正在展示的时候,就不会二次展示

可以使用PersistentBottomSheetController,它提供了对底部表单的更细粒度的控制。以下是修改后的代码:

import 'package:flutter/material.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(home: MyHomePage(),);}
}class MyHomePage extends StatefulWidget {@override_MyHomePageState createState() => _MyHomePageState();
}class _MyHomePageState extends State<MyHomePage> {PersistentBottomSheetController bottomSheetController;@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('Flutter Popup Demo'),),body: Center(child: ElevatedButton(onPressed: () {// 点击按钮时触发底部表单startBottomSheet();},child: Text('显示底部表单'),),),);}void startBottomSheet() {// 如果底部表单已经存在,则不再新建底部表单if (bottomSheetController == null || bottomSheetController?.isClosed == true) {bottomSheetController = showModalBottomSheet(context: context,builder: (BuildContext context) {return Container(height: 200.0,child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [Text('底部表单内容'),ElevatedButton(onPressed: () {// 关闭底部表单Navigator.of(context).pop();},child: Text('关闭'),),],),);},);// 一秒后关闭底部表单Future.delayed(Duration(seconds: 1), () {// 使用控制器关闭底部表单if (bottomSheetController != null && !bottomSheetController.isClosed) {bottomSheetController.close();}});}}
}

在这个示例中,使用PersistentBottomSheetController来管理底部表单的状态。在定时器触发后,检查控制器是否存在并且未关闭,然后手动关闭底部表单。这样就可以在一秒后关闭底部表单,同时确保在定时器触发时不会重复创建底部表单。


http://www.ppmy.cn/news/1556636.html

相关文章

Scala快速入门+示例

目录 定义和描述idea基础关键字变量、常量输出数据类型类型转换 函数式编程函数和方法的区别定义示例有参带返回值有参没有返回值 注意点 面向对象object和class的区别对象的属性 快速上手使用版 定义和描述 基于JVM的语言&#xff0c;支持面向对象、面向函数&#xff0c;支持…

华纳云:如何搭建一个简易的文件服务器

搭建一个简易的文件服务器&#xff0c;主要是让多个客户端能够通过网络访问、上传和下载文件。以下是一个基于Linux服务器的文件服务器搭建教程&#xff0c;使用Samba(适用于Windows和Linux客户端)和NFS(适用于Linux客户端)两种常见方法。 一、搭建Samba文件服务器 Samba是一个…

将OBJ或GLB文件转换为3DTiles

格式简介 GLB文件&#xff08;.GLB&#xff09;代表“GL传输格式二进制文件”&#xff0c;是用于共享3D数据的标准化文件格式。确切地说&#xff0c;它可以包含有关三维模型、场景、模型、光源、材质、节点层次和动画的信息。 OBJ文件是一种文本文件格式&#xff0c;这就意味…

linux部分rpm包总结描述

acl-2.2.51-15.el7.x86_64 Commands for Manipulating POSIX&#xff08;可移植操作系统接口 of unix&#xff09; Access Control Lists.有getfacl和setfacl --exclude aic94xx-firmware-30-6.el7.noarch SCSI磁盘阵列驱动 --exlucde aide-0.15.1-13.el7.x86_64 入侵侦察环境 …

现代密码学总结(下篇)

密钥管理与公钥变革 Needham-Schroeder协议 &#xff08;对称&#xff09; 1978年提出, 非安全网络环境下, 借助可信第三方利用对称 密码技术分配会话密钥 假设A和B分别与信任权威T建立了一个共享的静态密钥Kat和Kbt Diffie-Hellman (-Merkle) KE 协议 安全定义: 如果DD…

ARM/Linux嵌入式面经(五四):睿联

一面,技术面,视频面开摄像头。 文章目录 1. 自我介绍。2. 系统调用的流程。系统调用的流程一、系统调用的基本流程二、系统调用的关键组件三、面试官追问及回答3. 虚拟地址到物理地址转换的实现。虚拟地址到物理地址转换的实现实现原理具体步骤面试官追问及答案4. riscv结构的…

【计算机网络安全】网络攻击

实验二 网络攻击 实验人员&#xff1a;第五组全体成员 一、实验目的&#xff1a; 1&#xff1a;掌握ARP欺骗的原理&#xff0c;实践ARP欺骗的过程。 2&#xff1a;掌握TCP劫持的原理&#xff0c;实践TCP劫持的过程。 3&#xff1a;掌握DNS欺骗的原理&#xff0c;实践DN…

jconsole监控c3p0数据库连接数

一、在需要监控的应用服务器所在的机器上&#xff0c;找到应用容器的jvm启动参数&#xff0c;添加如下参数&#xff1a; -Djava.rmi.server.hostname10.127.23.24&#xff1a;当前机器的地址 -Dcom.sun.management.jmxremote.port9999&#xff1a;使用那个端口作为jconsole的…