首页 > 解决方案 > 如何将完成者重置为未来

问题描述

我正在使用flutter的官方WebView。

Completer<WebViewController> _controller = Completer<WebViewController>();  //State class variable

return WebView(
                    key: widget.key,
                    javascriptMode: JavascriptMode.unrestricted,
                    initialUrl: "$baseUrl/course.html",
                    onWebViewCreated: (WebViewController webViewController) {
                      _controller.complete(webViewController); // here is the problem
                    },
                    onPageFinished: (url) {
                      _showPageTitle();
                    },
                    javascriptChannels: <JavascriptChannel>[createChannel()].toSet(),
                  );

当我最初进入屏幕时工作正常,但是当我进行后按和前按时,我得到了

Unhandled Exception: Bad state: Future already completed
#0      _AsyncCompleter.complete (dart:async/future_impl.dart:43:31)

所以我_controller的已经完成了。就好像屏幕保持着_controller.

我尝试使用 UniqueKey ,WebView 但没有奏效。有什么我可以做的吗,dispose或者willPopScope如何让完成者“不完整”因为需要一个更好的短语!

标签: flutter

解决方案


您是否每次都尝试重新分配它?

Widget build(BuildContext context) {
    _controller = new Completer<WebViewController>();
    return WebView(
        ...

推荐阅读