当前位置: 首页 > article >正文

优雅解决webview_flutter不支持安卓选择图片视频文件问题

这个问题,网上一搜索,就是要去修改别人写好的插件。 搞Flutter开发,尽量不要去修改别人的插件 ,特别是像 webview_flutter 这种比较大的官方插件。 相信我,你拿捏不了它。 

主要问题就是: webview_flutter 在安卓上加载H5,如果需要上传图片、视频、文件,就点击没反应。 

解决办法 : 

不要去修改 webview_flutter_android 插件,这非常得不优雅。

直接在Flutter端,我们的代码层解决就好了。 看我代码,

第一步,先判断是安卓端,才解决这个问题, 先找到 AndroidWebViewController

if (Platform.isAndroid) {
      final myAndroidController = _controller.platform as AndroidWebViewController;
      myAndroidController.setOnShowFileSelector(_androidFilePicker);
    }

*这里的  _controller , 就是 WebViewController。 

 第二步, 实现 _androidFilePicker 方法: 

Future<List<String>> _androidFilePicker(FileSelectorParams params) async {
    FilePickerResult? result = await FilePicker.platform.pickFiles();

    if (result != null) {
      String filePath = result.files.single.path!;
      String fileName = result.files.single.name;

      // Convert the file to base64
      List<int> fileBytes = await File(filePath).readAsBytes();

      //convert filepath into uri
      final filePath1 = (await _getCacheDirectory()).uri.resolve(fileName);
      final file = await File.fromUri(filePath1).create(recursive: true);

      //convert file in bytes
      await file.writeAsBytes(fileBytes, flush: true);

      return [file.uri.toString()];
    }

    return [];
  }
  Future<Directory> _getCacheDirectory() async {
    // Use path_provider to get the temporary directory (cache directory)
    return await getTemporaryDirectory();
  }

这样就可以解决了。 是不是非常得优雅, 

当然了,  这里使用了 FilePicker ,你也可替换成你想用的,比如 ImagePicker, 或者别的;

你也可以判断一下 FileSelectorParams ,根据不同类型,来选用不同的 图片、视频、文件选择器。 

搞Flutter,我个人非常不喜欢去修改插件,一个是麻烦,二是插件如果有更新,还要去注意自己改的东西有没有受影响,非常麻烦。 


http://www.kler.cn/a/513785.html

相关文章:

  • 用JAVA写算法之输入输出篇
  • 网络协议如何确保数据的安全传输?
  • 使用tritonserver完成clip-vit-large-patch14图像特征提取模型的工程化。
  • Kotlin协程中withContext、async 和 launch 的区别
  • 包文件分析器 Webpack Bundle Analyzer
  • 【JavaSE】(8) String 类
  • 电梯系统的UML文档08
  • 微服务学习-Sentinel 限流保护服务
  • LLaMA Factory框架微调GLM-4大模型
  • Java线程池ThreadPoolExecutor封装工具类
  • 两份PDF文档,如何比对差异,快速定位不同之处?
  • npm install安装缓慢或卡住不动
  • 【整体介绍】
  • 有了TiDB,是否还需要“散装”大数据组件?
  • 利用开源AI智能名片2+1链动模式S2B2C商城小程序满足用户的自恋心理
  • 亚博microros小车-原生ubuntu支持系列:5-姿态检测
  • Linux——信号量和(环形队列消费者模型)
  • [春秋杯冬季赛2025] pwn复现
  • 基于微信小程序的健身房预约管理系统
  • MySQL面试题2025 每日20道【其四】
  • 【0x04】HCI_Connection_Request事件详解
  • C++ 类- 构造和析构
  • 专业辅助软件,独家开发版本,请珍惜使用
  • 【专题】为2025制定可付诸实践的IT战略规划报告汇总PDF洞察(附原数据表)
  • C++ ——— 模拟实现 vector 类
  • RTMP|RTSP播放器只解码视频关键帧功能探讨