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();
   }, )
相关推荐
随心点儿6 小时前
js postMessage 实现跨域发送消息-应用示例
javascript·ecmascript·postmessage
一点一木6 小时前
从60首歌到1个网站:输入你的故事,还你一首歌
前端·github
IT_陈寒7 小时前
Vue这个特性差点让我加班到凌晨,谁懂啊
前端·人工智能·后端
kyriewen7 小时前
我让AI改一个bug——它偷偷动了5个我没让它碰的地方
前端·javascript·ai编程
遇乐的果园8 小时前
前端学习笔记-vue加载渲染优化
前端·笔记·学习
用户985033593288 小时前
OpenLayers 热力图从原理到 Vue 组件一键接入
前端
颜酱8 小时前
01 | 骨架搭建:FastAPI + Vue 跑通第一个 SSE 流式问答
前端·人工智能·后端
hoLzwEge8 小时前
解码 IDE 智能提示:jsconfig.json 辅助开发全攻略
前端·前端框架
leoZ2318 小时前
记忆系统与 Agent 定制完全指南(四):自定义 Agent 开发(一)
前端·chrome
慧一居士9 小时前
Element Plus 按需引入的配置使用说明和完整示例
前端·vue.js