如何解决在 initState 完成之前不会出现第二个屏幕
我有 StatefulWidget,它 initState() 触发异步 onInit() 函数,该函数触发返回项目列表的顶级函数,然后 onInit 填充项目列表。 然后我有 Scaffold 哪个主体应该返回 CircularProgressIndicator 直到 items == null 然后是带有项目的 Column。
问题是我点击按钮导航到第二个屏幕需要 3-4 秒,直到屏幕出现,当它出现时,列表被填充。我很确定该功能在完成之前不会让屏幕出现,但我不知道为什么?
如果应该导航到第二个屏幕然后启动 initState 并显示加载指示器,直到 func 完成,为什么会出现这种行为?
有人可以帮我吗?
解决方法
你是在 iOS 上测试这个吗? 自从 Apple 弃用 OpenGL 以来,Flutter 就遇到了 Metal 引擎上的着色器缓存问题。
https://github.com/flutter/flutter/issues/32170
其次,您是否在使用 FutureBuilder? 接下来,对于所有需要从某个数据源加载信息并且必须让用户等待的操作,请确保使用 FutureBuilder 小部件。 https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html 始终使用未来的构建器以避免任何延迟,以及您可以异步的任何事情,请这样做。 下面是 Flutter 团队一些性能技巧的链接: https://flutter.dev/docs/perf/rendering/best-practices
我为您编写了一个小实现,以演示如何实现您正在寻找的内容。
async fn get<'a>() -> &'a str {
"foo"
}
,
在这种情况下,因为我在 initState() 上触发的函数进行了一些繁重的计算,而且因为 Dart 是单线程语言,而且因为 CPU 与 I/O 分离,它开始计算,直到函数完成它才构建小部件。
因此我选择使用 Isolate!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。