1.   Flutter开发需要做一个图片上传功能(image_picker)。
    
      showPicker() {
        FocusScope.of(context).requestFocus(FocusNode());
        //底部弹出
        showModalBottomSheet(
            context: context,
            builder: (BuildContext con) => Container(
                  height: 160,
                  padding: EdgeInsets.all(20),
                  color: Colors.white,
                  child: Column(
                    children: [createItem(true, "拍照"), createItem(false, "相册")],
                  ),
                ));
      }
    
    //创建item
      Widget createItem(bool state, String name) {
        return GestureDetector(
            onTap: () {
              openPicker(state);
            },
            child: ListTile(
              leading: Icon(state ? Icons.camera : Icons.image),
              title: Text(name),
            ));
      }
    
      openPicker(bool state) async {
        Navigator.pop(context);
        var picker = ImagePicker();
        XFile photo = await picker.pickImage(
            source: state ? ImageSource.camera : ImageSource.gallery);
        if (photo != null) {
          var imageCompressAndGetFile =
              await ImageCompressUtil.imageCompressAndGetFile(File(photo.path));
    
          var formData = FormData.fromMap({
            'file': await MultipartFile.fromFile(imageCompressAndGetFile.path,
                filename: photo.name)
          });
          uploadFile(formData);
        }
      }
    
      uploadFile(formData) {
        HttpManager.getInstance().uploadImage(formData,
            (Map<String, dynamic> data) {
          if (data["code"] == 0) {
            String url = data["data"];
            switchOcrType(url);
            setState(() {
              imageUrl = url;
            });
          }
        });
      }
  2. 图片压缩(flutter_image_compress)
      static Future<File> imageCompressAndGetFile(File file) async {
        if (file.lengthSync() < 200 * 1024) {
          return file;
        }
        var quality = 100;
        if (file.lengthSync() > 4 * 1024 * 1024) {
          quality = 50;
        } else if (file.lengthSync() > 2 * 1024 * 1024) {
          quality = 60;
        } else if (file.lengthSync() > 1 * 1024 * 1024) {
          quality = 70;
        } else if (file.lengthSync() > 0.5 * 1024 * 1024) {
          quality = 80;
        } else if (file.lengthSync() > 0.25 * 1024 * 1024) {
          quality = 90;
        }
        var dir = await path_provider.getTemporaryDirectory();
        var targetPath = dir.absolute.path +"/"+DateTime.now().millisecondsSinceEpoch.toString()+ ".jpg";
    
        var result = await FlutterImageCompress.compressAndGetFile(
          file.absolute.path,
          targetPath,
          minWidth: 600,
          quality: quality,
          rotate: 0,
        );
    
        return result;
      }
  3. 图片上传(dio)
    
      uploadImage(FormData formData, Function successCallBack) async {
        EasyLoading.show(status: '上传中...');
        try {
          var response = await _dio.post(UrlPath.UPLOADURL, data: formData);
          successCallBack(response.data);
          EasyLoading.dismiss();
        } catch (e) {
          EasyLoading.dismiss();
        }
      }

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐