【问题标题】:Flutter Webview not working for Flutter webFlutter Webview 不适用于 Flutter web
【发布时间】:2020-08-13 10:06:39
【问题描述】:

我正在尝试通过 URL 在webview 中显示网页。 我试过flutter_webview_plugin插件,但是当我在浏览器上运行项目时它不起作用。

有没有其他方法可以在 Flutter Web 应用中显示网页?

【问题讨论】:

    标签: flutter-web


    【解决方案1】:

    flutter_webview_plugin 是将网页嵌入到应用程序中。在 Flutter Web 中,您应该使用 HtmlElementView 小部件。 大多数演示使用IFrameElement 嵌入网页。您可以检查此easy_web_view 包以自动处理移动和网络平台。 它根据部署的情况在内部自动使用HTMLElementViewWebView

    一些例子是可用的here

    添加 onLoad 监听器的更新

    IFrameElement iframeElement = IFrameElement()
          ..src = 'url'
          ..style.border = 'none'
          ..onLoad.listen((event) {
            // perform you logic here.
          });
    
        ui.platformViewRegistry.registerViewFactory(
          'webpage',
          (int viewId) => iframeElement,
        );
    
        return Directionality(
          textDirection: TextDirection.ltr,
          child: Center(
            child: SizedBox(
              width: double.infinity,
              height: double.infinity,
              child: HtmlElementView(viewType: 'webpage'),
            ),
          ),
        );
    

    【讨论】:

    • 如何从这个库中获取 PageLoadComplete 回调。
    • 如果您需要,那么您应该使用HtmlElementView 小部件并使用来自dart:htmlIFrameElementonLoad 流。您可以查看文档here。这是一个 EventStream,您可以在回调中监听并执行您需要的逻辑。
    • 谢谢先生的帮助,我已经使用 HtmlEventView 完成了该代码,但我不明白在哪里为 PageLoad 完成事件添加回调,ui.platformViewRegistry.registerViewFactory('webpage', (int viewId) => IFrameElement() ..src = url ..style.border = 'none'); return Directionality( textDirection: TextDirection.ltr, child: Center(child: SizedBox(width: double.infinity, height: double.infinity, child: HtmlElementView(viewType: 'webpage'), ), ), );
    • 错误:PlatformException(未注册工厂,没有为视图类型'map_element'注册工厂,null,null)发生此错误
    【解决方案2】:

    如果有人在加载移动端时遇到问题,那就继续吧,它可以在 Flutter Android、Ios、Web 中使用:-

    EasyWebView(
            height: 400,
            width: 1000,
            isHtml: false, // Use Html syntax
            isMarkdown: false, // Use markdown syntax
            convertToWidgets: true,
            src: Uri.dataFromString('<html><body><iframe allow="camera *;microphone *" height="100%" width="100%"'
                ' frameborder="0" src="$url"></iframe></body></html>', mimeType: 'text/html').toString(),
          ),
    

    你们可以使用任何 webview 在你的 web/app 中加载任何网页,使用 html 中的 Url 只需更改 src = "$url" :)

    【讨论】:

    • 它不适用于 dart null 安全版本。
    猜你喜欢
    • 2022-10-17
    • 2020-04-12
    • 2021-12-04
    • 2020-01-28
    • 2020-11-22
    • 2022-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多