有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)
您可以使用该Builder
小部件:
return Builder(
builder: (context) {
return RaisedButton(
onPressed: () {
Navigator.of(context).push(...);
},
...
);
},
);
Run Code Online (Sandbox Code Playgroud)
如果您的调用堆栈那么深,您可能需要考虑重构=D。但除此之外,如果您使用 StatefulWidget,它的context
属性与传递给构建函数的属性相同。
仅供参考 - 来自State.build
文档:
BuildContext 参数始终与此 State 对象的上下文属性相同,并且在此对象的生命周期内保持不变。此处多余地提供了 BuildContext 参数,以便此方法与 WidgetBuilder 的签名匹配。
归档时间: |
|
查看次数: |
2964 次 |
最近记录: |