不要在 Flutter 中的 showDialog 周围的异步间隙中使用“BuildContext”

ayu*_*dbe 2 dart flutter

我在我的 flutter 项目中围绕 InAppWebView Widget 内的每个 showDialog 小部件收到此警告。如何解决这个问题?

 return InAppWebView(
 ...
   onLongPressHitTestResult: (controller, hitTestResult) async {
        if (LongPressAlertDialog.hitTestResultSupported
            .contains(hitTestResult.type)) {
          var requestFocusNodeHrefResult =
              await _webViewController?.requestFocusNodeHref();

          if (requestFocusNodeHrefResult != null) {
//Don't use 'BuildContext' across async gaps
            showDialog(
              context: context,
              builder: (context) {
                return LongPressAlertDialog(
                  webViewModel: widget.webViewModel,
                  hitTestResult: hitTestResult,
                  requestFocusNodeHrefResult: requestFocusNodeHrefResult,
                );
              },
            );
          }
        }
      },
}

Run Code Online (Sandbox Code Playgroud)

eam*_*ein 8

尝试这个:

if (requestFocusNodeHrefResult != null && context.mounted) { // <=== add this
    showDialog(
      context: context,
      builder: (context) {
        return LongPressAlertDialog(
          webViewModel: widget.webViewModel,
          hitTestResult: hitTestResult,
          requestFocusNodeHrefResult: requestFocusNodeHrefResult,
        );
      },
    );
  }
Run Code Online (Sandbox Code Playgroud)