颤动导航器弹出对话框 - 错误 - 未处理的异常:NoSuchMethodError:在 null 上调用了方法“findAncestorStateOfType”

Axi*_*xil 5 dialog navigator dismiss flutter

我在flutter https://gist.github.com/axilaris/2b186c7a4073671128e8cacc09dfc384中得到了这段弹出对话框()代码 ,如果你在底部的某个地方查看代码

class PurchaseDialog extends StatefulWidget with NavigationStates {
...
class _PurchaseDialogState extends State<PurchaseDialog> {
...
  @override
  Widget build(BuildContext context) {
    return Dialog(
...
 showSecondaryButton(BuildContext context) {
...
Navigator.of(context).pop(); <--- here is the problem
Run Code Online (Sandbox Code Playgroud)

每当它叫

Navigator.of(context).pop();
Run Code Online (Sandbox Code Playgroud)

它会导致以下错误

[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: NoSuchMethodError: The method 'findAncestorStateOfType' was called on null.
Run Code Online (Sandbox Code Playgroud)

这看起来像此NoSuchMethodError的副本:使用 await 和 async 方法在 null 上调用了方法“ancestorStateOfType”,但我尝试了它不起作用的解决方案。(上下文只能设置一次,检查已安装的变量无效)。

如何解决这个问题?到目前为止,它关闭了对话框(使用 pop() 因此它的行为是正确的),但我不希望出现此错误。

更新信息:上面的 PurchaseDialog() 以这种方式调用:

    showDialog(
      context: context,
      builder: (BuildContext context) => PurchaseDialog(),
    ).then((value) {
      setState(() {
      });
    });
Run Code Online (Sandbox Code Playgroud)

这里是跟踪打印:https : //gist.github.com/axilaris/6d8db8824b0b89e33fee7ddfdd238e34

Edw*_*nZN 2

阅读跟踪打印后,我们可以确定问题所在FlutterInappPurchase.purchaseUpdated.listen(...),并且FlutterInappPurchase.purchaseError.listen(...)在对话框关闭后没有解决该问题。他们使用上下文弹出并打开一个新对话框(在购买错误的情况下),此时该对话框可能为空。处理小部件后取消流可以解决此问题。很高兴知道可以解决问题

@override
void dispose(){
  super.dispose();
  _purchaseUpdatedSubscription.cancel();
  _purchaseErrorSubscription.cancel();
}
Run Code Online (Sandbox Code Playgroud)