我showModalBottomSheet与Webview显示url https://www.youtube.com它不能滚动时,它显示,必须等待片刻,然后才能滚动,如果我添加任何字符在网页的末尾,它可以随时滚动,或者我没有设置inset,使webview的宽度等于屏幕,它总是可以随时滚动,我尝试使用webview_flutter或flutter_inappwebview,有同样的问题,
设备为iPhone 12 iOS 16.1。
代码
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// ignore_for_file: public_member_api_docs
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter/material.dart';
import 'package:web_test/widget_show_card_rule.dart';
import 'package:webview_flutter/webview_flutter.dart';
void main() => runApp(const MaterialApp(home: WebViewExample()));
class WebViewExample extends StatefulWidget {
const WebViewExample({super.key});
@override
State<WebViewExample> createState() => _WebViewExampleState();
}
class _WebViewExampleState extends State<WebViewExample> {
late final WebViewController _controller;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.green,
appBar: AppBar(
title: const Text('Flutter WebView example'),
),
body: Container(
height: 300,
padding: const EdgeInsets.only(left: 15, right: 15),
child: InAppWebView(
initialUrlRequest: URLRequest(
url: Uri.parse(
'https://www.youtube.com')),
),
),
floatingActionButton: favoriteButton(),
);
}
Widget favoriteButton() {
return FloatingActionButton(
onPressed: () async {
_checkRule();
},
child: const Icon(Icons.favorite),
);
}
_checkRule() {
showModalBottomSheet(
enableDrag: false,
isScrollControlled: true,
context: context,
backgroundColor: Colors.transparent,
builder: (context) {
return const ShowCardRule();
});
}
}
个字符
1条答案
按热度按时间vbopmzt11#
我看了一下你的问题,最初滚动不工作的原因是因为你的图像在webview上的加载时间。
即使onPageFinished回调被触发,它也不会加载所有的图像,这就是为什么你可以在web视图中查看大部分文本,但不能查看图像,因此你不能滚动太多。
这个问题实际上并不是来自webview_flutter或inappwebview插件,而是来自网页本身。如果你能在所有图片加载完毕后触发一些动作,你就可以通过从你的网页向flutter webview控制器发送一条消息,让用户知道图片正在加载。
我使用了这篇文章https://stackoverflow.com/a/11071687/14227800的组合;使用一个名为imageLoadCompleter的完成器,以及来自webview的onConsoleMessage回调,以:(0).定义imageLoad完成器。
1.检测加载的所有图像在webview。
1.发送一个控制台消息(更喜欢使用JavaScript通道,我只是不能让它与thoe工作)
1.使用完成器完成
1.使用FutureBuilder和堆栈,在顶部显示webview +加载器,直到图像加载完毕。
下面是使用加载器更新的“ShowCardRule”小部件:
字符串
我确实把评论与适当的标签来解释这一点。
希望这有帮助