flutter android webview解决上传文件秒退问题

在项目中遇到的第二个坑: android webview 里点击会秒退。

出现这个问题的原因是,我使用的官方的webview_flutter插件没有针对这一功能做适配。而我在网上找到另一款flutter webview插件flutter webview plugin.这个插件针对android端webview上传文件的功能做了适配。

这里第一种思路是直接摒弃原版的webview_flutter插件。发现行不通,因为后者没有实现js channel和一些其他的功能。

第二种思路是把flutter webview plugin插件的文件上传部分的代码迁移到webview_flutter中。

插件是怎么调起来的

在代码迁移之前,首先说一下插件的代码是从哪开始走的。

在flutter工程的android/app/src/main/java/…/mainActivity里边有这一行代码

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//注册插件GeneratedPluginRegistrant.registerWith(this);}

在下面目录的GeneratedPluginRegistrant类里

FlutterWebviewPlugin.registerWith(registry.registrarFor("com.flutter_webview_plugin.FlutterWebviewPlugin"));WebViewFlutterPlugin.registerWith(registry.registrarFor("io.flutter.plugins.webviewflutter.WebViewFlutterPlugin"));

然后去插件文件夹里找registerWith这个静态方法。

  public static void registerWith(Registrar registrar) {factory = new WebViewFactory(registrar.messenger(), registrar.view());registrar.platformViewRegistry().registerViewFactory("plugins.flutter.io/webview",factory);final WebViewFlutterPlugin instance = new WebViewFlutterPlugin(registrar.activity(),registrar.activeContext());registrar.addActivityResultListener(instance);FlutterCookieManager.registerWith(registrar.messenger());}

然后就是插件的内部逻辑了。

android webview 文件上传的思路

不论代码怎么变,Android webview文件上传始终是那个思路。

点击选择文件的时候,会调用 webviewClient 下的openFileChooser()(5.0及以上系统回调onShowFileChooser()),这个时候我们在openFileChooser方法中通过Intent打开系统相册或者支持该Intent的第三方应用来拿到选择文件的uri,最后在onActivityResult()中将选择的文件uri通过ValueCallbackonReceiveValue方法返回给WebView,然后通过js上传。

代码迁移

我在这里简单介绍一下代码迁移的思路方法。我贴出的代码直接拷贝可能不能用,因为在其他细节的地方我还做了一些类型的适配,在这里不一一介绍。在文章尾我会贴出我修改后的webview_flutter插件的代码,可以拿来直接用。

  1. 实现openFileChooer()方法:

在webview_flutter插件目录/plugins/webvi


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部