WebView flutter 无法正确加载页面

问题描述 投票:0回答:1

我在 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),
    );
  }
}
flutter dart webview webview-flutter
1个回答
0
投票

最后我找到了其他可以显示整个页面的代码:

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,
        )
    ]);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.