Я использовал 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,
),
);
}
}