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

flutter 专题 六十八 Flutter 多图片上传

使用Flutter进行应用开发时,经常会遇到选图、拍照等需求。如果要求不高,Flutter图库选择可以使用官方提供的image_picker,如果需要多选,那么可以使用multi_image_picker插件库。multi_image_picker库支持图库管理,多选,拍照,当然还可以自定义资源管理界面。

multi_image_picker的使用也比较简单,首先,需要在pubspec.yaml配置文件中添加multi_image_picker库的依赖,如下所示。

dependencies:
  dio: ^3.0.9
  multi_image_picker: ^4.7.10

然后,我们编写逻辑代码,如下所示。

openMultiPhoto() async {
    List<Asset> assets = await MultiImagePicker.pickImages(
        maxImages: 9,
        enableCamera: true,
      materialOptions:MaterialOptions(
          startInAllView:true,
          allViewTitle:'所有照片',
          actionBarColor:'#2196F3',
          textOnNothingSelected:'没有选择照片'
      ),
    );

    if (assets != null && assets.length > 0) {
      for (int i = 0; i < assets.length; i ++) {
        Asset asset = assets[i];
        uploadFile(asset);
      };
    }
  }

  //上传服务器
  uploadFile(image) async {
    ByteData data =await image.getByteData();
    final buffer = data.buffer;
    FormData form =FormData.fromMap({
      //后端接口的参数名称
      'name': image.name,
      'file':MultipartFile.fromBytes(buffer.asUint8List(data.offsetInBytes, data.lengthInBytes)),
    });
    String serverPath='';
    //其他上传参数
    Map<String, dynamic> params = Map();
    await Dio().post(serverPath, data: form,queryParameters: params);
  }

  //ByteData转换成File
  Future<void> writeToFile(ByteData data, String path) {
    final buffer = data.buffer;
    return  File(path).writeAsBytes(
        buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
  }

然后,我们做一个测试的按钮,代码如下。

MyButton(text: '多图片选择', btnColors: Colors.blue,
        onPressed: () {
          openMultiPhoto();
   }, )
http://www.dtcms.com/a/115566.html

相关文章:

  • C++:函数
  • AF3 OpenFoldDataLoader类解读
  • PostgreSQL 一文从安装到入门掌握基本应用开发能力!
  • 【C++】--- string的使用
  • go游戏后端开发24:写完赢三张游戏
  • C++中如何使用STL中的list定义一个双向链表,并且实现增、删、改、查操作
  • #SVA语法滴水穿石# (012)关于 first_match、throughout、within 的用法
  • 华为交换机配置指南:基础到高级命令详解
  • 51单片机使用定时器实现LCD1602的时间显示(STC89C52RC)
  • 迭代器运算详解(四十二)
  • OSI模型中协议数据单元(PDU)
  • 21 天 Python 计划:MySQL库相关操作
  • 深信服护网蓝初面试题
  • TYUTJava阶段测试
  • Spring 概念
  • 初探:简道云系统架构及原理
  • 定时器的实现方案:红黑树、最小堆与时间轮
  • 【蓝桥杯速成】日期问题(填空题) + 真题讲解 python
  • POSIX线程库
  • 程序化广告行业(65/89):AdX/SSP系统深度剖析与实战要点
  • 《操作系统真象还原》第五章(3)——载入内核
  • JAVA学习-练习试用Java实现“实现一个Hadoop MapReduce任务,对大数据集中的数值进行排序和筛选”
  • 23种设计模式-行为型模式-中介者
  • 可以使用费曼学习法阅读重要的书籍
  • 【学Rust写CAD】34 精确 Alpha 混合函数(argb.rs补充方法)
  • 路由器的 WAN(广域网)口 和 LAN(局域网)口
  • 【微机及接口技术】- 第五章 输入输出与接口技术(下)
  • uniapp微信小程序引入vant组件库
  • docker部署rabbitmq
  • [刷题总结] 双指针 滑动窗口