通过参数不可用时获取 BuildContext

Dan*_*ens 5 dart flutter

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

我有一个非常嵌套和深入的调用堆栈,并不是每个函数都有一个 BuildContext 参数。除了将当前 BuildContext 从一个函数传递到另一个函数之外,还有其他方法可以获取当前 BuildContext 吗?

test1.dart

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

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, ..)
}
Run Code Online (Sandbox Code Playgroud)

bof*_*mer 7

您可以使用该Builder小部件:

return Builder(
  builder: (context) {
    return RaisedButton(
      onPressed: () {
        Navigator.of(context).push(...);
      },
      ...
    );
  },
);
Run Code Online (Sandbox Code Playgroud)


rmt*_*zie 2

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

仅供参考 - 来自State.build文档

BuildContext 参数始终与此 State 对象的上下文属性相同,并且在此对象的生命周期内保持不变。此处多余地提供了 BuildContext 参数,以便此方法与 WidgetBuilder 的签名匹配。