颤抖的webview显示空白屏幕

时间:2020-04-05 13:56:14

标签: flutter flutterwebviewplugin

我正在尝试在Flutter应用程序上使用WebView()。编写代码后,没有任何错误,但是,在模拟器上运行调试模式时,该页面为空白。 AppBar在那里,文本也在上面,但是主体是空白屏幕。

import 'package:flutter/material.dart';

import 'package:webview_flutter/webview_flutter.dart';

class Audio extends StatefulWidget {
  @override
  _AudioState createState() => _AudioState();
}

class _AudioState extends State<Audio> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Audio"),
      ),
      body: WebView(
        key: UniqueKey(),
        initialUrl: "http://google.com",
        javascriptMode: JavascriptMode.unrestricted

      ),
    );
  }
}

1 个答案:

答案 0 :(得分:0)

这几乎是一种有意的行为。您提供的 initialUrl 似乎是不安全的 HTTP 连接。

文档“Insecure HTTP connections are disabled by default on iOS and Android”解释了这一切:

<块引用>

从 Android API 28 开始 和iOS 9, 这些平台默认禁用不安全的 HTTP 连接。

通过此更改,Flutter 还禁用了移动设备上的不安全连接 平台。其他平台(桌面、网络等)不受影响。

您可以通过遵循特定于平台的 定义域特定网络策略的指南。见 有关详细信息,请参见下方的迁移指南。

很像平台,应用程序仍然可以不安全地打开 套接字连接。 Flutter 不会在套接字上强制执行任何策略 等级;您将负责保护连接。

以下是示例场景:

场景 1: 使用“http://google.com”

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';

void main() {
  runApp(Audio());
}

class Audio extends StatefulWidget {
  @override
  _AudioState createState() => _AudioState();
}

class _AudioState extends State<Audio> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("Audio"),
        ),
        body: WebView(
            key: UniqueKey(),
            initialUrl: "http://google.com",
            javascriptMode: JavascriptMode.unrestricted),
      ),
    );
  }
}

enter image description here

场景 2: 使用“google.com”

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';

void main() {
  runApp(Audio());
}

class Audio extends StatefulWidget {
  @override
  _AudioState createState() => _AudioState();
}

class _AudioState extends State<Audio> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("Audio"),
        ),
        body: WebView(
            key: UniqueKey(),
            initialUrl: "google.com",
            javascriptMode: JavascriptMode.unrestricted),
      ),
    );
  }
}

enter image description here

场景 3: 使用“https://www.google.com/”

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';

void main() {
  runApp(Audio());
}

class Audio extends StatefulWidget {
  @override
  _AudioState createState() => _AudioState();
}

class _AudioState extends State<Audio> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("Audio"),
        ),
        body: WebView(
            key: UniqueKey(),
            initialUrl: "https://www.google.com/",
            javascriptMode: JavascriptMode.unrestricted),
      ),
    );
  }
}

enter image description here