Flutter Web 中的 WebView

Pyt*_*057 16 webview flutter

我正在尝试在 Flutter for Web 中显示 Web 视图,但出现以下错误:

PlatformException(Unregistered factory, No factory registered for viewtype 'plugins.flutter.io/webview', null)
Run Code Online (Sandbox Code Playgroud)

有没有办法在 Flutter Web 中显示 WebView?

ale*_*607 16

编辑:这是截至 2021 年 5 月 16 日的可运行示例:

import 'dart:html';
import 'package:flutter/material.dart';
import 'dart:ui' as ui;

void main() {
  // ignore: undefined_prefixed_name
  ui.platformViewRegistry.registerViewFactory(
      'hello-world-html',
          (int viewId) => IFrameElement()
        ..width = '640'
        ..height = '360'
        ..src = 'https://www.youtube.com/embed/IyFZznAk69U'
        ..style.border = 'none');

  runApp(Directionality(
    textDirection: TextDirection.ltr,
    child: SizedBox(
      width: 640,
      height: 360,
      child: HtmlElementView(viewType: 'hello-world-html'),
    ),
  ));
}
Run Code Online (Sandbox Code Playgroud)

这篇文章的其余部分只是复制了上面的内容,并且是原作者的原始帖子

您首先需要执行 platformViewRegistry:

  ui.platformViewRegistry.registerViewFactory(
  'hello-world-html',
  (int viewId) => IFrameElement()
    ..width = '640'
    ..height = '360'
    ..src = 'https://www.youtube.com/embed/IyFZznAk69U'
    ..style.border = 'none');
Run Code Online (Sandbox Code Playgroud)

看看那个例子。在该示例中,旧库已导入(29.09.19),但如果您在 'flutter' 上更改 'flutter_web',它必须工作。

此外,您不仅可以使用“IFrameElement”,还可以使用常规 html:

    ui.platformViewRegistry.registerViewFactory("simple_div", (int viewId) {
  DivElement element = DivElement();
  ...
  return element;
Run Code Online (Sandbox Code Playgroud)

  • 我现在想补充一点,你必须执行 ```import 'dart:ui' as ui``` 而不是 ```import 'package:flutter_web_ui/ui.dart' as ui```。你会遇到 ```ui.platformViewRegistry``` 错误,但没关系。您可以通过在上面的行添加 ```//ignore: undefined_prefixed_name``` 来忽略它。 (5认同)