第二百三十回

文章目录

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

我们在前面章回中介绍了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变量),然后在PageView的
onPageChanged()方法中通过setState()方法修改索引值,最后通过指示器的参数传递给指示器。这部分内容对应的代码被注释起来了,大家可以打开注释后再编译
程序,从程序运行效果中可以看到这种方法也可以实现指示器联动效果。
看官们,关于"如何给PageView添加指示器"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

集合,排序查找算法,可变参数

文章目录 集合Set集合TreeSet集合 Map集合概述特点子类及其底层数据结构常用方法遍历 数据结构常见的数据结构二叉树 可变参数介绍格式注意 Collections工具类方法 排序查找算法冒泡排序介绍原理注意代码 选择排序介绍原理规律代码 二分查找前提介绍原理注意代码 集合 Set集合 …

flink: 将接收到的tcp文本流写入HBase

一、依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.o…

AcWing刷题-空调

空调 差分&#xff1a; N int(input()) p list(map(int, input().split())) t list(map(int, input().split())) d,s[0]*100010,[0]*100010 for i in range(N):d[i] p[i]-t[i]for i in range(N):s[i] d[i]s[i1] - d[i] ans 0 for i in range(N1):if s[i]>0:ans s[i]…

常见的Nginx+Redis+MQ+DB架构设计

三高&#xff0c;复杂的架构 SQRS CAP 缓存&#xff0c;限流 【Redis&#xff0c;缓存】 cache-aside 缓存cache&#xff1a;数据源的副本 store 1. Read/Write Through Pattern 读写穿透模式 redis&#xff1a;放当前在线用户&#xff0c;热点数据

三个对象组练习.java

题目&#xff1a;定义数组存储3部汽车对象&#xff1b;汽车属性&#xff1a;品牌&#xff0c;价格&#xff0c;颜色&#xff1b;创造3个汽车对象&#xff0c;数据通过键盘录入而来&#xff0c;并把数据存储到数组当中 分析&#xff1a; 在main&#xff08;&#xff09;里面定义…

java分割回文串(力扣Leetcode131)

分割回文串 力扣原题链接 问题描述 给定一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是回文串。返回 s 所有可能的分割方案。 示例 示例 1: 输入&#xff1a;s “aab” 输出&#xff1a;[[“a”,“a”,“b”],[“aa”,“b”]] 示例 2: 输…

简易挛生分拣系统设计

1 工效组合展示 2 方案规划设计 3 数字挛生建模 基础建模、动画设计、模型导出 4 软件体系架构 5 Web交互设计 5.1 页面架构 5.2 初始构造 5.3 模型运用 5.4 WS通信 5.5 运行展现 6 服务支撑编码 6.1 整体调度 6.2 WS服务 6.3 C/S通信 7 系统级调试完善

Chrome 插件各模块使用 Fetch 进行接口请求

Chrome 插件各模块使用 Fetch 进行接口请求 常规网页可以使用 fetch() 或 XMLHttpRequest API 从远程服务器发送和接收数据&#xff0c;但受到同源政策的限制。 内容脚本会代表已注入内容脚本的网页源发起请求&#xff0c;因此内容脚本也受同源政策的约束&#xff0c;插件的来…

鸿蒙开发第一节

一.开发准备-工具安装 1.鸿蒙开发官网&#xff1a;华为开发者联盟-智能终端能力开放,共建开发者生态 (huawei.com) 2.DevEco Studio3.1下载链接HUAWEI DevEco Studio和SDK下载和升级 | 华为开发者联盟 点击下载按钮进行下载2.1解压文件2.2双击运行此程序 2.3安装软件 点击N…

day22.二叉树part08

day22.二叉树part08 235.二叉搜索树的最近公共祖先 原题链接 代码随想录链接 思路&#xff1a;因为本题是二叉搜索树&#xff0c;利用它的特性可以从上往下进行递归遍历树&#xff0c;这里需要理解一点就是如果遍历到的一个节点发现该节点的值正好位于节点p和节点q的值中间…

记录C++中,vector的迭代器在push_back以后扩容导致迭代器失效的问题

前言 vector是我们用到最多的数据结构&#xff0c;其底层数据结构是单端动态数组&#xff0c;由于数组的特点&#xff0c;vector也具有以下特性&#xff1a; ①O(1)时间的快速访问&#xff1b; ②顺序存储&#xff0c;所以插入到非尾结点位置所需时间复杂度为O(n)&#xff0c;删…

ARMv8-A架构下的外部debug模型(external debug)简介

Armv8-A external debug Armv8-A debug模型一&#xff0c;外部调试 External debug 简介二&#xff0c;Debug state2.1 Debug state的进入与退出 三&#xff0c;DAP&#xff0c;Debug Access Port3.1 EDSCR, External Debug Status and Control Register调试状态标识&#xff0…