Flutter 中,ListView 中需要放置 ListView 需要怎么处理才高效?

问题及场景

ListView 是 Flutter 开发者第一个学习到的 Widget,因为它可以滑动。一切都会运行得很好,直到 ListView 中的 Item 本身也是一个 ListView。你可能会看到 Flutter 建议你将内部的 ListView 的ShrinkWrap 属性设置为 True。虽然错误消除了,但是威胁还在。因为 ShrinkWrap 属性会将 ListView 一次性全部填充,算出所有高度,如果内部 ListView 的数据量比较大,那将产生性能问题,会有很大的风险掉帧、jank 和 stutters。

假设你遇到下面这样的场景

dart 复制代码
final outerListChildren = <ListView>[
	ListView(children: <Wdiget>[...]),
	...
];

return ListView.Builder(
	itemCount: outerListChildren.length,
	itemBuilder: (context, index) {
		return outerListChildren[index]
	}
)

然后我们按照 Flutter 的提示,将内部的 ListView 加上 shrinkWrap 和 physics 属性如下

dart 复制代码
final outerListChildren = <ListView>[
	ListView(
		shrinkWrap: true,
		physics: const NeverScrollableScrollPhysics(),
		children: <Wdiget>[...]
	),
	...
];

return ListView.Builder(
	itemCount: outerListChildren.length,
	itemBuilder: (context, index) {
		return outerListChildren[index]
	}
)

解决方法:

1、首先,将最外层的 ListView 改为 CustomScrollView

dart 复制代码
return CustomScrollView(
		children: outerListChildren
	}
)

2、然后我们将外部的 ListView 列表改为 SliverList 列表

dart 复制代码
final outerListChildren = <SliverList>[];
return CustomScrollView(
		children: outerListChildren
	}
)

3、所有 SliverList 添加 delegate,并使用 SliverChildBuilderDelegate 作为 value,_myWidgets 是之前的 inner ListView 需要显示的内容

dart 复制代码
final outerListChildren = <SliverList>[
	SliverList(
		delegate: SliverChildBuilderDelegate(
			childCount: _myWidgets.length,
			(context, index) => _myWidgets[index]
		)
	)
];
return CustomScrollView(
		children: outerListChildren
	}
)

至此,大功告成

相关推荐
程序视点30 分钟前
Escrcpy 3.0投屏控制软件使用教程:无线/有线连接+虚拟显示功能详解
前端·后端
silent_missile35 分钟前
element-plus穿梭框transfer的调整
前端·javascript·vue.js
专注VB编程开发20年41 分钟前
OpenXml、NPOI、EPPlus、Spire.Office组件对EXCEL ole对象附件的支持
前端·.net·excel·spire.office·npoi·openxml·spire.excel
古蓬莱掌管玉米的神43 分钟前
coze娱乐ai换脸
前端
GIS之路1 小时前
GeoTools 开发合集(全)
前端
咖啡の猫1 小时前
Shell脚本-嵌套循环应用案例
前端·chrome
一点一木1 小时前
使用现代 <img> 元素实现完美图片效果(2025 深度实战版)
前端·css·html
萌萌哒草头将军2 小时前
🚀🚀🚀 告别复制粘贴,这个高效的 Vite 插件让我摸鱼🐟时间更充足了!
前端·vite·trae
布列瑟农的星空2 小时前
大话设计模式——关注点分离原则下的事件处理
前端·后端·架构
yvvvy2 小时前
前端必懂的 Cache 缓存机制详解
前端