这是我的情况。
让我们说我有一个小工具W1
,上下文为C1
。我也有这样的通用类:
class Klass {
static void doSomething(BuildContext context) {
Navigator.push(context, builder: (context) => W2());
}
}
我正在doSomething
中呼叫W1
,如下所示:
Klass.doSomething(C1);
现在,当我在Navigator.pop(context)
中进行W2
时,我会得到
尝试调用:ancestorStateOfType(实例 'TypeMatcher')
现在,我知道使用Builder()
可以伪造上下文,但是当它是非小部件时,我有什么选择?
答案 0 :(得分:2)
Builder
并没有构成“假”环境,而是真正的交易。
类似地,您不能伪造context
,不能在小部件树之外获得一个。
BuildContext
的定义是它表示Widget
在小部件树中的位置。因此,它不会伪造它,因为您最终将伪造小部件树本身。
相反,您应该重构方法,使其不需要BuildContext
。
例如代替:
void foo(BuildContext context) {
Navigator.of(context).pushNamed('/foo');
}
我们可以拥有:
void foo(NavigatorState navigatorState) {
navigatorState.pushNamed('/foo');
}