У меня есть следующий код, который отлично работает на Android. Но на iOS он не реагирует на онлайн / офлайн как на Android. Я отредактировал URL-адреса в коде:
class HomePage extends StatefulWidget {
_State createState() => _State();
}
class _State extends State<HomePage> {
FlutterWebviewPlugin fwp;
final String initialUrl = 'https://example.com/link/';
@override
void initState() {
super.initState();
fwp = FlutterWebviewPlugin();
fwp.onStateChanged.listen(onStateChange);
}
@override
void dispose() {
fwp.dispose();
super.dispose();
}
void onStateChange(WebViewStateChanged state) {
List<String> doNotSave = <String>[
initialUrl,
];
var uri = Uri.parse(state.url);
if (state.type == WebViewState.finishLoad && !doNotSave.contains(state.url) && (uri.queryParameters["link"] == "true")) {
storage.setString('url', state.url);
print("Saved!");
}
}
Widget build(BuildContext context) {
// Uncomment to reset URL
// storage.setString('url', '');
String savedUrl = storage.getString('url') ?? '';
String urlToLoad = savedUrl != '' ? savedUrl : initialUrl;
return new Scaffold(
body: OfflineBuilder(
connectivityBuilder: (
BuildContext context,
ConnectivityResult connectivity,
Widget child,
) {
final bool connected = connectivity != ConnectivityResult.none;
if (connected == true) { // Show link-page or URL from database
fwp.reloadUrl(urlToLoad);
}
else { // Offline 404
fwp.reloadUrl(Uri.dataFromString('<html><body>404</body></html>', mimeType: 'text/html').toString());
}
// Loading dots
return WebviewScaffold(
url: Uri.dataFromString('<html><body>Loading...</body></html>', mimeType: 'text/html').toString(),
withJavascript: true,
useWideViewPort: false,
withZoom: false,
scrollBar: false
);
},
child: Column(
),
),
);
}
}
Как вы, вероятно, видите, приложение запускается с отображаемым Loading...
, и если оно в сети, оно должно отображать urlToLoad
, и если оно онлайн показывает страницу с 404
. И он должен реагировать, если состояние соединения изменяется в любое время. Почему это не работает на iOS? Он показывает только часть Loading...
, но больше ничего.