У меня установлен flutter_webview_plugin. Я пытаюсь запустить пользовательскую статическую html-страницу вместо моего URL-адреса (мой веб-сайт «www.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-страницу с этим кодом, независимо от того, подключено ли устройство к Интернету или нет.. Пожалуйста, скажите мне, что здесь не так.
@Mazin Нет, где мне это нужно здесь?
это решение поможет вам реализовать FutureBuilder
, чтобы вы могли проверять статус подключения только после его получения stackoverflow.com/questions/54634418/…
что я должен назначить «будущее:»? P.S. Прошу прощения, что задаю много вопросов, я новичок в этом деле, поэтому знаю очень мало.
Ваш check()
метод. Так и будет future: check(),
Решение, предоставленное @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))}
})
Вы пробовали использовать
FutureBuilder
?