是否有最佳方法可以在哪里创建小部件的一般经验法则(假设小部件不依赖传递给build()的任何东西)?

如果我们在类内创建一个Widget:

Foo({Key key}) : super(key: key);
Widget _widget = new Container(); // Create here?

创建类后,我们只会创建一次。 但是,如果未始终在build()中使用此窗口小部件,则它可能会占用空间(例如,后台窗口小部件,或者该窗口小部件的可见性由标志确定)。

如果我们在build()中创建小部件:

@override
Widget build(BuildContext context) {
Widget widget = new Container(); // Or create here?
  return widget;
}

在每次build()调用时都会重新创建该小部件,这感觉很昂贵,尤其是如果小部件没有变化。

#1楼 票数:5 已采纳

在Flutter / Dart中,构造短期对象通常非常便宜,并且小部件层负责确保除非重新构建小部件,否则在重建时不会修改渲染树。 因此,在正常情况下,缓存小部件没有太大帮助。 我倾向于在您的build()方法中构造小部件,除非有原因不能解决。

#2楼 票数:0

通常无需关心这种优化。 但是,请尽可能使用const构造函数。

但是请记住,您应该将模型直接用作小部件。 您不应该具有将模型类的实例作为输入的Widget。 相反,应该是您的模型类具有构建方法。 结果,当以您的状态存储数据时,您不必在每次调用Build时都重新创建新的小部件。

一个很好的例子是flutter的代码实验室中的ChatMessage列表。 https://codelabs.developers.google.com/codelabs/flutter/index.html#5

  ask by Mary translate from so

未解决问题?本站智能推荐:

1回复

dart:在循环函数中创建的对象会被缓存还是重新创建?

在诸如CustomPaint()的paint()类的重复函数中,如果我以这种方式创建对象:void paint(Canvas canvas, Size size) { .... var myObj = MyClass(); var myObj.configure(canvas, s
2回复

Dart上空函数的性能

假设我有这段代码: 根据这个问题 ,dart将删除生产构建中的assert 但是被调用的test()函数怎么样? 将在构建时删除此功能吗? 如果我多次调用空函数,这会对性能产生重大影响吗?
1回复

如何在颤振中优化变量长度小部件的X文本显示

我有这个包含Container的小部件列表,其中包含Title和A Body文本,其长度是可变的。 例如,我可以有两个单词的文本和30个中的一个,所以行数可以变化。 我尝试用ListView.builder显示它们但是当我显示它们时,性能下降到20帧/秒,我在现实世界中测试它并且性能保持不变
2回复

在flutter中有什么方法可以进行webview缓存优化吗?

我使用 flutter_inappwebview 将网站提取到 flutter 应用程序中。 我想在 webview 启动期间将所有资源(如 JS 和 CSS 文件内容)从网站保存到缓存中,然后当我调用同一个网站时,资源将拦截并将缓存的文件注入到 webview 中。 这可能吗.. 如果可能,那么如
2回复

Flutter有没有必要优化页面量大的浏览量?

我的应用程序中有一个包含大量页面的PageView 。 每个页面都非常复杂,有一个PageView和它自己的页面。 我是 Flutter 的新手,我的第一个预感是它需要优化。 因此,在最外层PageView的build()函数中,我检查索引,只为当前页面、上一页和下一页制作整页(我猜滑动动画需要当前
2回复

在Dart中,staticconst和final是否相等?

我最近遇到了这个问题。 以下Dart语句是否相同或有什么不同: 根据我的理解,无论生成多少StaticConstVsFinal实例, static const变量都不会分配内存,内存使用量不会增加,因为这些是类变量,但对于final变量,它会增加内存使用量。 ---> 如果我错了,请纠正我。
1回复

Dart2中的最佳渲染循环是什么?

我正在寻找有关2d游戏(如果那部分很重要)的Dart 2内部渲染循环的最佳/最小结构的想法。 澄清/解释:每种框架/语言都有一种有效的方式来:1)处理时间。 2)渲染到屏幕上(通过内存,画布,图像或其他方式)。 例如, 有人用C#语言回答了这个问题 。 作为Flutter / Dar
1回复

如何查找2个列表中的项目是否匹配(但不能使用直接相等)

我在这里有这个代码,看看两个列表中的项目是否相同: (我之前检查过 2 个列表长度是否相等)。 有没有办法重写它,这样我就没有 O(n2) 复杂度?