Upload image to server flutter (Image picker)

Viewed 284

I want to upload an image to server

I'm using the Image Picker plugin to pick image

this code work without any exception on samsung tab but Catch error on xiaomi phone.

the onImageButtonPressed run in all devices.

Future<void> onImageButtonPressed({
    BuildContext? context,
  }) async {
    try {
      final XFile? pickedFile =
      await picker.pickImage(source: ImageSource.camera);
      if (pickedFile != null) {
        imageFileList!.add(pickedFile);
        logger.i('done , image picked');
          File image = File(pickedFile.path);
          logger.i(image); // on xiaomi and samsung log the same result "File: '/data/user/0/com.grand.technology.driver/cache/8227d4f4-df70-441d-9677-b95b64b1bf323122241454085685040.jpg'"
          await uploadOrderPic(order.id.toString(), image);
      }
      update();
    } catch (e) {
      pickImageError = e;
      logger.e(e);
      update();
    }
  }

but the exception happen here

  uploadOrderPic(String id, File image) async {
    uploading.value = true;
    var response = await OrderApi()
        .uploadOrderPic(orderID: id, image: image)
        .then((value) {
      logger.i(value.data); //samsung tab log Instance of 'UploadedImage' but xiaomi phone catch error
      uploading.value = false;
      var uploadedImage = (value.data) as UploadedImage;
      imageURLsList.add(uploadedImage.url!);
    }).catchError((error) {
      Get.snackbar('Failed', 'Uploading Image Failed',
          backgroundColor: redColor);
      logger.e(error); // type 'Null' is not a subtype of type 'UploadedImage' in type cast 
    });
    try {
    } on TimeoutException {
      Get.snackbar(
          'Connection Error', 'Check Your Internet Connection Please!');
    } catch (e) {
      logger.e(e);
    }
  }

this code upload image to server

  Future<ApiResponse> uploadOrderPic(
      {required String orderID,
      required File image}) async {
    ApiResponse apiResponse = ApiResponse();
    var token = await getToken();
    try {
      var request = http.MultipartRequest("POST", Uri.parse(uploadPicUrl));
      request.files.add(await http.MultipartFile.fromPath('image', image.path));
      request.fields['id'] = orderID;
      request.headers[HttpHeaders.authorizationHeader] = 'Bearer $token';
      var response =
          await request.send().then((value) => http.Response.fromStream(value));
      apiResponse.data =
          UploadedImage.fromJson(jsonDecode(response.body)['data']);
    } catch (e) {
      logger.e(e);
      apiResponse.error = serverError;
    }
    return apiResponse;
  }
0 Answers
Related