重新构建嵌套列表
这一节使用 Slivers 而不是 ListViews 重建相同的 UI。
前奏在这里
https://blog.51cto.com/jianguo/4653002
使用 Slivers 的列表列表下面的代码构建了与之前相同的 UI,但这次它使用Slivers
而不是收缩包装ListView
对象。本页的其余部分将引导您逐步完成更改。
如何将嵌套列表迁移到 Slivers
第1步
首先,将最外面的 ListView 更改为SliverList
.
// Before
Widget build(BuildContext context) {
return ListView.builder(
itemCount: numberOfLists,
itemBuilder: (context, index) => innerLists[index],
);
}
变成:
// After
Widget build(BuildContext context) {
return CustomScrollView(slivers: innerLists);
}
第2步
其次,将内部列表的类型从List
更改为 List
。
// Before
List innerLists = [];
变成:
// After
List innerLists = [];
第 3 步
现在是时候重建内部列表了。的SliverList
类是比原始略有不同ListView
的类,与主要差异是的外观delegate
。原始版本
ListView
对所有内容都使用对象,不知道内部构建器构造函数将被shrinkWrap
.
// Before
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
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 {
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);
_ShrinkWrapSliversState createState() => _ShrinkWrapSliversState();
}
class _ShrinkWrapSliversState extends State {
List innerLists = [];
final numLists = 15;
final numberOfItemsPerList = 100;
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,
),
),
);
}
}
Widget build(BuildContext context) {
return CustomScrollView(slivers: innerLists);
}
}
class ColorRow extends StatefulWidget {
const ColorRow({Key? key}) : super(key: key);
State createState() => ColorRowState();
}
class ColorRowState extends State {
Color? color;
void initState() {
super.
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/124254.html
相关文章
-
flutter 中的列表的性能优化前奏#yyds干货盘点#
摘要:只有内部列表需要设置。中的列表的性能优化前奏干货盘点而且你滑动的快的时候列表会抖动重新构建嵌套列表要了解如何使您的用户免受卡顿威胁,请等待我的第二节,下一节将使用而不是重建相同的。 这里是坚果前端小课堂,大家喜欢的话,可以关注我的公众号坚果前端,,或者加我好友,获取更多精彩内容嵌套列表 - ShrinkWrap 与 Sli...
-
Flutter 中轮播图详解[Flutter专题31]#yyds干货盘点#
在 Flutter 中创建图像轮播 从社交媒体应用程序到电子商务应用程序,大多数现代应用程序都有某种图像轮播来展示产品、图像或广告。 由于 flutter 提供的内置小部件,从头开始实现图像轮播并不像您想象的那么难。 在本文中,您将学习如何从头开始创建图像轮播并根据需要进行自定义。最后,您将学习如何使用carousel_slider插件以更少的代码创建图像轮播。 这些是我...
-
Flutter — 加快开发速度的 IDE 快捷操作#yyds干货盘点#
摘要:夏天加快开发速度的快捷操作干货盘点快捷方式你可以用做更多神奇的事情选项返回这是您在中加快开发速度的魔杖。加快开发速度的快捷操作干货盘点选项卡不喜欢小部件用魔术棒取下它。 Flutter — 加快开发速度的 IDE 快捷方式上一个关于vscode 的插件推荐大家看的过瘾不,今天继续给大家带来一些关于android s...
-
#yyds干货盘点#Flutter 如何禁止手机横屏[Flutter专题32]
摘要:最后如果不起作用,可以分别做如下设置干货盘点如何禁止手机横屏专题横屏安卓如下所示干货盘点如何禁止手机横屏专题另外上有个插件可以去试一下,我在这儿就不做解释了。 这里是坚果前端小课堂,欢迎关注公众号坚果前端,问题引出 群友发来问题: Flutter 怎么禁止横屏显示呀,网上说的几个方法 都没有效 ...
-
【Flutter 专题】15 图解 ListView 异步加载数据与等待 #yyds干货盘点#
摘要:小菜前两天再学时,整理了一下在列表中展示多种不同样式,今天继续深入学习异步请求数据并加载新闻列表以及初始进入页面的等小知识点。小菜刚接触时间不长,还有很多不清楚和不理解的地方,如果又不对的地方还希望多多指出。 小菜前两天再学 ListView 时,整理了一下在列表中展示多种不同 item 样式,今天继续深入学习...
发表评论
0条评论
番茄西红柿
男|高级讲师
TA的文章
阅读更多tensor
阅读 713·2023-04-25 19:43
Windows 下安装 XGBoost
阅读 3907·2021-11-30 14:52
Hadoop 2.6.0 启动问题 lib/native/libhadoop.so which mi
阅读 3784·2021-11-30 14:52
VmShell:黑五美国VPS,免费先开通测试,满意后付款!支持tiktok美区
阅读 3851·2021-11-29 11:00
百度智能云:云产品特惠福利,1核2G轻量应用服务器仅48元/年
阅读 3782·2021-11-29 11:00
Linux系统和宝塔面板如何启用禁ping功能?
阅读 3868·2021-11-29 11:00
301重定向怎么做?301重定向设置方法有几种
阅读 3556·2021-11-29 11:00
wordpress网站重定向次数过多的解决方法
阅读 6103·2021-11-29 11:00