Flutter除ListView.builder(),build()内遍历列表构建组件的方法
字符串列表批量渲染为Text组件的替代实现
基于提供的示例代码,除了用ListView.builder()按索引懒加载构建列表项的常规实现外,以下几种写法可以达到完全一致的展示效果:
- 直接用静态构造的
ListView实现
不需要写基于索引的itemBuilder回调,直接对字符串列表做映射,把每个元素转成Text组件后传入ListView的children参数就行,核心代码:
滚动交互、视觉效果和原body: ListView( children: msg.map((m) => Text(m)).toList(), )ListView.builder的实现没有区别,代码更简洁,适合列表长度固定、数据量小的场景。 SingleChildScrollView套Column实现
把映射生成的所有Text组件按垂直顺序排在Column里,再给整个Column加一层滚动支持就能滚动浏览,核心代码:
这种写法会一次性渲染完全部列表项,没有懒加载能力,列表项多了会有明显的性能损耗,只适合少量固定数据的展示场景。body: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: msg.map((m) => Text(m)).toList(), ), )- 无滚动的静态
Column实现
如果确定所有列表项的总高度不会超出屏幕,根本不需要滚动能力,可以直接把映射生成的Text列表传给Column的children参数,省掉滚动容器:
注意这种写法如果内容高度超过屏幕会出现渲染溢出报错,需要额外加溢出处理逻辑,适合极短的固定文本展示。body: Column( crossAxisAlignment: CrossAxisAlignment.start, children: msg.map((m) => Text(m)).toList(), )
选型参考
- 原
ListView.builder是懒加载机制,只会构建当前屏幕可视范围内的列表项,是长列表、动态列表场景的默认首选- 上面列的替代方案都是全量一次性渲染,不适合几十项以上、频繁动态增删的长列表场景
内容的提问来源于stack exchange,提问作者Samuel T
相关产品推荐
相关产品推荐

