Flutter不常用组件(四)

news2024/11/27 19:57:15

Offstage

创建一个在视觉上隐藏其子项的小部件。隐藏后不占空间。

该组件有以下几个属性:

  • Key? key:标识键
  • bool offstage = true:是否隐藏。默认为true
  • Widget? child:子组件
Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [...List.generate(5,(index) => Offstage(offstage: index == 2 ? _flag : false,child: Container(width: 200,height: 80,color: Colors.primaries[index % Colors.primaries.length],),),).toList(),const SizedBox(height: 24),ElevatedButton(onPressed: () {_flag = !_flag;setState(() {});},child: const Text("切换Offstage"),),],),
) 

OverflowBar

一个小部件,它的子部件排成一行,除非它们“溢出”了可用的水平空间,在这种情况下,它将它们排成一列。

该组件有以下几个属性:

  • Key? key:标志键
  • double spacing:水平排列时子组件的间距
  • MainAxisAlignment? alignment:水平排列时的对齐方式
  • double overflowSpacing:垂直排列时组件的间距
  • OverflowBarAlignment overflowAlignment:垂直排列时的对齐方式。默认为OverflowBarAlignment.start
  • VerticalDirection overflowDirection = VerticalDirection.down:盒子垂直流动的方向
  • TextDirection? textDirection:文本流动的方向
  • Clip clipBehavior = Clip.none:内容将根据此选项被剪裁(或不剪裁)
  • List<Widget> children:子组件
OverflowBar(spacing: 10,alignment: MainAxisAlignment.center,overflowSpacing: 10,overflowAlignment: OverflowBarAlignment.start,overflowDirection: VerticalDirection.down,textDirection: TextDirection.ltr,clipBehavior: Clip.none,children: List.generate(_count,(index) => Container(width: 60,height: 60,color: Colors.primaries[index % Colors.primaries.length],alignment: Alignment.center,child: Text(index.toString(),style: const TextStyle(fontSize: 24, color: Colors.white),),),).toList(),
) 

OverflowBox

对子组件施加的约束与从父组件获得的约束不同,可能会允许子组件溢出父组件。

该组件有以下几个属性:

  • Key? key:标识键
  • AlignmentGeometry alignment:子组件对齐方式。默认为Alignment.center
  • double? minWidth:最小宽
  • double? maxWidth:最大宽
  • double? minHeight:最小高
  • double? maxHeight:最大高
  • Widget? child:子组件
Center(child: Column(mainAxisAlignment: MainAxisAlignment.spaceEvenly,children: [Container(height: 150,width: 150,color: Colors.red,child: Container(height: 250,width: 250,color: Colors.blue.withOpacity(.5),),),Container(height: 150,width: 150,color: Colors.red,child: OverflowBox(minWidth: 50,minHeight: 50,maxWidth: 300,maxHeight: 300,child: Container(height: 350, // 无效,最终为300width: 250,color: Colors.blue.withOpacity(.5),),),),],),
) 

Overlay 和 OverlayEntry

在所有页面顶部悬浮一个组件。

使用OverlayEntry来创建要显示的组件:

final _entry = OverlayEntry(builder: (context) {return Positioned(bottom: 100,right: 20,child: Image.asset("assets/images/st.png", width: 80),);},
); 

创建一个显示或隐藏的方法:

showOverlay() {final overlay = Overlay.of(context);if (_flag) {_entry.remove();} else {overlay?.insert(_entry);}_flag = !_flag;setState(() {});
} 

在页面中调用方法:

body: Center(child: ElevatedButton(onPressed: showOverlay,child: const Text("Overlay 开关"),),
) 

PageStorage 和 PageStorageBucket

用来保存页面状态。

PageStorage有以下几个属性:

  • Key? key:标识键
  • PageStorageBucket bucketPageStorageBucket对象
  • Widget child:子组件

创建一个PageStorageBucket对象:

final PageStorageBucket _bucket = PageStorageBucket(); 

创建一个组件用来显示在不同的页面:

class ColorPage extends StatelessWidget {const ColorPage({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return ListView.builder(itemExtent: 200,itemBuilder: (context, index) {return Container(color: Colors.primaries[index % Colors.primaries.length],alignment: Alignment.center,child: Text("$index",style: const TextStyle(fontSize: 24, color: Colors.white),),);},);}
} 

创建主页面:

Scaffold(appBar: AppBar(title: const Text('PageStorage')),body: PageStorage(bucket: _bucket,child: const [ColorPage(key: PageStorageKey("one")),ColorPage()][_index],),bottomNavigationBar: BottomNavigationBar(currentIndex: _index,onTap: (int index) {_index = index;setState(() {});},showSelectedLabels: false,showUnselectedLabels: false,items: const <BottomNavigationBarItem>[BottomNavigationBarItem(icon: Icon(Icons.home), label: ''),BottomNavigationBarItem(icon: Icon(Icons.person), label: ''),],),
); 

可以发现,只有设置了PageStorageKey的才能保存界面状态。

PaginatedDataTable

数据分页表格。

该组件有以下几个属性:

  • Key? key:标识键
  • Widget? header:表格顶部的组件
  • List<Widget>? actionsheader最右边的组件
  • List<DataColumn> columnsDataColumn对象,表头
  • int? sortColumnIndex:当前主排序键的列
  • bool sortAscending:是否按升序排序。默认为true
  • void Function(bool?)? onSelectAll:当用户使用标题行中的复选框选择或取消选择每一行时调用
  • double dataRowHeight:数据行高。默认为kMinInteractiveDimension(48.0)
  • double headingRowHeight:表头行高。默认为56.0
  • double horizontalMargin:表格边缘与每行第一个和最后一个单元格中的内容之间的水平边距。默认24.0
  • double columnSpacing:每个数据列内容之间的水平边距。默认为56.0
  • bool showCheckboxColumn:是否显示可选行的复选框。默认为true
  • bool showFirstLastButtons:标记以显示分页按钮以转到第一页和最后一页。默认为false
  • int? initialFirstRowIndex:首次创建小部件时显示的第一行的索引。默认为0
  • void Function(int)? onPageChanged:数据页面改变时调用
  • int rowsPerPage = defaultRowsPerPage:每页显示的行数。默认为10
  • List availableRowsPerPage = const [defaultRowsPerPage, defaultRowsPerPage * 2, defaultRowsPerPage * 5, defaultRowsPerPage * 10]:为rowsPerPage提供的选项
  • void Function(int?)? onRowsPerPageChanged:当用户每页选择不同数量的行时调用
  • DragStartBehavior dragStartBehavior :确定处理拖动开始行为的方式。默认为DragStartBehavior.start
  • Color? arrowHeadColor:翻页箭头的颜色
  • DataTableSource sourceDataTableSource对象
  • double? checkboxHorizontalMargin:复选框周围的水平边距

创建一个继承自DataTableSource的类

class MyData extends DataTableSource {final List<Map<String, dynamic>> _data = List.generate(60,(index) => {"id": index + 1000,"name": Username.cn().fullname,"sex": Random().nextInt(10).isEven ? "男" : "女"},);@overrideDataRow? getRow(int index) {return DataRow(cells: [DataCell(Text(_data[index]["id"].toString())),DataCell(Text(_data[index]["name"].toString())),DataCell(Text(_data[index]["sex"].toString())),],);}@override// TODO: implement isRowCountApproximatebool get isRowCountApproximate => false;@override// TODO: implement rowCountint get rowCount => _data.length;@override// TODO: implement selectedRowCountint get selectedRowCount => 0;
} 

在页面中使用PaginatedDataTable

PaginatedDataTable(header: const Center(child: Text("班级花名册")),actions: const [Icon(Icons.edit_note_rounded)],columns: const [DataColumn(label: Text("序号")),DataColumn(label: Text("姓名")),DataColumn(label: Text("性别")),],sortColumnIndex: 0,sortAscending: true,onSelectAll: (flag) {},dataRowHeight: kMinInteractiveDimension,headingRowHeight: 56,horizontalMargin: 40,columnSpacing: 100,showCheckboxColumn: true,showFirstLastButtons: true,initialFirstRowIndex: 0,onPageChanged: (value) {},rowsPerPage: 10,// onRowsPerPageChanged: (value) {},dragStartBehavior: DragStartBehavior.start,// arrowHeadColor: Colors.blue,source: MyData(),checkboxHorizontalMargin: 20,
) 

关于行和列数据操作的方法请参考DataTable组件,具体的想过教程请自行搜索。

最后

为大家准备了一个前端资料包。包含54本,2.57G的前端相关电子书,《前端面试宝典(附答案和解析)》,难点、重点知识视频教程(全套)。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/143043.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【设计篇】36 # 如何理解可视化设计原则?

说明 【跟月影学可视化】学习笔记。 可视化设计的四个基本原则 基本原则一&#xff1a;简单清晰原则 我们可以看下面一张图&#xff1a;国际茶叶委员会制作的全球茶叶消费排行榜图表&#xff0c;目的是想说明喝茶最多的不是中国人 我们可以用更简单的直方图方式去表现 基本…

c++11 标准模板(STL)(std::deque)(九)

定义于头文件 <deque> std::deque 修改器 移除末元素 std::deque<T,Allocator>::pop_back void pop_back(); 移除容器的最末元素。 在空容器上调用 pop_back 是未定义的。 指向被擦除元素的迭代器和引用被非法化。尾后迭代器是否被非法化是未指定的。其他迭代…

YOLOv5-common.py文件

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 目录一、任务说明二、导入相关包和配置1.基本组件1.1 autopad1.2 Conv1.3 Focus1.4 Bottleneck1.5 BottleneckCSP1.6 C31.7 SPP1.8 Concat1.…

C3P0数据库连接池详解 及连接JDBC步骤

目录 一、基本定义 二、使用C3P0&#xff08;数据库连接池&#xff09;的必要性 1.JDBC传统模式开发存在的主要问题 三、数据库连接池的详细说明 四、使用连接池的明显优势 1.资源的高效利用 2.更快的系统反应速度 3.减少了资源独占的风险 4.统一的连接管理&#xff0c…

SQL优化实战-0001:SQL查找是否存在,不要再使用count

文章目录1.需求分析与普遍SQL写法2.问题分析3.优化方案4.总结5.补充5.1 还有什么时候可以使用LIMIT 15.2 什么时候没必要使用LIMIT 11.需求分析与普遍SQL写法 业务代码中&#xff0c;需要根据一个或多个条件&#xff0c;查询是否存在记录而不关心有多少条记录。普遍的SQL及代码…

大战谷歌!微软Bing引入ChatGPT;羊了个羊高·薪招纳技术人才;Debian彻底移除Python2;GitHub今日热榜 | ShowMeAI资讯日报

&#x1f440;日报合辑 | &#x1f3a1;AI应用与工具大全 | &#x1f514;公众号资料下载 | &#x1f369;韩信子 &#x1f3a1; 『微软Bing』将引入 ChatGPT&#xff0c;与 Google 一场大战难免 微软计划2023年3月底之前推出 Bing 搜索引擎的新版本&#xff0c;使用 ChatGPT …

Lua中self 、自索引及其面向对象应用代码示例

一、Lua表的self标识 在lua中&#xff0c;表拥有一个标识&#xff1a;self。self类似于c中的this指针和python中的self。在lua中&#xff0c;提供了冒号操作符来隐藏这个参数&#xff0c;例如&#xff1a; t1 {id 1, name "panda",addr "beijing" }-…

快过年了,看我使用python制作一个灯笼的小程序

哈喽呀&#xff0c;最近一直在写一些关于新年的的python小东西&#xff0c;今天也不例外&#xff0c;我把那些都放到了一个专辑里面了&#xff0c;感兴趣的朋友们可以去看看一下哦 目录 前言 画外轮廓 画灯笼的提线 画灯笼盖 画一下各种柱子 小小的外壳来一下 其他的小装饰…

Python打包(问题记录,待解决)

引言 文章用于测试在Python3.8的版本&#xff0c;打包Obspy地震包&#xff0c;最后集成到PyQt5上。 部署或冻结应用程序是 Python 项目的重要组成部分&#xff0c; 这意味着捆绑所有必需的资源&#xff0c;以便应用程序找到它需要的一切 能够在客户端计算机上运行。 但是&…

基于Python Unet的医学影像分割系统源码,含皮肤病的数据及皮肤病分割的模型,用户输入图像,模型可以自动分割去皮肤病的区域

手把手教你用Unet做医学图像分割 我们用Unet来做医学图像分割。我们将会以皮肤病的数据作为示范&#xff0c;训练一个皮肤病分割的模型出来&#xff0c;用户输入图像&#xff0c;模型可以自动分割去皮肤病的区域和正常的区域。废话不多说&#xff0c;先上效果&#xff0c;左侧…

JAVA语言基础语法——JVM虚拟机默认处理异常的方式,try...catch捕获异常

1.JVM默认的处理方式 a&#xff0e;把异常的名称&#xff0c;异常原因及异常出现的位置等信息输出在了控制台 运行结果如下&#xff1a; b&#xff0e;程序停止执行&#xff0c;异常下面的代码不会再执行了 2.try...catch捕获异常&#xff08;自己处理&#xff0c;捕获异常&am…

数学建模-相关性分析(Matlab)

注意&#xff1a;代码文件仅供参考&#xff0c;一定不要直接用于自己的数模论文中 国赛对于论文的查重要求非常严格&#xff0c;代码雷同也算作抄袭 如何修改代码避免查重的方法&#xff1a;https://www.bilibili.com/video/av59423231 //清风数学建模 一、基础知识 1.皮尔逊…

Qt之Json操作demo

一、JSON简介&#xff1a; JSON(JavaScript Object Notation)是一种轻量级的数据交换格式&#xff0c;使用JavaScript语法来描述数据对象&#xff0c;但是JSON仍然独立于语言和平台。JSON解析器和JSON库支持许多不同的编程语言&#xff0c;被广泛用于Internet上的数据交换格式。…

多线程高级(线程状态、线程池、volatile、原子性、并发工具)

1.线程池 1.1 线程状态介绍 当线程被创建并启动以后&#xff0c;它既不是一启动就进入了执行状态&#xff0c;也不是一直处于执行状态。线程对象在不同的时期有不同的状态。那么Java中的线程存在哪几种状态呢&#xff1f;Java中的线程 状态被定义在了java.lang.Thread.State…

Java程序:jstack

前言 如果有一天&#xff0c;你的Java程序长时间停顿&#xff0c;也许是它病了&#xff0c;需要用jstack拍个片子分析分析&#xff0c;才能诊断具体什么病症&#xff0c;是死锁综合征&#xff0c;还是死循环等其他病症&#xff0c;本文我们一起来学习jstack命令~ jstack 的功能…

阳康后的第一篇博客,先来几道恶心二进制编程题

目录 一、统计二进制中1的个数 二、打印整数二进制的奇数位和偶数位 三、两个整数二进制位不同个数 一、统计二进制中1的个数 这是一道牛客网OJ题&#xff0c;感兴趣的话可以先做一遍再看解析哦 -> 牛客网的OJ链接 注意&#xff1a;上面的牛客网是接口型&#xff0c;不需…

Vagrant管理已存在的虚拟机

起因 某天打开VirtualBox后&#xff0c;发现之前创建的虚拟机都没了&#xff0c;后将虚拟机从本地磁盘又重新导入&#xff0c;但是发现使用 vagrant up 会创建新的虚拟机&#xff0c;而我要用vagrant管理已存在的虚拟机&#xff0c;就是 vagrant up的时候&#xff0c;我需要启动…

MySQL数据库:常用数据类型

一、整形和浮点型 数据类型大小说明对应C类型bit(n)n指定比特位数&#xff0c;默认1位比特位数&#xff0c;n范围1-64&#xff1b;存储数值范围2-2^n-1char[]tinyint1字节signed charsmallint2字节short intint4字节intbigint8字节long long intfloat(m,d)4字节单精度&#xf…

【前端】CSS基础

一、CSS基础 1.1CSS的介绍 CSS&#xff1a;层叠样式表&#xff08;Cascading style sheets&#xff09; CSS作用是什么&#xff1f;&#xff1f; 1.2CSS语法规则 写在哪里&#xff1f; CSS是style标签中&#xff0c;style标签一般写在head标签里面&#xff0c;title标签下…

真的强,又一个开源项目,杀疯了

最近&#xff0c;AI大模型连续火爆出圈&#xff0c;人工智能生成模型&#xff08;AIGC&#xff09;的热度尚未褪去&#xff0c;聊天机器人ChatGPT便引发全网热议&#xff0c;两周吸引百万用户。还有卷趴一半程序员的AlphaCode&#xff0c;生成全新蛋白质的ESM2等&#xff0c;不…