没有小部件时如何伪造上下文?

时间:2019-04-05 09:43:02

标签: dart flutter

这是我的情况。

让我们说我有一个小工具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()可以伪造上下文,但是当它是非小部件时,我有什么选择?

1 个答案:

答案 0 :(得分:2)

Builder并没有构成“假”环境,而是真正的交易。

类似地,您不能伪造context,不能在小部件树之外获得一个。

BuildContext的定义是它表示Widget在小部件树中的位置。因此,它不会伪造它,因为您最终将伪造小部件树本身。


相反,您应该重构方法,使其不需要BuildContext

例如代替:

 void foo(BuildContext context) {
   Navigator.of(context).pushNamed('/foo');
 }

我们可以拥有:

 void foo(NavigatorState navigatorState) {
   navigatorState.pushNamed('/foo');
 }