九、Flutter之webview

Flutter的webview常用的第三方库有flutter_webview_pluginwebview_flutter,后者的文档较少,暂先学习flutter_webview_plugin。

一、flutter_webview_plugin

添加依赖

flutter_webview_plugin: ^0.3.0

导入包

import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';

iOS端info.plist配置,其中NSAppTransportSecurity节点是为了支持http协议

<key>io.flutter.embedded_views_preview</key>
    <true/>
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

一个简单的demo

    new MaterialApp(
      routes: {
        "/": (_) => new WebviewScaffold(
          url: "https://www.baidu.com",
          appBar: new AppBar(
            title: new Text("Widget webview"),
          ),
        ),
      },
    );

要监听链接跳转的话,实现onUrlChanged即可

  final _urlCtrl = TextEditingController(text: selectedUrl);

  @override
  void initState() {
    super.initState();
    ...

    _urlCtrl.addListener(() {
      selectedUrl = _urlCtrl.text;
    });

    // Add a listener to on url changed
    _onUrlChanged = flutterWebViewPlugin.onUrlChanged.listen((String url) {
      if (mounted) {
        setState(() {
          //这里拦截url变化,可以实现点击号码拨号
          _history.add('onUrlChanged: $url');
          if(url.startsWith('tel:')){
            print(url);
            launch(url);
          }
        });
      }
    });
  }

二、webview_flutter

添加依赖

webview_flutter:  ^0.3.3+1

导入包

import 'package:webview_flutter/webview_flutter.dart';

iOS端info.plist配置

<key>io.flutter.embedded_views_preview</key>
    <true/>
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

一个简单的demo

          return WebView(
          initialUrl: 'https://www.baidu.com',
          javascriptMode: JavascriptMode.unrestricted,
          onWebViewCreated: (WebViewController webViewController) {
            _controller.complete(webViewController);
          },
          // TODO(iskakaushik): Remove this when collection literals makes it to stable.
          // ignore: prefer_collection_literals
        );

但是在webview里点击链接跳转的时候,测试机有时会跳转到系统浏览器上,并且点击文本框无法弹出键盘,交互性很弱。

二者共同的缺点是与javascript难以交互,目前只能实现Flutter->JS传递信息,还没找到可以进行完美交互的第三方库。并且一些常见的协议还不支持,比如拨号和调用摄像头等,期待后续完善。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,736评论 4 61
  • 可是经过三缄其口,共是六缄其口之后,他深信自己既没有理由感到骄傲,也没有理由感到后悔。
    Incomparable_阅读 1,454评论 0 0
  • 英达克村 黎青屏 星隐玄月存, ...
    黎青屏阅读 2,241评论 0 0
  • 1.psnr 在超分辨率问题中,有一指标PSNR(信噪比)衡量重建图像的质量。 MSE为均方误差 2.SRGAN原...
    Yankee_13阅读 6,261评论 0 1
  • 45天的孵化营马上就要结束了,感觉45天好快一转眼快过完了回顾福花园的活动。感觉这个福花园真的太好了。在这里边,收...
    胜利一号阅读 2,454评论 0 0

友情链接更多精彩内容