Приложение Flutter (webview) нормально работает на Android, но не iOS? - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть следующий код, который отлично работает на 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..., но больше ничего.

...