自定义窗口小部件的回调中没有上下文

时间:2019-05-17 02:38:26

标签: design-patterns flutter callback

我是Flutter的新手,所以有经验的人可能比我容易回答。与其说是代码问题,不如说是设计方面的问题。

有时候,我想编写可重用的小部件并使它们具有某种通用性,我希望有用于用户输入的回调,以便父小部件可以订阅然后采取适当的操作,而不是硬编码路由等。但是我直接运行例如,如果我想从回调中导航,就会遇到麻烦,因为我没有上下文。那么如何在Flutter中设计它呢?

2 个答案:

答案 0 :(得分:1)

无状态小部件中始终可以有一个可选/必需的上下文参数。对于有状态的小部件,上下文通常是可用的,但是如果出于某种原因需要父上下文,则可以始终将其传递给小部件。看下面的例子

class GenericWidgetFoo extends StatelessWidget {
  final BuildContext context;
  final Key key;
  final String name;

  const GenericWidgetFoo(
      {this.key, @required this.context, @required this.name});

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Center(
          child: Text(
        this.name,
        style: TextStyle(
          color: Theme.of(context).primaryColorLight,
        ),
      )),
    );
  }
}

答案 1 :(得分:0)

正如psink所说,我只是错过了扩展State类实际上可以访问上下文的事实:

属性

context→BuildContext 此小部件在树中的位置。 [...] 只读

相关问题