第三十七回:如何正确地显示BottomeSheet

news/2024/10/17 22:13:00/

文章目录

  • 概念介绍
  • 显示方法
    • 使用showBottomSheet()方法
    • 使用showModalBottomSheet()方法
  • 示例代码

我们在上一章回中介绍了 BottomSheet Widget相关的内容,本章回中将介绍 如何正确地显示BottomSheet Widget.闲话休提,让我们一起Talk Flutter吧。

概念介绍

我们在上一章回中介绍了BottomSheet的基本用法,该用法是一种被动式的用法,因为它和Scaffold组件的bottomSheet属性绑定在了一起,当程序中显示Scaffold所在的页面时BottomSheet会自动显示在当前页面底部,而且无法关闭。本章回中将介绍主动式用法:通过点击按钮来打开或者关闭BottomSheet窗口。

显示方法

使用showBottomSheet()方法

该方法只有一个WidgetBuilder类型的参数,该类型是一个方法类型,我们需要实现该方法并且在方法中返回一个组件。使用这种方法可以动态地在页面底部弹出和关闭BottomSheet窗口。详细的用法看示例代码就可以。

注意:这种方法必须嵌套在一个组件中,不然会报运行时错误,而且无法显示BottomSheet窗口。

使用showModalBottomSheet()方法

该方法包含两个必选参数和多个可选参数,我们重点关注必选参数:

  • required BuildContext context
  • required WidgetBuilder builder

该方法可以直接使用,不需要嵌套组件。此外,该方法生成的BottomSheet类似IOS中的modelView,点击窗口区域外的任意位置就可以关闭窗口。

示例代码

  //用来演示ShowBottomSheet,使用showBottomSheet()方法Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("Example of BottomSheet"),),body: const ExBottomSheet(),);}
}//必须创建一个widget并且将它赋值给Scaffold的body属性才可以,该示例来源于官方文档
//参考:https://api.flutter.dev/flutter/material/ScaffoldState/showBottomSheet.html
class ExBottomSheet extends StatelessWidget {const ExBottomSheet({Key? key}) : super(key: key);Widget build(BuildContext context) {return Center(child: ElevatedButton(child: const Text('showBottomSheet'),onPressed: () {Scaffold.of(context).showBottomSheet<void>((BuildContext context) {return Container(height: 200,color: Colors.amber,child: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,mainAxisSize: MainAxisSize.min,children: <Widget>[const Text('This is BottomSheet'),//关闭BottomSheet窗口ElevatedButton(child: const Text('Close BottomSheet'),onPressed: () {Navigator.pop(context);},),],),),);},);},),);
}//使用showModalBottomSheet()方法
_showModalBottomSheet(context) {showModalBottomSheet(context: context,builder: (BuildContext context) {return Container(width: 300,height: 100,color: Colors.green,child: const Text("This is BottomSheet"),);});
}//通过按钮来弹出窗口
ElevatedButton(onPressed: () => _showModalBottomSheet(context),child: const Text("Show Modal BottomSheet"),
),

这里只列出了核心代码,完整的代码可以查看Github上ex019文件中的内容。编译并且运行上面的代码可以在屏幕底部看到一个弹出窗口,该窗口中只包含一个文本按钮,点击按钮可以关闭弹出窗口。我在这里就不演示程序的运行结果了,建议大家自己动手去实践。

看官们,关于"如何正确地显示BottomeSheet Widget"就介绍到这里,欢迎大家在评论区交流与讨论!


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

相关文章

Java技术接单

今天给大家介绍一个阶段性&#xff08;周期性&#xff09;能获取一定收益的Java技术接单群&#xff0c;分享给大家&#xff01;主要对搞Java的粉丝有帮助&#xff0c;因为可以赚点小钱&#xff0c;对Java技术的要求不高&#xff01; 那些感兴趣或者想直接加技术群的我给大家讲一…

快速理解会话跟踪技术Cookie和Session

文章目录 会话跟踪技术客户端会话跟踪技术Cookie服务端会话跟踪技术Session 会话跟踪技术 会话&#xff1a;客服端和服务端的多次请求与响应称为会话。 会话跟踪&#xff1a;服务器需要识别多次请求是否来自同一浏览器&#xff0c;在同一次会话多次请求中共享数据。 HTTP协议是…

C++中的继承、以及赋值兼容转换。

一、继承的概念及定义 继承可以使代码复用&#xff0c;允许在保持原有类特性的基础上进行扩展。 举个例子&#xff1a;就好比我现在要封装老师、学生等这些人的属性和方法&#xff0c;但是这些人都有重复的属性和方法&#xff0c;比如name、age、sex等等&#xff0c;那么我可…

虚拟化与云计算有什么区别?

两者核心理念都是从硬件中分离资源&#xff0c;从而创建可用的环境&#xff0c;所以很容易被混为一谈。 虚拟化有助于创建云计算&#xff0c;但它并非实现云计算的决定性技术&#xff0c;也可能只是其中的一种。你可以这样理解&#xff1a; 虚拟化是一种将功能与硬件分离的技…

堆和堆排序

目录 堆的概念 堆的实现 堆的存储结构 堆的插入操作 堆的删除操作 堆的创建 向上调整建堆和向下调整建堆 堆排序 堆的应用 - topK问题 堆的概念 “堆”是计算机科学中一种数据结构&#xff0c;可以看作是一棵完全二叉树。通常满足堆的性质&#xff1a;父节点的值总是…

【firewalld防火墙】

目录 一、firewalld概述二、firewalld 与 iptables 的区别1、firewalld 区域的概念 三、firewalld防火墙默认的9个区域四、Firewalld 网络区域1、区域介绍2、firewalld数据处理流程 五、firewalld防火墙的配置方法1、使用firewall-cmd 命令行工具。2、使用firewall-config 图形…

Win11硬盘分区

电脑重装了Win11系统&#xff0c;按WinE打开主文件夹&#xff0c;再点击此电脑&#xff0c;发现&#xff1a; 磁盘只有一个C盘。硬盘的所有空间都在该盘上了&#xff0c;那么我们怎么将其分区呢&#xff1f; Win11硬盘分区步骤&#xff1a; 步骤1&#xff1a; 按WinR输入dis…

2023国赛tomcat题

环境: 10.10.120.128 安装 tomcaA 10.10.120.129 安装tomcatB 10.10.120.130 安装 nginx 配置dns: 正向解析 反向解析 Tomcat ssl配置 [root@localhost ~]# tar -zxvf jdk-11.0.8_linux-x64_bin.tar.gz [root@localhost ~]# mv jdk-11.0.8 /usr/local/ Vim /etc/profile …