在initState或类构造函数中定义小部件,而不是在构建?

在initState或类构造函数中定义小部件,而不是在构建?,第1张

在initState或类构造函数中定义小部件,而不是在构建?

这是合法的优化。实际上,您甚至可以对与状态相关的小部件(与结合使用

didUpdateWidget
)执行相同的 *** 作。胜利是微不足道的。

小部件非常轻巧,Dart已针对许多微实例进行了优化。

这种方法有一个问题:您松开热装。


重用旧的窗口小部件实例仍然非常有用。仿佛小部件实例不变,Flutter中止了子树的构建。

这在动画中经常使用,而 不是
每帧都重建整个窗口小部件树。一个典型的例子是

AnimatedBuilder
(但全部
XXTransition
遵循相同的逻辑)

Animation animation;AnimatedBuilder(  animation: animation,  child: Text('Foo'),  builder: (context, child) {    return Align(      alignment: Alignment(.5, animation.value),      child: child,    );  },);

在这里,这会自愿重用

child
实例,以免
Text
再次调用build方法。


那么,我应该这样做吗?

好,是的,不是。优化您的应用程序总是很酷的。但是除了使用变量之外,还有一种更好的方法:const构造函数。

要重用您的示例,您可以将“总是相同的”小部件树提取到带有const构造函数的自定义小部件中:

class _Foo extends StatelessWidget {  const _Foo({Key key}): super(key: key);  @override  Widget build(BuildContext context) {    return Text(      'Oeschinen Lake Campground',      style: TextStyle(        fontWeight: FontWeight.bold,      ),    );  }}

然后在您的

build
方法中以这种方式使用它:

@overrideWidget build(BuildContext context) {  return Container(    padding: const EdgeInsets.only(bottom: 8.0),    child: const _Foo(),  );}

这样,您可以获得缓存小部件实例的好处。但是您不要松开热装。

完美吧?



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5175608.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-19
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存