iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >flutter:webview_flutter和flutter_inappwebview的简单使用
  • 451
分享到

flutter:webview_flutter和flutter_inappwebview的简单使用

flutter 2023-10-21 19:10:53 451人浏览 薄情痞子
摘要

前言 最近在研究如何在应用程序中嵌入WEB视图,发现有两个库不错。 一个是官方维护、一个是第三方维护。因为没说特别的需求,就使用了官方库,实现一些简单功能是完全ok的 webview_Flutter

前言

最近在研究如何在应用程序中嵌入WEB视图,发现有两个库不错。
在这里插入图片描述
一个是官方维护、一个是第三方维护。因为没说特别的需求,就使用了官方库,实现一些简单功能是完全ok的

webview_Flutter

不建议使用,因为效果不怎么样,当然也可能是我太菜不会用,下面这个问题就很难理解为什么会这样?
在这里插入图片描述

基本使用

官方文档

https://pub-web.flutter-io.cn/packages/webview_flutter

安装

flutter pub add webview_flutter

加载并显示web
可以加载html字符串,也可以直接加载url链接。官方都提供了对应的方法,这里演示加载url

  • 初始化
 late WebViewController webViewController;  //初始化    void initState() {    super.initState();    webViewController = WebViewController()      ..setjavascriptMode(JavaScriptMode.unrestricted);  }
  • 显示
    显示的时候一般需要结合FutureBuilder,比较这是一个异步的过程
FutureBuilder(     // 异步方法     future: searchNovelFromWeb(),     builder: (context, snapshot) {       // 等待状态显示的widget       if (snapshot.connectionState == ConnectionState.waiting) {         return const Center(           child: CircularProgressIndicator(),         );         //  错误时显示的widget       } else if (snapshot.hasError) {         return const Text('Error');       } else {         return snapshot.data ?? const Text('No data');       }     }))  Future<Widget> searchNovelFromWeb() async {    Widget res;    try {      await webViewController          .loadRequest(Uri.parse('https://m.bbxxxxxx.com/s?q=凡人修仙'));      res = WebViewWidget(controller: webViewController);    } catch (error) {      res = Text("加载失败:${error.toString()}");      print("加载失败:${error.toString()}");    }    return res;  }

在这里插入图片描述
在这里插入图片描述

flutter与web之间的交互

flutter通知web,让web执行某些操作

官方提供了两个方法:runJavaScriptrunJavaScriptReturningResult。后者可以向flutter返回执行结果
比如在网页加载完成后获取到网页源代码

webViewController.setNavigationDelegate(      NavigationDelegate(onPageFinished: (url) async {    print("页面加载完成:$url");            var html = await webViewController.runJavaScriptReturningResult(       "document.documentElement.innerText;");      debugPrint("结果是11:$html", wrapWidth: 1024);  }));

在这里插入图片描述

web发生变化后,通知flutter
这块也实现了,但是不太稳定,有时候不能够正常运行

 await webViewController          .loadRequest(Uri.parse('Https://m.bbxxxxxxxt.com/s?q=凡人修仙'));      webViewController.setNavigationDelegate(          NavigationDelegate(onPageFinished: (url) async {        print("页面加载完成:$url");        // 添加监听         await webViewController.addJavaScriptChannel('Report',             onMessageReceived: (JavaScriptMessage message) {           print("收到了消息,是:${message.message}");         });         // 注入脚本         await  webViewController.runJavaScript('''            setInterval(() => {              let time = new Date().toLocaleTimeString();               Report.postMessage(time);           },1000)         ''');      }));

在这里插入图片描述

flutter_inappwebview

功能更多,这里只会简单介绍一下,具体使用可以查看官方文档、官方案例。

强烈推荐:功能更多,而且原来使用webview_flutter无法实现的功能,现在轻而易举的实现了。

官方文档

官方案例

安装

flutter pub add flutter_inappwebview

基本使用

这里遇到个问题,版本过高导致构建失败了。我现在用的版本是:5.6.0

// 将html字符串解析为dom的库import 'package:html/parser.dart';import 'package:flutter_inappwebview/flutter_inappwebview.dart';late InAppWebViewController inAppWebViewController;
res = InAppWebView(   initialUrlRequest:       URLRequest(url: Uri.parse('https://oNIOn.inscode.cc/')),   onLoadStop: (controller, url) async {     // 加载完成     inAppWebViewController = controller;     print("加载地址:$url");     var html = await controller.getHtml();     debugPrint("html是:${html.toString().trim()}");     var dom = parse(html);     print("标题是:${dom.querySelector('.title')?.text}");   }, );

在这里插入图片描述

执行脚本

要等页面加载完成后才能执行

 // 执行脚本 var body = await inAppWebViewController.evaluateJavascript(     source: "document.body.innerHTML"); debugPrint("执行结果:${body.toString().trim()}");

在这里插入图片描述

遇到的问题

最开始我的想法是执行函数,然后更新要显示的组件,但是resBody 一直没有更新。后来发现好像是onLoadStop没有执行,仔细思考后应该是InAppWebView初始化后,没有在页面上显示导致后续方法没有执行。解决方法就是让InAppWebView在页面上显示,当然可能不想在页面显示,这时给它父容器设置一个高度比如1,这样就可以解决这个问题。

  Future searchNovelFromWeb() async {    String html = '';    InAppWebView(      initialUrlRequest:          URLRequest(url: Uri.parse('https://onion.inscode.cc/')),      onLoadStop: (controller, url) async {        inAppWebViewController = controller;        print("开始搜索了");        html = await inAppWebViewController.getHtml() ?? '1111';        debugPrint("查询的值:${html.toString()}");        setState(() {          resBody = const Text("搜索完成");        });      },    );  }

来源地址:https://blog.csdn.net/weixin_41897680/article/details/132320919

--结束END--

本文标题: flutter:webview_flutter和flutter_inappwebview的简单使用

本文链接: https://www.lsjlt.com/news/434038.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • flutter:webview_flutter和flutter_inappwebview的简单使用
    前言 最近在研究如何在应用程序中嵌入Web视图,发现有两个库不错。 一个是官方维护、一个是第三方维护。因为没说特别的需求,就使用了官方库,实现一些简单功能是完全ok的 webview_flutter...
    99+
    2023-10-21
    flutter
  • Android:IdleHandler的简单理解和使用
    IdleHandler的简单理解和使用 1、IdleHandler 是什么2、IdleHandler 使用方式2.1、添加和删除2.2、执行 3、常见问题和使用场景3.1、使用场景3.2、...
    99+
    2023-09-12
    android java 链表
  • helm的部署和简单使用
    本篇内容主要讲解“helm的部署和简单使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“helm的部署和简单使用”吧!Helm通过软件打包的形式,支持发布的版本管理和控制,很大程度上简化了Kub...
    99+
    2023-06-19
  • .netcore3.1Redis安装和简单使用
    目录1、环境信息2、支持多种计算机编程语言3、Redis官方4、下载安装5、简单使用5.1、.net core 3.1引入Redis包5.2、简单例子调用6、Redis文件说明Red...
    99+
    2023-02-02
    .net core3.1 Redis安装 .net core3.1 Redis
  • Java - JWT的简单介绍和使用
    Java - JWT的简单介绍和使用 前言一. JWT 基础知识1.1 session 案例测试1.2 JWT 结构1.2.1 Header1.2.2 Payload1.2.3 Signatu...
    99+
    2023-10-27
    java 开发语言 spring boot
  • SpringBoot简单使用SpringData的jdbc和durid
    SpringData的jdbc和durid 创建一个项目,勾选以下选项 项目构建完成后pom.xml已导入(springboot默认导入数据库驱动为8.0,要使用低版本需要手动改...
    99+
    2024-04-02
  • scrapy的简单使用
    使用之前的创建虚拟环境方法(pipenv) 创建虚拟环境并进入虚拟环境 mkdir douban cd douban pipenv install pipenv shell 再安装我们的scrapy pipenv install s...
    99+
    2023-01-30
    简单 scrapy
  • NFS的简单使用
    在NFS服务器建一个目录,用来存共享文件,提供NFS磁盘空间[root@PROD2 ~]# mkdir -p /u01/nfs_shares[root@PROD2 ~]# ll /u01总用量 8drwxr...
    99+
    2024-04-02
  • 使用Python和OpenSSL简单模拟
    本文使用Python和文件系统模拟保密通信的整个过程 本阶段完成系统初始状态模拟,直接看代码 import os,shutil from Crypto.Cipher import DES3,XOR def xorencode...
    99+
    2023-01-31
    简单 Python OpenSSL
  • C# FileStream简单介绍和使用
    FileStream 是 C# 中用于操作文件的类,它提供了一种以字节为单位读取和写入文件的功能。使用 FileStream,可以实...
    99+
    2023-08-08
    C#
  • pymongo的简单使用
    pymongo的使用 首先安装: pip install pymongo 安装好了使用 import pymongo # 链接mongodb,得到一个mongoclient的客户端对象 client = pymongo.MongoCli...
    99+
    2023-01-31
    简单 pymongo
  • registerForActivityResult()方法的简单理解和使用
    最近学到了registerForActivityResult,简单理解一下: 1、使用registerForActivityResult为获取到的结果注册结果回调,但其本身不会启动intent跳转 2...
    99+
    2023-09-05
    android java android studio
  • CodeSmith 简单使用和常用模板
    CodeSmith 是一个代码生成工具,它可以帮助开发人员快速生成大量的重复代码,提高开发效率。下面是 CodeSmith 的简单使...
    99+
    2023-09-13
    CodeSmith
  • 详解log4j.properties的简单配置和使用
    本文介绍了详解log4j.properties的简单配置和使用,分享给大家,具体如下:简单log4j.properties配置示例### set log levels ### log4j.rootLogger = INFO , consol...
    99+
    2023-05-30
    log4j.properties 配置
  • 简简单单使用Docker部署Confluence
    一、环境要求 1、已安装docker17及以上版本 二、容器运行 docker run -d --name confluence -p 8090:8090 --user root:...
    99+
    2024-04-02
  • git的简单使用(windows)
    使用参考文档 git简易指南:http://www.bootcss.com/p/git-guide/ git官方文档:https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5   git下载地址 ...
    99+
    2023-01-30
    简单 git windows
  • 42、 ffmpeg 的简单使用
    一、ffmpeg-python 安装 pip3 install ffmpeg-python 也可以通过克隆源码返回式进行安装: git clone git@github.com:kkroening/ffmpeg-python.g...
    99+
    2023-01-31
    简单 ffmpeg
  • Android ViewFlipper的简单使用
    大家都使用过ViewPager,但是ViewPager还有一个兄弟,那就是ViewFlipper。两者的名字非常相似,我们可以将ViewPager理解成“一页一页的视图”,ViewFlipper则是“快速翻转的视图”,但后者的使用率却远不及...
    99+
    2023-05-31
    android viewflipper pp
  • Spring Security的简单使用
    目录什么是Spring SecuritySpring Security测试SpringSecurity的使用静态资源一些其他的小东西什么是Spring Security ...
    99+
    2024-04-02
  • Conda简单安装和使用基础
    文章目录 前言一、conda是什么?二、conda安装方法一:官网直接下载方法二:命令行 三、使用方法检查是否安装完成设置镜像环境相关查看所有环境创造新环境进入环境退出环境删除环境 ...
    99+
    2023-09-02
    macos
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作