Потяните, чтобы обновить WebView во флаттере

Я создаю приложение WebView и хочу опустить экран, чтобы обновить веб-страницу. Я использую https://pub.dev/packages/flutter_inappwebview для веб-просмотра. Я пытаюсь обернуть WebView внутри SingleChildScrollView или ListView, но ни один из них не работает. В приведенном ниже коде WebView не прокручивается, пока работает функция смахивания.

Какое-то время я искал решение, но не нашел. Любая помощь будет признательна!

@override
Widget build(BuildContext context) {
return WillPopScope(
  onWillPop: () => _onBackPressed(),
  child: Scaffold(
    body: SafeArea(
      child: RefreshIndicator(
        onRefresh: () async {
          print("##Refresh");
          webview.reload();
        },
        child: SingleChildScrollView(
          physics: AlwaysScrollableScrollPhysics(),
          child: Container(
            height: MediaQuery.of(context).size.height,
            child: Center(
              child: Stack(
                children: <Widget>[
                  InAppWebView(
                    gestureRecognizers: Set()
                      ..add(
                        Factory<VerticalDragGestureRecognizer>(
                            () => VerticalDragGestureRecognizer(),
                        ),
                      ),
                    initialOptions: InAppWebViewGroupOptions(
                      crossPlatform: InAppWebViewOptions(
                        debuggingEnabled: true,
                        userAgent: 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Mobile Safari/537.36',
                      ),
                    ),
                    onWebViewCreated: (InAppWebViewController controller) {
                      webview = controller;
                      controller.loadUrl(url: startURL);
                    },
                    onLoadStart: (InAppWebViewController controller, String url) async {
                      print("##onloadstart: " + url);
                    },
                    onLoadStop: (InAppWebViewController controller, String url) async {
                      print("##onloadstop: $url");
                    },
                    onProgressChanged: (InAppWebViewController controller, int progress) {
                      setState(() {
                        this.progress = progress / 100;
                      });
                    }
                  ),
                  Align(
                    alignment: Alignment.center,
                    child: buildProgressBar(progress),
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    ),
  ),
);
}

0 ответов

Вероятно, это правильный ответ в вашем случае ->

child:  Scaffold(
                  body: SafeArea(
                      child: Column(children: <Widget>[
                        Container(
                          padding: EdgeInsets.all(3.0),
                          child: Icon(Icons.keyboard_arrow_down),
                        ),
                        Expanded(
                          child: Container(
                            child: InAppWebView(...)

На самом деле это довольно просто, если вы используете пакет pull_to_refresh. Все, что вам нужно сделать, это посмотреть на нижнюю часть их демонстрационного кода и заменить построитель listview своим шаблоном inappwebview.

child: ListView.builder(), -> child:  Scaffold(),

и не забудьте добавить свой webView.reload(); для тяги.

Пакет @ https://pub.dev/packages/pull_to_refresh

#EDIT К сожалению, я не понял, что проблема связана с прокруткой в ​​веб-просмотре. Затем я воспроизвел проблему, поскольку у меня есть контроллер tabview, я использовал

gestureRecognizers: <Factory<OneSequenceGestureRecognizer>>[
new Factory<OneSequenceGestureRecognizer>(
() => new EagerGestureRecognizer(),
),
].toSet(),

это решило проблему, и если это не так, то это связано с использованием расширенных дочерних элементов.

Другие вопросы по тегам