我希望在实现小部件时达到多个目标:
- 使用无状态小部件
- 使用主题对小部件进行样式设置
- 避免在build方法内调用另一个方法 - 出于性能考虑(即避免在每次构建时初始化相同的方法)
以这个小部件为例:
class SomeWidget extends StatelessWidget {
ButtonStyle _getStyle(context) {
return ElevatedButton.styleFrom(primary: Theme.of(context).primaryColor);
}
@override
Widget build(BuildContext context) {
return Container(
child: ElevatedButton(
style: _getStyle(context),
onPressed: () => ({}),
child: Text("test")));
}
}
函数_getStyle将在每次构建调用时初始化,虽然它看起来不太复杂,只是一个小方法 - 但我认为这是一种不好的做法。
但是,我无法获得构建方法之外的上下文(我仍然想使用全局ThemeData)
如果有一些Flutter机制可以防止_getStyle方法在小部件生命周期内运行多次,那么这也可以成为一种解决方案。(例如:类似于Vue.js中的观察者模式)
Flutter专家们,你们会如何建议解决这个问题?