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

Flutter 解决NestedScrollView与TabBar双列表滚动位置同步问题


文章目录

  • 前言
  • 一、需要实现的效果如下
  • 二、flutter实现代码如下:
  • 总结


前言

最近写flutter项目,遇到NestedScrollView与TabBar双列表滚动位置同步问题,下面是解决方案,希望帮助到大家。


一、需要实现的效果如下

1、UI图:
请添加图片描述
需要实现的效果是,左边滑动的时候,右边的列表不要随左边滑动。右边滑动的时候,左边也不要滑动。

二、flutter实现代码如下:

1、用flutter原生的NestedScrollView是有问题的
2、使用第三方库解决这个问题extended_nested_scroll_view: ^6.2.1
3、完整的代码如下:

import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart';
import 'package:flutter/material.dart';void main() {runApp(const MyBitApp());
}class MyBitApp extends StatelessWidget {const MyBitApp({super.key});// This widget is the root of your application.Widget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),useMaterial3: true,),home: MyApp(),);}
}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(title: 'NestedScrollView Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: MyHomePage(),);}
}class MyHomePage extends StatefulWidget {_MyHomePageState createState() => _MyHomePageState();
}class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {late TabController _tabController;late List<ScrollController> _scrollControllers;late ScrollController nestedScrollController;void initState() {super.initState();_tabController = TabController(length: 2, vsync: this);_scrollControllers = [ScrollController(),ScrollController(),];nestedScrollController = ScrollController();}void dispose() {_tabController.dispose();for (var controller in _scrollControllers) {controller.dispose();}super.dispose();}Widget build(BuildContext context) {// var tabBarHeight = primaryTabBar.preferredSize.height;double statusBarHeight = MediaQuery.of(context).padding.top;var pinnedHeaderHeight = statusBarHeight + kToolbarHeight;return Scaffold(body: DefaultTabController(length: 2,child: ExtendedNestedScrollView(onlyOneScrollInBody: true,pinnedHeaderSliverHeightBuilder: () => pinnedHeaderHeight,headerSliverBuilder: (context, innerBoxIsScrolled) {return [SliverAppBar(title: Text('NestedScrollView Demo'),pinned: true,floating: true,expandedHeight: 200,stretch: true,elevation: 0,stretchTriggerOffset: 100,bottom: TabBar(controller: _tabController,tabs: [Tab(text: 'Tab 1'),Tab(text: 'Tab 2'),],),),];},body: TabBarView(controller: _tabController,children: [KeepAliveWrapper(child: MediaQuery.removePadding(removeTop: true,context: context,child: ListView.builder(itemCount: 1000,itemBuilder: (context, index) {return ListTile(title: Text('Tab 1 Item $index'),);},),),),KeepAliveWrapper(child: MediaQuery.removePadding(removeTop: true,context: context,child: ListView.builder(itemCount: 1000,itemBuilder: (context, index) {return ListTile(title: Text('Tab 2 Item $index'),);},),),),],),),),);}
}class KeepAliveWrapper extends StatefulWidget {final Widget child;const KeepAliveWrapper({Key? key, required this.child}) : super(key: key);_KeepAliveWrapperState createState() => _KeepAliveWrapperState();
}class _KeepAliveWrapperState extends State<KeepAliveWrapper> with AutomaticKeepAliveClientMixin {Widget build(BuildContext context) {super.build(context);return widget.child;}bool get wantKeepAlive => true;
}

总结

这就是Flutter解决NestedScrollView与TabBar双列表滚动位置同步问题相关代码,希望能帮助到你!

http://www.lryc.cn/news/333202.html

相关文章:

  • 云计算存在的安全隐患
  • 黑翅鸢优化算法(BKA)-2024年SCI一区新算法-公式原理详解与性能测评 Matlab代码免费获取
  • sqlmap(四)案例
  • 【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加
  • 【25考研】:四川大学计算机学院24届874考研考情分析
  • 【GPT-4 Turbo】、功能融合:OpenAI 首个开发者大会回顾
  • java-Stream原理及相关操作详解(filter、map、flatMap、peek、reduce、anyMatch等等)
  • 基于Springboot中小企业设备管理系统设计与实现(论文+源码)_kaic
  • ORACLE 12 C估算 用户历史上的CPU消耗
  • Zookeeper 简明使用教程
  • JS 利用 webcam访问摄像头 上传到服务器
  • 【微信小程序】【小程序样式加载不出来】
  • 【THM】Exploit Vulnerabilities(利用漏洞)-
  • Tomcat管理配置
  • C++模版简单认识与使用
  • 图解大型网站多级缓存的分层架构
  • 基于Vision Transformer的迁移学习在乳腺X光图像分类中的应用
  • WebGIS 地铁交通线网数据可视化监控平台
  • 批量导入svg文件作为图标使用(vue3)vite-plugin-svg-icons插件的具体应用
  • X服务器远程连接问题解决:Bad displayname ““‘或Missing X server or $DISPLAY
  • matlab:五点中心差分求解Navier边界的Biharmonic方程(具有纳维尔边界的双调和方程)
  • 详细介绍微信小程序app.js
  • 【六 (2)机器学习-EDA探索性数据分析模板】
  • Java集合——Map、Set和List总结
  • Python TensorFlow 2.6 获取 MNIST 数据
  • EChart简单入门
  • 阿里云8核32G云服务器租用优惠价格表,包括腾讯云和京东云
  • 设计模式,工厂方法模式
  • WPF中嵌入3D模型通用结构
  • 举个例子说明联邦学习