通过参数不可用时获取BuildContext

时间:2018-09-05 04:09:40

标签: dart flutter

Navigator.push是否有不需要上下文的替代方法?这是我的问题。

我有一个非常嵌套且很深的调用栈,并不是每个函数都有一个BuildContext参数。除了将当前的BuildContext从一个函数传递给另一个函数,还有其他方法吗?

test1.dart

Widget build(BuildContext) {
...
new GestureDetector(
    onTap: () => foo1() // very deep callstack until it calls foo30
...
}

test2.dart

void foo30() {
    // need context here like:
    BuildContext context = IHopeThatExists.getCurrentContext();

    // why do I need that? Navigator.push needs a context or is there an alternative? FYI: I don't need to go back to the previous page though
    Navigator.push(context, ..)
}

2 个答案:

答案 0 :(得分:1)

如果调用堆栈那么深,则可能需要考虑重构= D。除此之外,如果您使用StatefulWidget,它具有context属性,该属性与传递给构建函数的属性相同。

还有,仅供参考-State.build docs

  

BuildContext参数始终与context属性相同   此State对象的值,并且在此生存期内将保持不变   宾语。此处提供了BuildContext自变量,因此   此方法与WidgetBuilder的签名匹配。

答案 1 :(得分:0)

您可以使用Builder小部件:

return Builder(
  builder: (context) {
    return RaisedButton(
      onPressed: () {
        Navigator.of(context).push(...);
      },
      ...
    );
  },
);