当前位置: 首页 > news >正文

Flutter_学习记录_实现商品详情页Tab点击跳转对应锚点的demo

背景

如下图,要实现点击“推荐”跳转到对应的位置的功能 需要用用SingleChildScrollView代替ListView
在这里插入图片描述

SingleChildScrollView 简介

ListView 组件默认内容比较多的时候具有延迟加载的特性。
SingleChildScrollView 不支持基于 Sliver 的延迟实例化模型,也就是使用 SingleChildScrollView 默认没有延迟加载的特性。
SingleChildScrollView 类似于 Android 中的 ScrollView,它只能接收一个子组件,由于默认没 有延迟加载的特性,所以可以刚开始就获取里面所有控件的位置,这样就可以很好的实现锚点效果。

SingleChildScrollView 锚点的实现流程

  1. 为每一个锚点创建对应的 GlobalKey
  2. 将需要锚点的所有代码使用 SingleChildScrollView 包裹,
  3. 控件关联对应的锚点key值
  4. 使用 ScrollableensureVisible 方法跳转至每个 key: Scrollable.ensureVisible(对应key.currentContext as BuildContext)

代码实现

  1. 在页面的controller上添加对应的key:
// tab点击跳转到对应的锚点:第一步GlobalKey gk1 = GlobalKey();GlobalKey gk2 = GlobalKey();GlobalKey gk3 = GlobalKey();
  1. 视图上用 SingleChildScrollView 和 控件关联对应的key值:
// 自定义内容视图Widget _bodyWidget() {// tab点击跳转到对应的锚点:第二步, 用SingleChildScrollView代替ListViewreturn SingleChildScrollView(controller: controller.scrollController,child: Column(children: [Container(// tab点击跳转到对应的锚点:第三步, 控件关联对应的keykey: controller.gk1,color: Colors.orange,alignment: Alignment.center,height: Screenadapter.height(1800),child: Text("商品", style: TextStyle(fontSize: 100)),),Container(// tab点击跳转到对应的锚点:第三步, 控件关联对应的keykey: controller.gk2,color: Colors.blue,alignment: Alignment.center,height: Screenadapter.height(2800),child: Text("详情", style: TextStyle(fontSize: 100)),),Container(// tab点击跳转到对应的锚点:第三步, 控件关联对应的keykey: controller.gk3,color: Colors.red,alignment: Alignment.center,height: Screenadapter.height(3800),child: Text("推荐", style: TextStyle(fontSize: 100)),),],),);}
  1. 点击事件实现跳转方法
			onTap: (){int index = value["id"];controller.updateTabsSelectIndex(index);// tab点击跳转到对应的锚点:第四步, 跳转实现if (index == 1) {Scrollable.ensureVisible(controller.gk1.currentContext as BuildContext,duration: Duration(milliseconds: 100));} else if (index == 2) {Scrollable.ensureVisible(controller.gk2.currentContext as BuildContext,duration: Duration(milliseconds: 100));} else {Scrollable.ensureVisible(controller.gk3.currentContext as BuildContext,duration: Duration(milliseconds: 100));}},
http://www.dtcms.com/a/393848.html

相关文章:

  • 【大语言模型】作为可微分搜索索引的Transformer记忆体
  • NLP---自然语言处理
  • 多条件查询中的日期交互指南:从前端到后端的顺畅协作
  • 系分论文《论人工智能在网络安全态势感知系统中的分析与设计》
  • 【Kubernetes】(六)Service
  • Coze源码分析-资源库-删除工作流-后端源码-核心技术与总结
  • vue Ai 流试回答实现打字效果
  • 【架构】面向对象六大设计原则
  • ✅ 基于OpenCV与HyperLPR的车牌识别系统 PyQt5可视化 支持多种输入 深度学习毕业设计
  • 深度学习在计算机视觉中的最新进展:范式转变与前沿探索
  • 本地免费使用网页表格控件websheet
  • Spring Boot集成MQTT与单片机通信
  • 【Axios 】web异步请求
  • FreeRTOS实战指南 — 6 临界段保护
  • 关于CFS队列pick_next_task_fair选取下一个任务的分析
  • 【算法笔记】链表相关的题目
  • Netty从0到1系列之Recycler对象池技术【3】
  • 网页开发入门:CSS与JS基础及BS/CS架构解析
  • css单位换算及适配
  • Java制作双脑同步 Hemi-Sync 音频
  • webrtc弱网-ProbeBitrateEstimator类源码分析与算法原理
  • 在OpenHarmony上适配图形显示【4】——rk3568_4.0r_mesa3d适配
  • 嵌入式(3)——RTC实时时钟
  • 内核模块组成和裁剪参考表
  • 140-understanding_the_armv8.x_and_armv9.x_extensions_guide
  • 【序列晋升】40 Spring Data R2DBC 轻量异步架构下的数据访问最佳实践
  • TGRS | 视觉语言模型 | 语言感知领域泛化实现高光谱跨场景分类, 代码开源!
  • Oracle / MySQL / MariaDB / SQL Server 常用连接与基础查询(Linux操作系统上)
  • 将 Jupyter Notebook 转换为 PDF
  • torchvision 编译安装 nano