SliverChildDelegate是一个抽象类,它有两个实现类,分别是SliverChildBuilderDelegate和SliverChildListDelegate。...其中SliverChildBuilderDelegate是用的builder模式来生成子widget,在上一篇文章中,我们构建SliverList就是使用的这个builder类。...SliverChildBuilderDelegate使用builder来生成子Widget,而SliverChildListDelegate需要传入一个childList来完成构造,也就是说SliverChildListDelegate...crossAxisSpacing: 50.0, childAspectRatio: 4.0, ), delegate: SliverChildBuilderDelegate...运行得到的界面如下: 然后为其添加SliverList: SliverList( delegate: SliverChildBuilderDelegate(
Widget _bodyWid() { return CustomScrollView(slivers: [ SliverList( delegate: SliverChildBuilderDelegate...const EdgeInsets.all(8.0), sliver: _typeGridWid()), SliverList( delegate: SliverChildBuilderDelegate...mainAxisSpacing: 8.0, crossAxisSpacing: 8.0, childAspectRatio: 4.0), delegate: SliverChildBuilderDelegate...Widget _typeListWid() { return SliverFixedExtentList( itemExtent: 50.0, delegate: SliverChildBuilderDelegate
可以看出ListView.builder 中的入参 addAutomaticKeepAlives 是 传给 SliverChildBuilderDelegate 的。...---->[SliverChildBuilderDelegate]---- /// Whether to wrap each child in an [AutomaticKeepAlive]. ///.../// Defaults to true. final bool addAutomaticKeepAlives; 复制代码 可以看出,SliverChildBuilderDelegate#build...GridView,和 ListView 一样,内部使用 SliverChildBuilderDelegate ?...---- PageView 也使用了 SliverChildBuilderDelegate ,所以也具有相关特性。
childrenDelegate = SliverChildBuilderDelegate( itemBuilder, // ListView.builder() 中的itemBuilder函数透传...// 代码省略 ) 而SliverChildListDelegate与SliverChildBuilderDelegate都是继承自SliverChildDelegate,经过仔细阅读代码,发现具体的细节就在父类...下面是SliverChildListDelegate与SliverChildBuilderDelegate两个类对build的实现。...对可滑动组件懒加载的原理进行简单归纳后,可总结如下: SliverChildListDelegate中children是在创建视图是传入的一组明确的Widget,在展示前这组Widget便已存在;而SliverChildBuilderDelegate...通过以上的分析可知,若CustomScrollView中的Sliver用到了SliverChildBuilderDelegate,则此CustomScrollView也会包含懒加载的特性。
reverse: true, center: centerKey, slivers: [ SliverList( delegate: SliverChildBuilderDelegate...EdgeInsets.zero, key: centerKey, ), SliverList( delegate: SliverChildBuilderDelegate...CustomScrollView( controller: scroller, center: centerKey, slivers: [ SliverList( delegate: SliverChildBuilderDelegate...SliverPadding( padding: EdgeInsets.zero, key: centerKey, ), SliverList( delegate: SliverChildBuilderDelegate
TextStyle(color: Colors.white,fontSize: 20),), ); }).toList(),), SliverList( delegate: SliverChildBuilderDelegate...TextStyle(color: Colors.white,fontSize: 20),), ); }).toList(),), SliverList( delegate: SliverChildBuilderDelegate
slivers: [ SliverAppBar( ... ), SliverList( delegate: SliverChildBuilderDelegate...childCount: 10, ), ), ], );在SliverAppBar之外,我们还提供了一个SliverList,这里使用了SliverChildBuilderDelegate
slivers: [ SliverAppBar( ... ), SliverList( delegate: SliverChildBuilderDelegate...childCount: 10, ), ), ], ); 在SliverAppBar之外,我们还提供了一个SliverList,这里使用了SliverChildBuilderDelegate
SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4), delegate: SliverChildBuilderDelegate...Colors.primaries.length]); }, childCount: 40), ), SliverList( delegate: SliverChildBuilderDelegate..., childrenDelegate = SliverChildBuilderDelegate( itemBuilder, childCount: itemCount...并且 slivers 中,如果存在多个列表的话也是支持动态加载的,而不是会一次性全部渲染完 各式各样的 Slivers 组件 SliverList 在上面的例子中 SliverList 使用的是 SliverChildBuilderDelegate...member.where((element) => element.team == teamName).toList(); return SliverGrid( delegate: SliverChildBuilderDelegate
必须的参数就是 childrenDelegate , 然后传入一个 实现了 SliverChildDelegate 的组件,如 SliverChildListDelegate 和 SliverChildBuilderDelegate...SliverChildListDelegate 接收跟 ListView 一样的 children ,而 SliverChildBuilderDelegate 接收跟 ListView.builder
ListView.builder使用的是builder模式来构建child组件,具体而言他的childrenDelegate实现如下:childrenDelegate = SliverChildBuilderDelegate...addRepaintBoundaries, addSemanticIndexes: addSemanticIndexes, ),这里的childrenDelegate是一个SliverChildBuilderDelegate...下面是childrenDelegate的具体实现: childrenDelegate = SliverChildBuilderDelegate( (BuildContext context
并且在程序的页面上也同样无法正常显示: 相关的代码如下: SliverFixedExtentList( delegate: SliverChildBuilderDelegate((
const NeverScrollableScrollPhysics(), ), ); } } 更改后,ListView对象被替换为SliverList对象,每个对象都使用一个SliverChildBuilderDelegate..._innerList.add(const ColorRow()); } innerLists.add( SliverList( delegate: SliverChildBuilderDelegate...innerList.add(const ColorRow()); } innerLists.add( SliverList( delegate: SliverChildBuilderDelegate
StatelessWidget { @override Widget build(BuildContext context) { return SliverList( delegate: SliverChildBuilderDelegate
), ), ), SliverFixedExtentList( delegate: SliverChildBuilderDelegate
), new SliverFixedExtentList( itemExtent: 50.0, delegate: new SliverChildBuilderDelegate...itemExtent: 50.0, //item高度或宽度,取决于滑动方向 delegate: SliverChildBuilderDelegate
ListView.custom( // 指定 item 的高度,可以加快渲染的速度 itemExtent: 40.0, // item 代理 childrenDelegate: SliverChildBuilderDelegate...这种生成方式,比 GridView 多了一个 childrenDelegate,childrenDelegate 主要分为两种,一种是通过 IndexedWidgetBuilder 来构建 item 的 SliverChildBuilderDelegate...: 1.0), // item 通过 delegate 来生成,内部实现还是 `IndexedWidgetBuilder` childrenDelegate: SliverChildBuilderDelegate...SliverGrid 有提供 `count`, `entent` 方法便于快速生成 SliverGrid SliverGrid( delegate: SliverChildBuilderDelegate...SliverFixedExtentList 实现同 List.custom 实现类似 SliverFixedExtentList( delegate: SliverChildBuilderDelegate
reverse: true, center: centerKey, slivers: [ SliverList( delegate: SliverChildBuilderDelegate...EdgeInsets.zero, key: centerKey, ), SliverList( delegate: SliverChildBuilderDelegate
childAspectRatio: 1.4, ), ///子条目的构建模式 childrenDelegate: ///懒加载的模式 SliverChildBuilderDelegate
领取专属 10元无门槛券
手把手带您无忧上云