Потяните, чтобы обновить 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(),
это решило проблему, и если это не так, то это связано с использованием расширенных дочерних элементов.