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, ..)
}
答案 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(...);
},
...
);
},
);