第二百六十四回
文章目录
- 概念介绍
- 使用方法
- 示例代码
我们在上一章回中介绍了SliverPadding组件相关的内容,本章回中将介绍Sliver综合示例.闲话休提,让我们一起Talk Flutter吧。
概念介绍
我们在前面的章回中介绍了各种Sliver相关的组件:SliverList,SliverGrid,SliverAppBar和SliverPadding,本章回将综合使用它们。下面是示例程序的
运行效果图。不过在使用之前还需要介绍一个新组件:CustomScrollView。该组件相当于一个粘合剂,它可以把各个Sliver组件组合在一起。010slivers
使用方法
和其它组件类似,该组件提供了相关的属性来控制自己,
下面是该组件中常用的属性,掌握这些属性后就可以使用该组件了。
- scrollDirection属性:主要用来控制列表中滚动方向;
- controller属性:主要用来控制某个列表的位置;
- slivers属性:主要用来存放Sliver相关的组件,它的用法类似Column组件中的children属性;
介绍完这些常用属性后,我们将在后面的小节中通过具体的示例代码来演示它的使用方法。
示例代码
CustomScrollView(slivers: [SliverAppBar(title: const Text('Title of SliverAppBar'),backgroundColor: Colors.purpleAccent,///关闭和展开时的高度collapsedHeight: 60,expandedHeight: 300,///appBar空间扩展后显示的内容flexibleSpace: FlexibleSpaceBar(///这个title在appBar的最下方,可以不设定,缩小后它会和SliverAppBar的title重合title: const Text('title of FlexibleSpaceBar'),background: Container(decoration: const BoxDecoration(image:DecorationImage(opacity: 0.8,image: AssetImage("images/ex.png"),fit: BoxFit.fill,),),///扩展空间中主要显示的内容child: const Center(child: Text('child of container')),),centerTitle: true,///拉伸和折叠时的样式,效果不是很明显collapseMode: CollapseMode.pin,stretchModes: const [StretchMode.zoomBackground,StretchMode.blurBackground,StretchMode.fadeTitle,],),),///SliverAppBar下方显示的内容,这个需要和SliverAppBar一起添加,否则不会出现滑动效果///这个只是一个简单的SliverList,用来配合SliverAppBar使用,真正的介绍在下面的程序中SliverList(delegate: SliverChildListDelegate(// List.generate(40, (index) => Icon(Icons.recommend),),List.generate(5, (index) => Text('Item ${index+1}'),),),),///SliverGrid和工厂方法SliverGrid.count(///交叉轴显示内容的数量,这里相当于3列crossAxisCount: 3,///主轴上显示内容的空间设置,相当于行距mainAxisSpacing: 10,///交叉轴上显示内容的空间设置,相当于列距crossAxisSpacing: 10,childAspectRatio: 1.2,///Grid中显示的内容,一共9个自动换行,分3行显示children:List.generate(9, (index) {return Container(alignment: Alignment.center,///使用固定颜色和随机颜色// color: Colors.redAccent,// color:Colors.primaries[index%5],///修改为圆角,颜色移动到圆角中decoration: BoxDecoration(color: Colors.primaries[index%5],borderRadius: BorderRadius.circular(20),),child: Text('item: $index'),);}).toList(),),///不使用工厂方法,直接使用SliverGrid的构造方法SliverGrid(///Grid中显示的内容,可以使用BuilderDelete直接创建显示内容,或者使用已经有的listdelegate: SliverChildBuilderDelegate((context,index){return const Icon(Icons.face_3_outlined); },childCount: 20,),///配置Grid的相关属性,gridDelegate:const SliverGridDelegateWithFixedCrossAxisCount(///主轴上显示内容的空间设置,相当于行距mainAxisExtent: 20,///这个值不能小于显示内容,否则最后一行的内容会被遮挡mainAxisSpacing: 20,///交叉轴显示内容的数量,这里相当于4列crossAxisCount: 4,///交叉轴上显示内容的空间设置crossAxisSpacing: 20,///显示内容的宽高比childAspectRatio: 1.2,),),///不使用工厂方法,直接使用SliverGrid的构造方法,和上一个类似,只是创建显示内容的方法不同SliverGrid(///Grid中显示的内容,可以使用BuilderDelete直接创建显示内容,或者使用已经有的listdelegate: SliverChildListDelegate(List.generate(20,(index) => const Icon(Icons.camera,color: Colors.blue,),),),///配置Grid的相关属性,同上。不同之处在于交叉轴显示内容的数量不固定,而是与空间有关gridDelegate:const SliverGridDelegateWithMaxCrossAxisExtent(maxCrossAxisExtent: 40,mainAxisExtent: 40,mainAxisSpacing: 20,crossAxisSpacing: 5,childAspectRatio: 1.6,),),///SliverList,可以理解为对ListView的封装,以便用于Sliver中创建delegate对象,使用builder方法。SliverList(delegate: SliverChildBuilderDelegate((context,index){return Container(height: 60,alignment: Alignment.center,child: Text('This is ${index+1} item'),);},///list的数量childCount:5,),),///与上面的SliverList类似,只是不有创建delegate对象,而是直接使用现成的list对象SliverList(delegate: SliverChildListDelegate(List.generate(5, (index) => const Icon(Icons.add),),) ,),///调整显示内容的边距,在上下左右四个方向添加,SliverList,SliverList效果不明显SliverPadding(///在上下左右四个方向上添加边距// padding: EdgeInsets.only(left: 10,right: 10),padding: const EdgeInsets.all(10),sliver:SliverList(delegate:SliverChildListDelegate(List.generate(5,(index) => Container(color: Colors.grey,child: Text('Item ${index+1}'),),),) ,) ,),///调整显示内容的边距,在上下左右四个方向添加,配合Grid内部的边距效果比较明显SliverPadding(padding: const EdgeInsets.all(10),sliver: SliverGrid.count(mainAxisSpacing: 10,crossAxisCount: 4,crossAxisSpacing: 10,children: List.generate(9, (index) => Container(alignment: Alignment.center,color: Colors.primaries[index%5],child: Text('Item ${index+1}'),),) ,),),],
),
上面是的代码中使用了前面章回中介绍过的所有与Sliver相关的组件,整个界面的外层使用CustomScollView当作容器,容器里的组件全部是SliVer相关的组件,最
上方是SliverAppBar组件,它下面是SliverList和SliverGrid组件,向上滑动时SliverBar会被折叠,SliverList和SliverGrid会跟着一起滚动,不过它们
是做为一个整体来滚动而不是像ListView中一个条目,一个条目地滚动。具体的滚动效果可以看开篇的程序运行效果图。这个程序中包含的内容比较多,单是SliverList
就有好几个,大家可以对比着看,建议大家自己动手去实践,这样可以真正体会到SliverList等组件的功能,以及它们包含的细节。
看官们,与"Sliver综合示例"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!
相关文章:
第二百六十四回
文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了SliverPadding组件相关的内容,本章回中将介绍Sliver综合示例.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在前面的章回中介绍了各种Sliver相关的组件:SliverList,SliverGr…...

用Kimi chat识别并整理图片里面的文字
Kimi chat是有OCR功能的,可以识别图片中的文字。 下面这张图片是一本书的注释,里面提到有不少图书,利用Kimi chat就可以轻松完成提取其中图书书名的任务。 先拿一张图片来做实验。Kimichat的回复: 在您提供的文件内容中…...

驾驭未来:从传统运维到智能化运维的转型之路
随着科技的飞速发展,企业的业务需求也在不断变化。为了满足这些需求,企业的IT架构逐渐向云原生、容器化和微服务化演进。作为支撑企业业务发展的运维人员,我们需要紧跟时代步伐,不断提升自己的技能和认知水平。 在2023年全球运维大…...

LabVIEW在旋转机械故障诊断中的随机共振增强应用
在现代工业自动化领域,准确的故障诊断对于保障机械设备的稳定运行至关重要。传统的故障检测方法往往因噪声干扰而难以捕捉到微弱的故障信号。随着LabVIEW在数据处理和系统集成方面的优势日益凸显,其在旋转机械故障诊断中的应用开始发挥重要作用ÿ…...
尚硅谷大数据技术-数据湖Hudi视频教程-笔记02【核心概念(基本概念、数据写、数据读)】
大数据新风口:Hudi数据湖(尚硅谷&Apache Hudi联合出品) B站直达:https://www.bilibili.com/video/BV1ue4y1i7na 尚硅谷数据湖Hudi视频教程百度网盘:https://pan.baidu.com/s/1NkPku5Pp-l0gfgoo63hR-Q?pwdyyds阿里…...

鸿蒙(HarmonyOS)应用开发指南
1. 概述 1.1 简介 鸿蒙(即 HarmonyOS ,开发代号 Ark,正式名称为华为终端鸿蒙智能设备操作系统软件)是华为公司自 2012 年以来开发的一款可支持鸿蒙原生应用和兼容 AOSP 应用的分布式操作系统。该系统利用“分布式”技术将手机、电…...

Android 13 辅助屏导航栏不显示问题
问题 在Android 13 上开启辅助屏幕。但是发现辅助屏systemui 导航按 icon没有显示,但是点击对应的区域有作用 分析 可以用 anroid device monitor 工具分析视图 解决 public NavigationBarView(Context context, AttributeSet attrs) {super(context, attrs);…...

【QT】标准对话框
目录 1 概述 2 QFileDialog对话框 1.选择打开一个文件 2.选择打开多个文件 3.选择已有目录 4.选择保存文件名 3 QColorDialog对话框 4 QFontDialog对话框 5 QInputDialog标准输入对话框 1.输入文字 2.输入整数 3.输入…...
微信小程序跳转方式及问题
一、五种跳转方式 1.wx.navigateTo() 保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面 通常推荐使用 wx.navigateTo进行跳转,以便返回原页面,以提高加载速度 wx.navigateTo({url: })2.wx.redirectTo() 关闭当前页面&#x…...

Redis实现分布式会话
Redis实现分布式会话 1 什么是分布式会话 1 这是我么之前学过的注册登录模式 2 如果非常多的人访问,因为单台服务器的访问承受能力是有限的,那么我们就想用多态服务器来承担压力 3 一般通过负载均衡的方式来实现,来分担服务器的压力。 4 负…...

AntDesignBlazor示例——暗黑模式
本示例是AntDesign Blazor的入门示例,在学习的同时分享出来,以供新手参考。 示例代码仓库:https://gitee.com/known/BlazorDemo 1. 学习目标 暗黑模式切换查找组件样式覆写组件样式 2. 添加暗黑模式切换组件 1)双击打开MainL…...

高通平台开发系列讲解(USB篇)adb function代码分析
文章目录 一、FFS相关动态打印二、代码入口三、ffs_alloc_inst四、ep0、ep1&ep2的注册五、读写过程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文主要介绍高通平台USB adb function代码f_fs.c。 一、FFS相关动态打印 目录:msm-4.14/drivers/usb/gadget/fun…...

SQL基础知识3
一、删除数据 1、delete操作 删除之前一定要查询一下,确保删除的数据是对的 逻辑删除:在表中新增一个字段:flag/status 二、更新数据 本质上的逻辑删除 三、查询数据 1、联表查询 1、内连接 交集的部分叫内连接 小知识:一般…...

GBASE南大通用数据库如何检索单行
SELECT 语句返回的行集是它的活动集。单个 SELECT 语句返回单个行。您可使用嵌入式 SELECT 语句来从数据库将单个行检索到主变量内。然而,当 SELECT 语句返回多行数 据时,程序必须使用游标来一次检索一行。在 检索多行 中讨论“多行”选择操作。 要检索单…...

【数据结构与算法】单链表(无头单向非循环)
文章目录 1. 概念2. 链表分类3. 链表与顺序表对比4. 无头单向非循环链表实现(C语言)4.1 SingleLinkedList.h4.2 Test.c4.3 SingleLinkedList.c 1. 概念 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指…...

C#PDF转Excel
組件 Spire.Pdf.dll, v7.8.9.0 【注意:版本太低的没有此功能】 在Visual Studio中找到参考,鼠标右键点击“引用”,“添加引用”,将本地路径debug文件夹下的dll文件添加引用至程序。 界面图: 1个label,1…...

vivado xsim 终端 模拟
只模拟的话直接终端运行会快很多 计数器举例 mkdir srccounter.v module counter(input wire clk,input wire rst_n,output reg[31:0] cnt ); always (posedge clk or negedge rst_n)if(!rst_n)cnt < 31h0;elsecnt < cnt1;endmodule tb.v module tb; wire[31:0] out…...

Java并查集设计以及路径压缩实现
Java全能学习面试指南:https://javaxiaobear.cn 并查集是一种树型的数据结构 ,并查集可以高效地进行如下操作: 查询元素p和元素q是否属于同一组合并元素p和元素q所在的组 1、并查集的结构 并查集也是一种树型结构,但这棵树跟我们之…...

【leetcode】力扣算法之删除链表中倒数第n个节点【中等难度】
删除链表中倒数第n个节点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 用例 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5] 输入:head [1], n 1 输出:[] 输入:head …...
C51--摇头测距小车
摇头测距小车——舵机和超声波封装 #include "reg52.h"#include "HC04.h" #include "Delay.h" #include "sg90.h" #include "motor.h"#define MIDDLE 0 #define LEFT 1 #define RIGHT 2void main() {char dir;double di…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...

基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...