第二十七回:如何给PageView添加指示器

news/2024/11/24 2:33:13/

文章目录

  • 概念介绍
  • 添加方法
  • 示例代码
  • 指示器联动

我们在前面章回中介绍了PageView这个Widget,本章回中将介绍 如何给PageView添加指示器.闲话休提,让我们一起Talk Flutter吧。

概念介绍

我们在这里说的指示器表示PageView底部的小圆圈,它用来指示当前哪个页面被选中。常用的场景是滑动页面时小圆圈高亮显示当前被选中的页面,其它小圆圈显示为暗色,表示其它页面没有被选中。本章回中将详细介绍如何给PageView添加这种小圆圈。

添加方法

  1. 指示器为小圆圈,使用Material的圆形实现,这里不理解不要紧,看代码就能明白;
  2. 创建n个指示器(这里的n是PageView中Page的数量),并且使用Row容器把它们排列中一行;
  3. 使用Column当作外层容器,第一行存放PageView,第二行存放排在一行的小圆圈,它们就是PageView的指示器;

示例代码

//创建小圆圈指示器:代码中的r表示小圆圈的半径,s表示小圆圈之间的间隔,它们的值通过参数传入Widget _Indicator(int index, int pageCount, double r, double s) {//通过pageController中的索引值来判断当前页面是否被选中bool isIndexPageSelected = (index ==(pageController.page != null ? pageController.page?.round() : 0));//通过参数传递的索引值来判断当前页面是否被选中// bool isIndexPageSelected = (index == currentIndex) ? true : false;//打印索引值,调试使用// print("page count ${pageController.page?.round()}");// print("current : ${currentIndex}");return Container(//宽度是圆的半径,宽度是半径+左右两边的间隔(space)height: r,width: r + 2 * s,child: Material(color: isIndexPageSelected ? Colors.greenAccent : Colors.grey,type: MaterialType.circle,child: Container(width: r,height: r,),),);}//把三个小圆圈组成一行Widget build(BuildContext context) {return Row(mainAxisAlignment: MainAxisAlignment.center,children: [_Indicator(0, 3, 20, 18),_Indicator(1, 3, 20, 18),_Indicator(2, 3, 20, 18),],);}
}
//使用Column当作外层容器,第一行存放PageView,第二行存放排在一行的小圆圈,它们就是PageView的指示器;
return Scaffold(appBar: AppBar(title: const Text("Example of PaveView"),backgroundColor: Colors.purpleAccent,),body: Column(mainAxisAlignment: MainAxisAlignment.spaceAround,children: [Container(width: double.infinity,height: 500,child: PageView(), //PageView详细的内容省略不写),Indicator(pageController: mPageController,count: 3,currentIndex: pageIndex,)],),
);

上面的代码中只列出了核心代码,完整的代码可以查看Github上ex015中的内容。编译并且运行上面的代码可以得到一个显示三个Page的页面,每个Page对应一个小圆圈指示器,滑动Page时小圆圈的颜色跟着变化。我在这里就不演示程序运行结果了,建议大家自己动手去实践。

指示器联动

代码中还有一部分内容大家可能看不明白,一个是pageController,另外一个是小圆圈的颜色设置。它们两结合起来可以让小圆圈与page联动,什么是联动?就是Page滑动到哪一页,与该页对应的小圆圈高亮显示,其它页的小圆圈显示为暗色,这样就可以通过小圆圈来指示出当前被选中的页面,这也是我们叫它指示器的原因。

联动的原理:通过pageController获取当前被选中页的索引值,把该值与参数中传入的索引值index进行比较,如果它们相同说明当前页被选中了,反之则说明当前页没有被选中。对于被选中的指示器,我们把它的颜色设置为高亮色,没有被选中的指示器,我们把它的颜色设置为暗色或者叫浅色。

该原理中核心的内容是获取当前被选中页的索引值,除了使用pageController外还有一种方法:在代码中定义一个变量用来存放被选中页的索引值(代码中为currentIndex变量),然后在PageViewonPageChanged()方法中通过setState()方法修改索引值,最后通过指示器的参数传递给指示器。这部分内容对应的代码被注释起来了,大家可以打开注释后再编译程序,从程序运行效果中可以看到这种方法也可以实现指示器联动效果。

看官们,关于"如何给PageView添加指示器"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!


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

相关文章

Spring Cloud: 云原生微服务实践

文章目录 1. Spring Cloud 简介2. Spring Cloud Eureka:服务注册与发现在Spring Cloud中使用Eureka 3. Spring Cloud Config:分布式配置中心在Spring Cloud中使用Config 4. Spring Cloud Hystrix:熔断器在Spring Cloud中使用Hystrix 5. Sprin…

Azkaban学习——单机版安装与部署

目录 1.解压改名 2.修改装有mysql的虚拟机的my.cnf文件 3.重启装有mysql的虚拟机 4.Datagrip创建azkaban数据库,执行脚本文件 5.修改/opt/soft/azkaban-exec/conf/azkaban.properties文件 6.修改commonprivate.properties 7.传入mysql-connector-java-8.0.29…

【Linux从入门到精通】进程的基本概念

我们通过对上篇文章冯诺依曼体系结构对硬件进行讲解后, 本篇文章会对进程进行深入讲解。同时会讲解PCB(进程控制块)。希望本篇文章内容会对你有所帮助。 文章目录 一、再次理解操作系统 1、1 操作系统的作用 1、2 操作系统的管理 二、进程基本…

等保简介、等保规定、流程和规范(非常重要)

等保简介 等保是指我国政府制定的“信息安全等级保护”体系。它是从国家层面出发,分别对各个应用系统进行细分,针对不同等级的信息系统给予不同的安全保护要求,按照要求进行相应的安全防御措施、运维和管理工作。 等保规定 等保规定是一套…

JVM系列-第9章-StringTable(字符串常量池)

StringTable(字符串常量池) String的基本特性 String:字符串,使用一对 “” 引起来表示 String s1 "atguigu" ; // 字面量的定义方式String s2 new String("hello"); // new 对象的方式String被…

单链表你别再找我了,我怕双向链表误会

目录 带头双向循环链表的创建和初始化 创建一个新的结点(方便复用) 链表判空 链表打印 链表尾插 链表尾删 链表头插 链表头删 任意插入 任意删除 链表查找 链表销毁 完整代码 😎前言 之前我们讲了结构最简单,实现起来…

C++实现并查集

1.并查集原理 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个 单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一 个元素归属于那个集合的运算。适合于描述这类…

[点云学习] 一、点云相关知识了解

1.何谓点云? 点云是一种表示三维空间中对象的数据结构,它由许多离散的点组成。每个点都有自己的位置坐标和可能的其他属性,如颜色、法向量和强度等。点云通常由激光扫描仪、相机或其他传感器捕获,用于创建三维模型、地图或进行遥感…