我在 flutter 中创建了一个显示网页的页面。我使用了
webview_flutter
,但它无法正确加载页面。它显示页面,但仅在屏幕的 10% 中显示,其余 90% 显示加载符号。
我可以在绿色区域滑动并观看整个网页。
我尝试查看其他 Stack Overflow 帖子,但自 2019 年以来该软件包似乎已发生变化,因为他们建议的方法现在返回错误。
我的代码:
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:webview_flutter/webview_flutter.dart';
class WebViewContainer extends StatefulWidget {
const WebViewContainer({super.key});
@override
State<StatefulWidget> createState() => _WebViewContainerState();
}
class _WebViewContainerState extends State<WebViewContainer> {
final controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.disabled)
..loadRequest(Uri.parse('https://itvlahoya.es/cita-previa'));
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Cita Previa ITV"),
),
body: WebViewWidget(controller: controller),
);
}
}
最后我找到了其他可以显示整个页面的代码:
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:webview_flutter/webview_flutter.dart';
class WebViewContainer extends StatefulWidget {
const WebViewContainer({super.key});
@override
State<StatefulWidget> createState() => _WebViewContainerState();
}
class _WebViewContainerState extends State<WebViewContainer> {
var loadingPercentage = 0;
final controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.disabled)
..loadRequest(Uri.parse('https://google.com'));
@override
void initState() {
super.initState();
controller
..setNavigationDelegate(NavigationDelegate(onPageStarted: (url) {
setState(() {
loadingPercentage = 0;
});
}, onProgress: (progress) {
setState(() {
loadingPercentage = progress;
});
}, onPageFinished: (url) {
setState(() {
loadingPercentage = 100;
});
}))
..setJavaScriptMode(JavaScriptMode.unrestricted)
..addJavaScriptChannel("Snackbar", onMessageReceived: (message) {
ScaffoldMessenger.of(context)
.showSnackBar(SnackBar(content: Text(message.message)));
});
}
@override
Widget build(BuildContext context) {
return Stack(children: [
WebViewWidget(controller: controller),
if (loadingPercentage < 100)
LinearProgressIndicator(
value: loadingPercentage / 100.0,
)
]);
}
}