这是合法的优化。实际上,您甚至可以对与状态相关的小部件(与结合使用
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(), );}
这样,您可以获得缓存小部件实例的好处。但是您不要松开热装。
完美吧?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)