body: _buildTabBarView(), ), ), ); } headerSliverBuilder 头部实现函数 // 头部 Widget _buildHeader(BuildContext context, bool innerBoxIsScrolled) { return // SliverOverlapAbsorber 的作用是处理重叠滚动效果, // 防止 CustomScrollView 中的滚动视图与其他视图重叠。 SliverOverlapAbsorber( handle: N...
NestedScrollView 在逻辑上将可滚动组件分为了 header 和 body 两部分,header 部分我们可以认为是外部可滚动组件(outer scroll view),可以认为这个可滚动组件就是 CustomScrollView ,所以它只能接收 Sliver,我们通过headerSliverBuilder来构建一个 Sliver 列表给外部的可滚动组件;而 body 部分可以接收任意的可滚动组件,该...
我们可以通过设置 scrollDirection 参数来控制视图的滚动方向。 我们通过下面的代码实现一个水平滚动的内容: class MyHomeBody extends StatelessWidget { @override Widget build(BuildContext context) { return ListView( scrollDirection: Axis.horizontal, itemExtent: 200, children: <Widget>[ Container(color: Colors...
NestedScrollView和CustomScrollView都是支持自定义滚动视图的 Widget。它们的区别在于,CustomScrollView可以通过添加多个Sliver来实现复杂的滚动视图效果,而NestedScrollView则是将多个滚动视图嵌套在一起,并提供了一些方便的接口来协调它们之间的滚动。因此,NestedScrollView的使用场景更加适合于多个可滚动区域之间需要协调滚动...
比如之前讲Hero的时候提到的下面这个界面,使用普通的GridView的话是没法实现的,我们选择使用CustomScrollView,然后在slivers属性中添加子控件,在这个例子里,我们可以用SliverToBoxAdapter来做HeaderView,GridView来做主体布局,整体为一个CustomScrollView,完全不会出现任何滑动冲突的问题。
原因是:CustomScrollView 组合 Sliver 的原理是为所有子 Sliver 提供一个共享的 Scrollable,然后统一处理指定滑动方向的滑动事件,如果 Sliver 中引入了其他的 Scrollable,则滑动事件便会冲突。上例中 PageView 之所以能正常工作,是因为 PageView 的 Scrollable 只处理水平方向的滑动,而 CustomScrollView 是处理垂直方向的...
Flutter中常用的滑动布局 ScrollView 有 SingleChildScrollView、NestedScrollView、CustomScrollView。 SingleChildScrollView 用来处理简单可滑动的页面布局视图,如一般的数据详情页面,当内容足够多时,一屏显示不下时,就需要滑动处理。 NestedScrollView 滑动组件是用来处理复杂情况下的滑动应用场景,如向上滑动视图时,要折叠隐...
NestedScrollView( scrollDirection: Axis.horizontal, reverse: true, ...)scrollDirection滚动方向,分为垂直和水平方向。reverse参数表示反转滚动方向,并不是由垂直转为水平,而是垂直方向滚动时,默认向下滚动,reverse设置false,滚动方向改为向上,同理水平滚动改为水平向左。controller为滚动控制器,可以监听滚...
CustomScrollView是Flutter中的一个可定制的滚动视图控件,它允许开发者自定义滚动行为和外观。通过使用CustomScrollView,开发者可以创建具有多种滚动效果的界面,例如列表、网格、瀑布流等。 滚动控制器是CustomScrollView的一个重要属性,它用于控制滚动视图的滚动行为。通过滚动控制器,开发者可以监听滚动事件、控制滚动位置...
NestedScrollView 可以在其内部嵌套其他滚动视图的组件,其滚动位置是固有链接的。 在普通的ScrollView中, 如果有一个Sliver组件容纳了一个TabBarView,它沿相反的方向滚动(例如,允许用户在标签所代表的页面之间水平滑动,而列表则垂直滚动),则该TabBarView内部的任何列表都不会相互作用 与外部ScrollView。例如,浏览内部列表...