栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Flutter tabsView和NestedScrollView滚动问题

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Flutter tabsView和NestedScrollView滚动问题

3天后,我发现这是解决此问题的最佳方法,但仍需要更多改进,因为sliver标头扩展和收缩太快,您可以改进代码,并与我们分享

import 'package:flutter/material.dart';void main() => runApp(MaterialApp(  home: MyApp(),));class MyApp extends StatefulWidget {  MyAppState createState() => MyAppState();}class MyAppState extends State<MyApp> with SingleTickerProviderStateMixin {  TabController tabController;  Widget _tabBarView;  var scrollController = ScrollController();  @override  void initState() {    super.initState();    tabController = TabController(      length: 2,      vsync: this,    );    _tabBarView = TabBarView(children: [      DemoTab(parentController : scrollController),      DemoTab(parentController : scrollController),    ]);  }  @override  Widget build(BuildContext context) {    return Scaffold(      body: NestedScrollView(          controller: scrollController,          physics: ScrollPhysics(parent: PageScrollPhysics()),          headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { return <Widget>[   SliverList(     delegate: SliverChildListDelegate(         [Container(height: 300, color: Colors.blue)]),   ), ];          },          body: DefaultTabController( length: 2, child: Column(   children: <Widget>[     Container(       child: TabBar(labelColor: Colors.grey, tabs: [         Tab(text: 'One',         ),         Tab(text: 'two',         )       ]),     ),     Expanded(       child: Container(child: _tabBarView),     ),   ], ),          )),    );  }}class DemoTab extends StatefulWidget {  DemoTab({     this.parentController  });  final ScrollController parentController;  DemoTabState createState() => DemoTabState();}class DemoTabState extends State<DemoTab>    with AutomaticKeepAliveClientMixin<DemoTab> {  @override  // TODO: implement wantKeepAlive  bool get wantKeepAlive => true;  ScrollController _scrollController;  ScrollPhysics ph;  @override  void initState() {    super.initState();    _scrollController = ScrollController();    _scrollController.addListener((){      var innerPos      = _scrollController.position.pixels;      var maxOuterPos   = widget.parentController.position.maxScrollExtent;      var currentOutPos = widget.parentController.position.pixels;      if(innerPos >= 0 && currentOutPos < maxOuterPos) {        //print("parent pos " + currentOutPos.toString() + "max parent pos " + maxOuterPos.toString());        widget.parentController.position.jumpTo(innerPos+currentOutPos);      }else{        var currenParentPos = innerPos + currentOutPos;        widget.parentController.position.jumpTo(currenParentPos);      }    });    widget.parentController.addListener((){      var currentOutPos = widget.parentController.position.pixels;      if(currentOutPos <= 0) {        _scrollController.position.jumpTo(0);      }    });  }  @override  Widget build(BuildContext context) {    return ListView.builder(      key: UniqueKey(),      controller: _scrollController,      itemBuilder: (b, i) {        return Container(          height: 50,          color: Colors.green,          margin: EdgeInsets.only(bottom: 3),          child: Text( i.toString(),          ),        );      },      itemCount: 30,    );  }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/427746.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号