слушатель flutter_webview_plugin (onHttpError) не работает после установки - PullRequest
0 голосов
/ 27 марта 2020

Я использовал flutter_webview_plugin, и я изменяю экран, чтобы показать сообщение об ошибке и кнопку перезагрузки, используя setState (эта кнопка работает на флаге errorState, который установлен слушателем onHttpError). Когда ошибка возникает, она работает и показывает сообщение об ошибке, но когда та же самая ошибка возникает снова, слушатель не обнаруживает ошибку.

(Воспроизвести: Wi-Fi включен, и я открываю приложение, веб-просмотр загружается. Затем я нажимаю некоторую кнопку в веб-представлении для навигации, но появляется ошибка. Теперь я подключаю inte rnet и нажимаю перезагрузить кнопка работает и загружает веб-сайт. После этого я снова отключаю inte rnet и нажимаю какую-то кнопку, на этот раз ошибка не появляется и переходит на недоступную веб-страницу)

исходное состояние:

  void initState() {
    _onHttpError = flutterWebviewPlugin.onHttpError.listen(
      (WebViewHttpError error) => {
        print("ERROR Listener" + error.toString()),
        setState(() {
          errorState = true;
        }),
        print("error state on listen: $errorState")
      },
    );
    super.initState();
  }

Метод onReload:

  void _onReload() async {
    Future<ApiResponse> apiResponse =
        fetchData(widget._username, widget._password);
    var response = await apiResponse;

    print("API RESPONSE =  status: " +
        response.status.toString() +
        ", message: " +
        response.message.toString());

    if (response.status == "true") {
      setState(() {
        flutterWebviewPlugin.reload();        
        errorState = false;
      });
    } else {
      setState(() {
        errorState = true;
      });
    }
    print("error state on reload: $errorState");
  }

Метод построения:

  Widget build(BuildContext context) {
    print("error state on build: $errorState");
    return SafeArea(
      child: errorState
          ? Scaffold(
              body: Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Padding(
                    padding: const EdgeInsets.all(16.0),
                    child: Text(
                      "No Internet, Please try again.",
                      style: TextStyle(fontSize: 16),
                    ),
                  ),
                  RaisedButton(
                    onPressed: () {
                      _onReload();
                    },
                    child: Text("Reload"),
                  )
                ],
              ),
            ))
          : WebviewScaffold(
              url: url,
            ),

    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...