引入flutter module,运行时flutter_webview_plugin报错:Unhandled Exception: MissingPluginException

2023-11-02

异常信息

Android原生项目引入了一个flutter module,flutter module用到了一个flutter写的sdk,sdk需要使用webview来执行js代码,因此sdk引用了flutter_webview_plugin,然后运行时报错:

E/flutter: [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: MissingPluginException(No implementation found for method launch on channel flutter_webview_plugin)
    #0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:156:7)
    <asynchronous suspension>
    #1      FlutterWebviewPlugin.launch (package:flutter_webview_plugin/src/base.dart:225:5)
    <asynchronous suspension>

看下使用的flutter_webview_plugin的版本:
在这里插入图片描述
执行flutter pub get:

$ flutter pub get
Running "flutter pub get" in polkawallet...                        738ms
The plugin `flutter_aes_ecb_pkcs5` is built using an older version of the Android plugin API which assumes that it's running in a full-Flutter environment. It may have undefined behaviors when Flutter is integrated into an existing app as a module.
The plugin can be updated to the v2 Android Plugin APIs by following https://flutter.dev/go/android-plugin-migration.
The plugin `flutter_qr_scan` is built using an older version of the Android plugin API which assumes that it's running in a full-Flutter environment. It may have undefined behaviors when Flutter is integrated into an existing app as a module.
The plugin can be updated to the v2 Android Plugin APIs by following https://flutter.dev/go/android-plugin-migration.
The plugin `flutter_webview_plugin` is built using an older version of the Android plugin API which assumes that it's running in a full-Flutter environment. It may have undefined behaviors when Flutter is integrated into an existing app as a module.
The plugin can be updated to the v2 Android Plugin APIs by following https://flutter.dev/go/android-plugin-migration.

注意到上面输出信息中的:

The plugin `flutter_webview_plugin` is built using an older version of the Android plugin API which assumes that it's running in a full-Flutter environment. It may have undefined behaviors when Flutter is integrated into an existing app as a module.
The plugin can be updated to the v2 Android Plugin APIs by following https://flutter.dev/go/android-plugin-migration.

提示我们,这个 flutter_webview_plugin 是使用旧版本的 plugin API 开发的插件,它是假设在全flutter环境的项目中使用的,如果在一个Android app的module中使用,可能会出现未知的异常,要对插件进行升级可以参考:https://flutter.dev/docs/development/packages-and-plugins/plugin-api-migration

关于flutter_webview_plugin

github:https://github.com/fluttercommunity/flutter_webview_plugin/
所有发布的版本:https://github.com/fluttercommunity/flutter_webview_plugin/tags

在flutter中使用webview需要导入一个第三方插件:flutter_webview_plugin
(flutter_webview_plugin的介绍文档:https://pub.dartlang.org/packages/flutter_webview_plugin

这个插件停更在2020年4月…不更新了
在这里插入图片描述

在app开发中经常需要到webview控件,但是flutter本身是没有webview相关控件的,因此需要插件来提供webview控件,flutter中比较常用的webview插件主要有2个,分别是:flutter_webview_plugin和webview_flutter。
flutter_webview_plugin:https://pub.dartlang.org/packages/flutter_webview_plugin
webview_flutter: https://pub.flutter-io.cn/packages/webview_flutter

flutter_webview_plugin插件的使用

使用方式很简单,按照文档 https://pub.dartlang.org/packages/flutter_webview_plugin 的说明一步步来就行了。

一、获得插件

首先,我们先在pubspec.yaml文件中添加依赖

dependencies:
       flutter_webview_plugin: ^0.3.4

然后执行 flutter pub get 就会帮我们下载插件

二、在项目中引入

插件下载完成后就可以在项目中引入了

import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';

三、代码中具体使用webview在这里插入图片描述

解决

网上看了一大堆解决方式,有些参考吧…

阿里巴巴的flutter_boost项目的webview相关异常:flutter_webview_plugin异常 #653 看着比较靠谱,折腾了一通… 尝试使用 git log --grep="webview"git log --grep="plugin"想查看能不能搜索到相关commit记录,git log --grep="plugin"可以搜索到插件相关的修改,但查看代码发现好像最新版本的代码中又被改掉了?..本以为可以看下现成的解决方案的…

只好静下来自己分析异常…
仔细看下FlutterWebviewPlugin的源码:

/**
 * FlutterWebviewPlugin
 */
public class FlutterWebviewPlugin implements MethodCallHandler, PluginRegistry.ActivityResultListener {
    private Activity activity;
    private WebviewManager webViewManager;
    private Context context;
    static MethodChannel channel;
    private static final String CHANNEL_NAME = "flutter_webview_plugin";
    private static final String JS_CHANNEL_NAMES_FIELD = "javascriptChannelNames";

    public static void registerWith(PluginRegistry.Registrar registrar) {
        if (registrar.activity() != null) {
            channel = new MethodChannel(registrar.messenger(), CHANNEL_NAME);
            final FlutterWebviewPlugin instance = new FlutterWebviewPlugin(registrar.activity(), registrar.activeContext());
            registrar.addActivityResultListener(instance);
            channel.setMethodCallHandler(instance);
        }
    }


...


好家伙… 必须要activity不为null时才进行注册插件,而项目中使用Flutter时并没有启动一个Activity,所以registerWith就不能成功注册插件了…
这种插件注册方式其实是flutter v1版本的插件注册方式,flutter v2版本的插件注册方式参看:https://flutter.dev/docs/development/packages-and-plugins/plugin-api-migration,其中说的非常清楚,

The new API has the advantage of providing a cleaner set of accessors for lifecycle dependent components compared to the old APIs. For instance PluginRegistry.Registrar.activity() could return null if Flutter isn’t attached to any activities.

new API在Flutter没有绑定到任何activity的情况下,PluginRegistry.Registrar.activity() 可以返回null。

然而flutter_webview_plugin插件停更在2020年4月…代码不更新了,还是使用旧的apiPluginRegistry.Registrar.activity()

于是考虑用动态代理解决…

参考:

先stop app,再运行app:
Unhandled Exception: MissingPluginException(No implementation found for method launch on channel)

Flutter 解决 MissingPluginException(No implementation found for method xxx on channel xxx)

Unhandled Exception: MissingPluginException(No implementation found for method ****** on channel plugins.flutter.io/firebase_messaging) on IOS

MissingPluginException(No implementation found for method close on channel flutter_webview_plugin)

flutter_webview_plugin插件的使用
flutter插件推荐之 flutter_webview_plugin

Flutter应用开发之webview_flutter插件
在 Flutter 中使用 WebView

Unhandled Exception: MissingPluginException(No implementation found for method close on channel flutter_webview_plugin)

flutter和Android混编下出现“No implementation found for method xxxx on channel”错误

flutter_webview_plugin异常 #653

Flutter plugin registrar.context() and registrar.activity() always null

Javaweb学习(一)之动态代理(增强方法的返回值)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

引入flutter module,运行时flutter_webview_plugin报错:Unhandled Exception: MissingPluginException 的相关文章

随机推荐

  • C语言之结构体(Struct)

    Struct 结构体的两种定义方法 方法1 方法2 结构体的成员的初始化与访问 应用举例 结构体的两种定义方法 方法1 定义一个结构体 struct Name int temp1 float temp2 1 1 定义一个结构体变量 stru
  • 拿offer必须掌握的最全SpringCloud面试题(含答案)

    今天公司的项目比较忙 远程开会和办公的沟通效率总是差那么一点 为了节约点时间 就不介绍SpringCloud了 我想只要是一名Java开发程序员 提到微服务 一定对SpringCloud的大名如雷贯耳 我们直接来看它的高频面试题吧 1 什么
  • R绘制双坐标轴

    目录 方法一 ggplot中的sec axis函数 方法二 plotrix包中的twoord plot 函数和twoord stackplot 函数 方法一 ggplot中的sec axis函数 ggplot2支持直接显示在辅助轴上的数据的
  • 机器学习——为什么逻辑斯特回归(logistic regression)是线性模型

    问 逻辑斯蒂回归是一种典型的线性回归模型 答 正确 逻辑斯蒂回归是一种典型的线性回归模型 它通过将线性回归模型的输出结果映射到 0 1 区间内 表示某个事物发生的概率 从而适用于二分类问题 具体地说 它使用sigmoid函数对线性回归模型的
  • Python的赋值与深浅拷贝

    简要版本 由于 Python 内部引用计数的特性 对于不可变对象 浅拷贝和深拷贝的作用是一致的 就相当于复制了一份副本 原对象内部的不可变对象的改变 不会影响到复制对象 浅拷贝的拷贝 其实是拷贝了原始元素的引用 内存地址 所以当拷贝可变对象
  • FLEX开发人员中心部分下载

    Adobe Application Modeling plug in download Adobe Application Modeling plug in download 点击进入 Flex MX Skin Design Extensi
  • C语言基础入门48篇_47_C语言操作文件(文件操作函数、打开文件fopen()、关闭文件fclose()、fclose规范程序、野指针的定义为:指针地址存在,但是指针指向的是一个已经释放的资源)

    本篇主要介绍c语言中对文件的打开关闭操作 1 C语言文件操作函数 C标准库中提供了一系列的函数 来操作文件 因为C库函数做了这个中间层 屏蔽掉了操作系统上对于文件的不同处理 关于文件的常见基本操作有 打开文件fopen 创建文件或打开文件载
  • 2020-6次面试阿里,持续一个多月,终于拿到offer了!

    从3月开始准备 一直到5月22号 终于拿到阿里的实习offer 这一路 真的是一把辛酸泪 下面细说之 在这一路上 坎坎坷坷 跌跌宕宕 期间 面了阿里 腾讯 百度 今日头条 小米 笔试网易 美团 携程 爱奇艺 不得不说 阿里是持续周期最长的
  • 视频爬虫逆向简单入门级

    严禁用于学习交流之外的任何用途 侵删 只能说这个比较简单 没什么难度 很适合做js逆向入门 下面就开始解析一下这个网站吧 aHR0cHM6Ly93d3cubWlndXZpZGVvLmNvbS9tZ3Mvd2Vic2l0ZS9wcmQvZGV
  • python中的爬虫基础工具介绍

    一 引入什么是爬虫 网络爬虫 按照一定的规则 自动地抓取互联网信息的程序 通俗的来讲 模拟用户端向服务器发送请求 批量获取数据的一种程序或 工具 方式 二 爬虫的分类 1通用爬虫 通用网络爬虫是捜索引擎抓取系统 Baidu Google S
  • 二进制部署k8s集群

    二进制部署k8s集群 1 安装要求 在开始之前 部署 Kubernetes 集群机器需要满足以下几个条件 一台或多台机器 操作系统 CentOS7 硬件配置 2GB 或更多 RAM 2 个 CPU 或更多 CPU 硬盘 30GB 或更多 集
  • 【JavaSE】常用类库1

    常用类库 1 对象清理 对象的清理 JDK1 9以前 使用Object中的finalize 方法 JDK1 9后 java lang ref Cleaner类 基于AutoCloseable接口资源释放 对象释放前 启动对象清理线程 pub
  • 20220128学习记录- 北交opencv基础

    1 模拟图像 空间采样与亮度量化 数字图像 空间分辨率 与采样间隔有关 亮度分辨率 与灰度级有关 2 图像存储 比特数 面积x灰度级的量化级别 注意是256灰度级不是乘256而是乘8 2的8次方 3 各类图像格式的特点与区别 4 灰度直方图
  • 什么是数据挖掘技术,基本概念是什么?

    随着计算机技术的发展 各行各业都开始采用计算机及相应的信息技术进行管理和运营 这使得企业生成 收集 存贮和处理数据的能力大大提高 数据量与日俱增 企业数据实际上是企业的经验积累 当其积累到一定程度时 必然会反映出规律性的东西 对企业来 堆积
  • JavaWeb-使用cookie完成两周内免登录功能

    欢迎页面 h2 欢迎页面 h2 br
  • 一文看懂异步 FIFO 架构(三) 双时钟的异步 FIFO

    目录 工作原理 方向标志 方向标志的实现 计算满和空 结论 往期系列博客 在本系列的第一篇文章中 我们看到了 FIFO 的一般架构 并分析了一个时钟的简单情况 该系列的第二部分描述了一种可能的双时钟设计的架构 在第三部分中 我们将探索另一种
  • Window操作系统基本知识

    windows系统 kernel32 dll是Windows 系统中非常重要的32位动态链接库文件 属于内核级文件 它控制着系统的内存管理 数据的输入输出操作和中断处理 当Windows启动时 kernel32 dll就驻留在内存中特定的写
  • 【CSS】滚动条样式详解

    只总结webkit的 IE与firefox暂不做记录 呼出与关闭滚动条 1 如果是浏览器的滚动条 其依赖的是html标签 我们不需要设置 内容溢出会自动出现 对html标签的溢出样式隐藏即可 html overflow x hidden 隐
  • 集合竞价规则及集合竞价的产生条件

    了解一下集合竞价规则 对于股民来说 是非常重要的 否则连一些基本的定义都了解不清楚的话 那么就麻烦了 下面为你介绍一下集合竞价规则以及集合竞价的产生条件 如果想要了解更多集合竞价方面的知识 敬请关注QR量化投资社区 下面让我们了解一下集合竞
  • 引入flutter module,运行时flutter_webview_plugin报错:Unhandled Exception: MissingPluginException

    异常信息 Android原生项目引入了一个flutter module flutter module用到了一个flutter写的sdk sdk需要使用webview来执行js代码 因此sdk引用了flutter webview plugin