(Флаттер) Как запустить статическую HTML-страницу вместо URL, если нет подключения к интернету?
У меня установлен flutter_webview_plugin. Я пытаюсь запустить пользовательскую статическую HTML-страницу вместо моего URL (мой веб-сайт wwww.duevents.in), если нет подключения к Интернету, поскольку страница "Веб-страница недоступна" не выглядит очень профессионально.
Я использую это для проверки интернета на устройстве, и он работает нормально ("connectionStatus == true", когда интернет подключен, и наоборот):
Future check() async {
try {
final result = await InternetAddress.lookup('google.com');
if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
connectionStatus = true;
print("connected $connectionStatus");
}
} on SocketException catch (_) {
connectionStatus = false;
print("not connected $connectionStatus");
}
}
Это код, где у меня есть альтернативные URL для загрузки, если нет подключения к интернету:
WebviewScaffold(
url: connectionStatus == true ?"http://www.duevents.in" : Uri.dataFromString('<html><body>hello world</body></html>', mimeType: 'text/html').toString())
Почему-то он всегда показывает мне HTML-страницу с этим кодом, независимо от того, подключено ли устройство к Интернету или нет. Пожалуйста, скажите мне, что здесь не так.
2 ответа
Решение, предоставленное @Mazin Ibrahim в комментариях выше, сработало для меня.
Поэтому я выкладываю решение здесь:
FutureBuilder(
future: check(), // a previously-obtained Future or null
builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
if (connectionStatus == true) {
//if Internet is connected
return SafeArea(
child: WebviewScaffold(
url: "http://www.duevents.in"))}
else{
//If internet is not connected
return SafeArea(
child: WebviewScaffold(
url: Uri.dataFromString('<html><body>hello world</body></html>',
mimeType: 'text/html').toString()) }})
Я бы предложил вам изменить check()
способ вернуть URL напрямую.
Future<String> getURL() async {
try {
final result = await InternetAddress.lookup('google.com');
if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
return "http://www.duevents.in";
}
} on SocketException catch (_) {
return Uri.dataFromString('<html><body>hello world</body></html>', mimeType: 'text/html').toString();
}
}
Итак, в FutureBuilder
Вы можете использовать возвращенный URL-адрес сразу.
FutureBuilder(
future: getURL(), // a previously-obtained Future or null
builder: (BuildContext context, String url) {
return SafeArea(
child: WebviewScaffold(
url: url))}
})