重新构建嵌套列表

这一节使用 Slivers 而不是 ListViews 重建相同的 UI。

前奏在这里

​https://blog.51cto.com/jianguo/4653002​

使用 Slivers 的列表列表

下面的代码构建了与之前相同的 UI,但这次它使用​​Slivers​​ 而不是收缩包装​​ListView​​对象。本页的其余部分将引导您逐步完成更改。

如何将嵌套列表迁移到 Slivers

flutter

第1步

首先,将最外面的 ListView 更改为​​SliverList​​.

// Before

@override

Widget build(BuildContext context) {

return ListView.builder(

itemCount: numberOfLists,

itemBuilder: (context, index) => innerLists[index],

);

}

变成:

// After

@override

Widget build(BuildContext context) {

return CustomScrollView(slivers: innerLists);

}

第2步

其次,将内部列表的类型从​​List​​更改为 ​​List​​。

// Before

List innerLists = [];

变成:

// After

List innerLists = [];

第 3 步

现在是时候重建内部列表了。的​​SliverList​​类是比原始略有不同​​ListView​​的类,与主要差异是的外观​​delegate​​。原始版本​


​ListView​​对所有内容都使用对象,不知道内部构建器构造函数将被​​shrinkWrap​​.

// Before

@override

void initState() {

super.initState();

for (int i = 0; i < numberOfLists; i++) {

final _innerList = [];

for (int j = 0; j < numberOfItemsPerList; j++) {

_innerList.add(const ColorRow());

}

innerLists.add(

ListView.builder(

itemCount: numberOfItemsPerList,

itemBuilder: (BuildContext context, int index) => _innerList[index],

shrinkWrap: true,

physics: const NeverScrollableScrollPhysics(),

),

);

}

}

更改后,​​ListView​​对象被替换为​​SliverList​​对象,每个对象都使用一个​​SliverChildBuilderDelegate​​来提供高效的按需构建。

// After

@override

void initState() {

super.initState();

for (int i = 0; i < numLists; i++) {

final _innerList = [];

for (int j = 0; j < numberOfItemsPerList; j++) {

_innerList.add(const ColorRow());

}

innerLists.add(

SliverList(

delegate: SliverChildBuilderDelegate(

(BuildContext context, int index) => _innerList[index],

childCount: numberOfItemsPerList,

),

),

);

}

}

完整代码:

import package:flutter/material.dart;

import dart:math as math;



void main() {

runApp(SliversApp());

}



class SliversApp extends StatelessWidget {

@override

Widget build(BuildContext context) {

return MaterialApp(

debugShowCheckedModeBanner: false,

title: ShrinkWrap vs Slivers,

home: Scaffold(

appBar: AppBar(

title: const Text("Revenge of the Slivers"),

),

body: const ShrinkWrapSlivers(),

),

);

}

}



class ShrinkWrapSlivers extends StatefulWidget {

const ShrinkWrapSlivers({

Key? key,

}) : super(key: key);



@override

_ShrinkWrapSliversState createState() => _ShrinkWrapSliversState();

}



class _ShrinkWrapSliversState extends State {

List innerLists = [];

final numLists = 15;

final numberOfItemsPerList = 100;



@override

void initState() {

super.initState();

for (int i = 0; i < numLists; i++) {

final _innerList = [];

for (int j = 0; j < numberOfItemsPerList; j++) {

_innerList.add(const ColorRow());

}

innerLists.add(

SliverList(

delegate: SliverChildBuilderDelegate(

(BuildContext context, int index) => _innerList[index],

childCount: numberOfItemsPerList,

),

),

);

}

}



@override

Widget build(BuildContext context) {

return CustomScrollView(slivers: innerLists);

}

}



@immutable

class ColorRow extends StatefulWidget {

const ColorRow({Key? key}) : super(key: key);



@override

State createState() => ColorRowState();

}



class ColorRowState extends State {

Color? color;



@override

void initState() {

super.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/124254.html

相关文章

  • flutter 列表性能优化前奏#yyds干货盘点#

    摘要:只有内部列表需要设置。中的列表的性能优化前奏干货盘点而且你滑动的快的时候列表会抖动重新构建嵌套列表要了解如何使您的用户免受卡顿威胁,请等待我的第二节,下一节将使用而不是重建相同的。 这里是坚果前端小课堂,大家喜欢的话,可以关注我的公众号坚果前端,,或者加我好友,获取更多精彩内容嵌套列表 - ShrinkWrap 与 Sli...

    番茄西红柿 评论0 收藏2637
  • Flutter 中轮播图详解[Flutter专题31]#yyds干货盘点#

    在 Flutter 中创建图像轮播 从社交媒体应用程序到电子商务应用程序,大多数现代应用程序都有某种图像轮播来展示产品、图像或广告。 由于 flutter 提供的内置小部件,从头开始实现图像轮播并不像您想象的那么难。 在本文中,您将学习如何从头开始创建图像轮播并根据需要进行自定义。最后,您将学习如何使用carousel_slider插件以更少的代码创建图像轮播。 这些是我...

    番茄西红柿 评论0 收藏2637
  • Flutter — 加快开发速度 IDE 快捷操作#yyds干货盘点#

    摘要:夏天加快开发速度的快捷操作干货盘点快捷方式你可以用做更多神奇的事情选项返回这是您在中加快开发速度的魔杖。加快开发速度的快捷操作干货盘点选项卡不喜欢小部件用魔术棒取下它。 Flutter — 加快开发速度的 IDE 快捷方式上一个关于​​vscode 的插件​​推荐大家看的过瘾不,今天继续给大家带来一些关于android s...

    番茄西红柿 评论0 收藏2637
  • #yyds干货盘点#Flutter 如何禁止手机横屏[Flutter专题32]

    摘要:最后如果不起作用,可以分别做如下设置干货盘点如何禁止手机横屏专题横屏安卓如下所示干货盘点如何禁止手机横屏专题另外上有个插件可以去试一下,我在这儿就不做解释了。 这里是坚果前端小课堂,欢迎关注公众号坚果前端,问题引出 群友发来问题: Flutter 怎么禁止横屏显示呀,网上说的几个方法 都没有效 ...

    番茄西红柿 评论0 收藏2637
  • Flutter 专题】15 图解 ListView 异步加载数据与等待 #yyds干货盘点#

    摘要:小菜前两天再学时,整理了一下在列表中展示多种不同样式,今天继续深入学习异步请求数据并加载新闻列表以及初始进入页面的等小知识点。小菜刚接触时间不长,还有很多不清楚和不理解的地方,如果又不对的地方还希望多多指出。 小菜前两天再学 ListView 时,整理了一下在列表中展示多种不同 item 样式,今天继续深入学习...

    番茄西红柿 评论0 收藏2637

发表评论

0条评论

最新活动