在Stateless Widget中使用构建方法以外的上下文

3

我希望在实现小部件时达到多个目标:

  1. 使用无状态小部件
  2. 使用主题对小部件进行样式设置
  3. 避免在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专家们,你们会如何建议解决这个问题?


这只适用于有状态的小部件,对于无状态的小部件来说不相关吗? - undefined
1
你确实是正确的,抱歉! - undefined
1个回答

1
我通过从父部件发送样式来处理它。
class SomeWidget extends StatelessWidget {
  final ButtonStyle buttonStyle;

  SomeWidget({super.key, required this.buttonStyle})

  @override
  Widget build(BuildContext context) {
    return Container(
        child: ElevatedButton(
            style: buttonStyle,
            onPressed: () => ({}),
            child: Text("test")));
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接