Flutter组件————PageView
PageView
可以创建滑动页面效果的widget,它允许用户通过水平或垂直滑动手势在多个子页面(child widgets)之间切换。每个子页面通常占据屏幕的全部空间。
参数
| 参数名 | 类型 | 描述 |
|---|---|---|
children | List<Widget> | 包含在 PageView 中的所有子部件(页面)。仅适用于页面数量较少的情况。 |
scrollDirection | Axis | 定义滚动的方向,默认为水平方向 (Axis.horizontal),也可以设置为垂直方向 (Axis.vertical)。 |
reverse | bool | 如果设置为 true,则滚动方向将被反转。例如,默认情况下是从左到右滚动,如果此值为 true,则会从右到左滚动。 |
controller | PageController? | 用于控制 PageView 的页面控制器,允许编程方式改变当前显示的页面或监听页面变化。 |
physics | ScrollPhysics? | 滚动物理特性,定义了用户与 PageView 交互时的行为,比如是否允许拖拽、弹回等。 |
pageSnapping | bool | 如果设置为 true,页面会在用户停止滚动后“吸附”到最接近的页面边界;否则,页面可以在任意位置停止。 |
onPageChanged | ValueChanged<int>? | 当页面切换时调用的回调函数,参数为新的页面索引。 |
restorationId | String? | 用于保存和恢复 PageView 状态的标识符,有助于应用在重启后恢复到之前的状态。 |
dragStartBehavior | DragStartBehavior | 定义了拖动手势开始的方式。默认值是 DragStartBehavior.start。 |
clipBehavior | Clip | 定义子部件超出 PageView 边界时的行为,如剪裁、不剪裁等。 |
allowImplicitScrolling | bool | 是否允许隐式滚动。当 true 时,某些手势(如双击空格键在文本字段中)可能会触发滚动。 |
PageController
PageController 是 Flutter 中用于控制 PageView 的一个类,它允许开发者编程式地管理页面的滚动行为。
PageController 是 Flutter 中用于控制 PageView 的一个类,它允许开发者编程式地管理页面的滚动行为。通过 PageController,你可以设置初始页面、跳转到特定页面、监听页面变化等。以下是关于 PageController 的一些重要属性和方法介绍:
构造函数
PageController({int initialPage = 0, double viewportFraction = 1.0}):initialPage: 设置PageView初始显示的页面索引,默认为0。viewportFraction: 每个页面占据视口的比例,默认值为1.0,即每个页面占据整个屏幕宽度或高度。
属性
hasClients: 返回一个布尔值,表示是否有任何PageView使用此控制器。position: 获取与该控制器关联的ScrollPosition对象,可以用来获取当前滚动位置的信息。
方法
-
animateTo(double offset, {Duration duration, Curve curve}):- 动画滚动到指定的偏移量(以像素为单位)。需要提供滚动动画的持续时间和曲线类型。
-
jumpTo(double offset):- 立即滚动到指定的偏移量(以像素为单位),没有动画效果。
-
animateToPage(int page, {Duration duration, Curve curve}):- 动画滚动到指定的页面索引。同样需要提供滚动动画的持续时间和曲线类型。
-
jumpToPage(int page):- 立即滚动到指定的页面索引,没有动画效果。
-
nextPage({Duration duration, Curve curve}):- 动画滚动到下一页。需要提供滚动动画的持续时间和曲线类型。
-
previousPage({Duration duration, Curve curve}):- 动画滚动到上一页。同样需要提供滚动动画的持续时间和曲线类型。
-
dispose():- 释放控制器资源,当不再需要控制器时应该调用此方法,避免内存泄漏。
physics
physics 是一个非常重要的属性,它定义了滚动视图(如 ListView, GridView, PageView 等)的滚动行为。
在 Flutter 中,physics 是一个非常重要的属性,它定义了滚动视图(如 ListView, GridView, PageView 等)的滚动行为。通过设置不同的 ScrollPhysics 子类,你可以改变用户与滚动视图交互时的行为特性。以下是几种常用的 ScrollPhysics 实现及其功能:
常用的 ScrollPhysics 实现
-
ClampingScrollPhysics- 这是 Android 平台默认的滚动物理效果。当滚动超出范围时,内容不会继续滚动,并且没有反弹效果。
-
RangeMaintainingScrollPhysics- 适用于 iOS 平台,默认情况下,当滚动超出范围时,内容会回弹并返回到范围内。它继承自
ClampingScrollPhysics并添加了额外的功能来保持滚动位置。
- 适用于 iOS 平台,默认情况下,当滚动超出范围时,内容会回弹并返回到范围内。它继承自
-
AlwaysScrollableScrollPhysics- 使得滚动视图总是可以滚动,即使其内容不足以填满整个视图。这对于实现类似于拖拽刷新的效果很有用。
-
NeverScrollableScrollPhysics- 完全禁用了滚动行为,即使内容超出了视图的边界,也无法通过手势进行滚动。
-
BouncingScrollPhysics- 类似于 iOS 的滚动行为,当滚动超出范围时,内容会有一个反弹效果然后回到范围内。
-
FixedExtentScrollPhysics- 用于
ListWheelScrollView或其他固定高度或宽度项的滚动视图,提供了一种特殊的滚动感觉,每个项目占据相同的屏幕空间。
- 用于
-
PageScrollPhysics- 专门为
PageView设计,提供了页面级别的滚动和吸附效果,确保每次滚动都会停留在一个完整的页面上。
- 专门为
-
CustomScrollPhysics- 如果内置的物理效果无法满足需求,开发者可以通过继承
ScrollPhysics来创建自定义的滚动物理效果。
- 如果内置的物理效果无法满足需求,开发者可以通过继承
示例代码
class CompentPage extends StatefulWidget {const CompentPage({super.key});_CompentPageState createState() => _CompentPageState();
}
final PageController pageController = PageController(initialPage: 0);
List<Widget> pageList = const [Row(children: [Text("1"), Text("2"), Text("3"), Text("4"), Text("5")],),Row(children: [Text("6"), Text("7"), Text("8"), Text("9"), Text("10")],),Row(children: [Text("11"), Text("12"), Text("13"), Text("14"), Text("15")],),Row(children: [Text("16"), Text("17"), Text("18"), Text("19"), Text("20")],)
];class _CompentPageState extends State<CompentPage> {Widget build(BuildContext context) {return ListView(children: [const Text("PageView",style: TextStyle(fontSize: 20, color: Colors.blue),),SizedBox(height: 200,child: PageView(scrollDirection: Axis.horizontal, // 滚动方向,reverse: false, // 是否反向滚动controller: pageController, // 页面控制器physics: const PageScrollPhysics(), // 滚动物理pageSnapping: true, // 用户停止滚动后“吸附”到最接近的页面边界allowImplicitScrolling: true, // 允许隐式滚动onPageChanged: (index) => {debugPrint("当前页面索引:$index")}, // 页面切换事件children: pageList, // 页面列表),),ElevatedButton(onPressed: (){pageController.animateToPage(3, duration: const Duration(microseconds: 400), curve: Curves.easeInOut);}, child: const Text("跳转到第三"))],);}
}
效果

点击按钮后

相关文章:
Flutter组件————PageView
PageView 可以创建滑动页面效果的widget,它允许用户通过水平或垂直滑动手势在多个子页面(child widgets)之间切换。每个子页面通常占据屏幕的全部空间。 参数 参数名类型描述childrenList<Widget>包含在 PageView 中的所有子部件&am…...
c#自定义事件
自定义事件类 定义一个自定义事件参数类 为了传递更多的信息,我们定义一个自定义的事件参数类 public class CustomEventArgs : EventArgs {public string Message { get; set; } } 3. 定义一个发布者类 接下来,我们定义一个发布者类,包含…...
【读书笔记】《论语别裁》寂寞的享受
1.内容摘要 在《论语别裁》中,第一章《学而》探讨了做学问的孤独与坚持。作者强调,真正的学者在追求知识时,必须保持“仁”与“义”的核心价值观,愿意为自己的信念与理想而牺牲。他以孔子为例,描绘了孔子一生的寂寞与…...
Oracle筑基篇-调度算法-LRU的引入
常见的调度算法 图1 调度算法思维导图 一、LRU算法的典型使用场景 1. 操作系统中的页面置换 什么时候用到页面置换算法呢? 当CPU发出指令需要访问某个地址时,若该地址在TLB(Translation Lookaside Buffer,快表)或页…...
单元测试-Unittest框架实践
文章目录 1.Unittest简介1.1 自动化测试用例编写步骤1.2 相关概念1.3 用例编写规则1.4 断言方法 2.示例2.1 业务代码2.2 编写测试用例2.3 生成报告2.3.1 方法12.3.2 方法2 1.Unittest简介 Unittest是Python自带的单元测试框架,适用于:单元测试、Web自动…...
linux驱动:6ull(3)自动分配设备号来创建led驱动
在 linux驱动:6ull(2)的文章代码上进行更改 步骤: 创建入口函数和出口函数定义一个设备结构体和创建一个led设备在入口函数init中添加初始化led的gpio在入口函数init中添加自动分配设备号来创建led字符设备在出口函数中取消led的…...
GM_T 0039《密码模块安全检测要求》题目
单项选择题 根据GM/T 0039《密码模块安全检测要求》,送检单位的密码模块应包括()密码主管角色。 A.一个 B.两个 C.至少一个 D.至少两个 正确答案:C 多项选择题 根据GM/T 0039《密码模块安全检测要求》,关于非入侵式安全,以下属于安全三级密码模块要求的是()。 …...
第四届电气工程与控制科学
重要信息 官网:www.ic2ecs.com 时间:2024年12月27-29日 简介 第四届电气工程与控制科学定于2024年12月27-29日在中国南京召开。主要围绕“电气工程“、”控制科学“、”机械工程“、”自动化”等主题展开,旨在为从电…...
LabVIEW在电液比例控制与伺服控制中的应用
LabVIEW作为一种图形化编程环境,广泛应用于各类控制系统中,包括电液比例控制和伺服控制领域。在这些高精度、高动态要求的控制系统中,LabVIEW的优势尤为突出。以下从多个角度探讨其应用与优势: 1. 灵活的控制架构 LabVIEW为电…...
植物大战僵尸杂交版v3.0.2最新版本(附下载链接)
B站游戏作者潜艇伟伟迷于12月21日更新了植物大战僵尸杂交版3.0.2版本!!!,有b站账户的记得要给作者三连关注一下呀! 不多废话下载链接放上: 夸克网盘链接::https://pan.quark.cn/s/5c…...
车辆重识别代码笔记12.19
1、resnet_ibn_a和resnet网络的区别 ResNet-IBN-A 是在 ResNet 基础上进行了一些改进的变种,具体来说,它引入了 Instance Batch Normalization (IBN) 的概念,这在某些任务中(如图像识别、迁移学习等)有显著的性能提升。…...
linux内核网络分层概述
在开发应用时,我们使用 socket 实现网络数据的收发。以tcp为例,server端通过 socket, bind, listen来创建服务端,然后通过 accept接收客户端连接;客户端通过 socket和 connect系统调用来创建客户端。用于数据收发的系统调用包括 s…...
H3C交换机配置 telnet 服务
使用一个交换机做成 telnet 服务, telnet 可以使用指定端口开启三层交换机, 用于与 pc 互通, 也可以使用自带的 vlan1 设置 ip 然后达到互通, 因为华三的交换机端口默认是 access 口, 默认带 vlan1 , 直接设置 vlan1 的 ip 也就可以实现互通 实现互通 互通的两种方式 设置 vl…...
江苏计算机专转本 技能Mysql知识点总结(二)
三、SQL数据操纵语言(增删改查) 1.insert 语句(增) INSERT INTO 表名 (列1, 列2, 列3) VALUES (值1, 值2, 值3); 2.Delete 语句(删) //1. DELETE FROM 表名 WHERE 条件;//2. truncate table 表名; …...
边缘智能网关助力打造建筑智慧消防物联网
随着经济社会的快速发展,为了满足民众生产、生活、消费需求,高层建筑、大型综合连体建筑持续兴建,各类火灾风险和事故也越发增加。得益于物联网的普及应用,消防监测和管理迎来数字化、智慧化转型升级。 针对各类高层、大型建筑消防…...
学习Cookie 提升
目录 Cookie 的覆盖 Cookie下的path 特点 设置Cookie 路径 实例 Cookie的最大存活时间 设置Cookie 存活时间 实例 Cookie 和session的区别 和联系 Cookie 的覆盖 当 key相同 和只要path的上级目录的路径相同,就可以被替换掉 value 值 如下图…...
OpenAI 发布会 9 天技术总结
OPEN AI 发布会总结 OpenAI 发布会 12 天技术总结Day 1: 开幕与愿景主要内容:体验方式: Day 2: GPT-4 及其突破性进展主要内容:体验方式: Day 3: GPT-4 在编程领域的突破 - Codex & Copilot主要内容:体验方式&…...
免费注册.news域名一年(今日有效)
时间紧迫,就不上图了,需要的尽快。 网址:https://www.namecheap.com/ 优惠码:FREEDOM24...
解决JIRA、Confluence用户自动注销、反复登录的问题
一、问题描述:当工作从从confluence里面打开jira的时候,在回到confluence时候,就自动退出了,需要账号密码登录重复登录,使人十分厌恶。 二、原因分析: 访问 JIRA、Confluence 或任何其他具有相同域或 IP 上…...
Oracle创建逻辑目录
Oracle 在执行逻辑备份及还原时,需要用到逻辑目录。 本文就来简单介绍一下逻辑目录相关的操作,希望对大家有所帮助。 1.登录到Oracle数据库 使用具有足够权限的数据库用户登录到Oracle数据库。通常,这需要是管理员账号,如SYS…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
