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

这篇具有很好参考价值的文章主要介绍了Flutter 中,ListView 中需要放置 ListView 需要怎么处理才高效?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题及场景

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

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

final outerListChildren = <ListView>[
	ListView(children: <Wdiget>[...]),
	...
];

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

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

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

return CustomScrollView(
		children: outerListChildren
	}
)

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

final outerListChildren = <SliverList>[];
return CustomScrollView(
		children: outerListChildren
	}
)

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

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

至此,大功告成文章来源地址https://www.toymoban.com/news/detail-644476.html

到了这里,关于Flutter 中,ListView 中需要放置 ListView 需要怎么处理才高效?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flutter组件-ListView滑动到指定位置(SingleChildScrollView 实现锚点效果)

    ListView 组件默认内容比较多的时候具有延迟加载的特性。  SingleChildScrollView 不支持基于 Sliver 的延迟实例化模型,也就是使用 SingleChildScrollView  默认没有延迟加载的特性。  SingleChildScrollView 类似于 Android 中的 ScrollView,它只能接收一个子组件,由于默认没  有延迟加载

    2024年02月11日
    浏览(35)
  • 即刻体验 | 使用 Flutter 3.19 更高效地开发

    我们已隆重推出全新的 Flutter 版本——Flutter 3.19。此版本引入了专为 Gemini 设计的新 Dart SDK、一个能让开发者对 Widget 动画实现精细化控制的全新 Widget,Impeller 更新带来的渲染性能提升、有助于实现深层链接的工具和对 Windows Arm64 的支持,以及更多丰富功能! Flutter 社区持续

    2024年04月26日
    浏览(44)
  • 【Flutter】Flutter 中处理 loading 状态

    今天我们将一起探讨在 Flutter 中如何控制 loading 状态。 Flutter,作为一个高效、简洁的 UI 框架,已经在全球范围内得到了广泛的应用。处理 loading 状态,这是一个看似简单,实则对用户体验有着巨大影响的话题。合理地展示 loading 状态,可以让我们的应用看起来更加流畅,同

    2024年02月09日
    浏览(32)
  • vscode配置flutter开发环境,不需要安装第三方安卓模拟器

    点击下方的安装包,获取 stable 发行通道的 Flutter SDK 最新版本:Flutter SDK 将压缩包解压,然后把其中的 flutter 目录整个放在你想放置 Flutter SDK 的路径中**(注意不要出现中文目录)** 配置Windows系统的环境变量,在 用户变量 一栏中,在Path中添加 flutterbin 目录的完整路径。例

    2024年02月10日
    浏览(62)
  • flutter问题处理小记

    同样一个Flutter程序,在公司电脑可以正常编译,在随身的笔记本和家里的电脑编译一直有问题,因为赶项目,周末不得不往返一个多小时到公司加班,昨天加班效率不错,今天抽出时间,好好整理一下处理思路 笔记本是双系统,Windows和Mac下编译时一直报一个错误,在Window

    2024年01月25日
    浏览(67)
  • Flutter页面滑动回调处理解决方法

    TabBarView 是 Flutter 中的一个用于显示选项卡视图的小部件。它通常与 TabBar 一起使用,用于实现选项卡式导航,允许用户在不同的选项卡之间切换内容。 以下是 TabBarView 的详细介绍: 基本用法: TabBarView 允许你在不同的选项卡之间切换内容。它接受一个 controller 属性,用于控

    2024年02月08日
    浏览(38)
  • Flutter知识点(二)处理Json

    flutter不支持反射,所以本来很简单的事情,一下子变复杂了。当然官方也提供了一些工具来方便开发者。 由于Dart的map和array的数据结构和json一样,所以在flutter中,变成了json string与Map,array之间的砖换。 那么如何在实体类和json之间转换呢? 这时就要用到工具了。在pubspec

    2024年02月11日
    浏览(37)
  • flutter 解压 zip 中文乱码问题处理

    很简单的一个 zip 包解压缩的功能,但是 windows 平台中文显示乱码,很糟心,搜了一圈没找到现成的方法,在此贴上我的解决方式。 导入需要的包 代码如下: 昨天刚接触的 flutter ,若是代码有问题还望指出,非常感谢!

    2024年02月13日
    浏览(50)
  • Flutter开发:Error的捕获及处理

    ​ 在上一篇文章《Flutter混合开发:Android中如何启动Flutter》中我们学习了如果在Android项目中使用Flutter,在使用过程中经常会遇到各种错误,那么如何处理这些错误? Flutter 框架可以捕获运行期间的错误,包括构建期间、布局期间和绘制期间。 关于Flutter错误的处理包含三个

    2023年04月08日
    浏览(27)
  • Flutter之国际化(多语言处理)

    项目内最近加入国际化内容,那么我们需要转化对应语言内容,来展示UI App国际化开发主要包括: 文本国际化 Widget显示的国际化 某些文本在对应语言环境下应该显示为所选择语言内容; 目前我项目内使用的是: Flutter Intl 插件: 1.安装 Flutter Intl 插件 在Android studio内直接搜

    2024年02月14日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包