convertAndUpload function

Future<bool> convertAndUpload(
  1. File imageFile
)

Implementation

Future<bool> convertAndUpload(File imageFile) async {
  // setState(() {
  //   _isUploading = true;
  // });
  bool isCompleted = false;
  final tempDir = await getTemporaryDirectory();
  final targetPath = '${tempDir.path}/resized_image.png';

  final imageBytes = await imageFile.readAsBytes();
  final image = img.decodeImage(imageBytes.toList());

  final resizedImage = img.copyResize(image!, width: 480, height: 640);
  final resizedBytes = img.encodePng(resizedImage);

  await File(targetPath).writeAsBytes(resizedBytes);

  final resizedImageFile = File(targetPath);

  var stream = http.ByteStream(Stream.castFrom(resizedImageFile.openRead()));
  // http.ByteStream(DelegatingStream.typed(resizedImageFile.openRead()));

  var length = await resizedImageFile.length();
  // Set _isUploading to true to show the progress bar

  var url = Uri.parse('https://api.hair.mirrar.io/tryon/embed/');

  var request = http.MultipartRequest('POST', url);
  var multipartFile = new http.MultipartFile('user_image', stream, length,
      filename: basename(resizedImageFile.path));
  request.files.add(multipartFile);
  var response = await request.send();

  if (response.statusCode == 200) {
    String responseString =
        await response.stream.transform(utf8.decoder).join();
    Map<String, dynamic> responseData = jsonDecode(responseString);
    //print("checkString: $responseData");
    userImageId = responseData['user_image_id'].toString();
    //print('user_image_id: $userImageId');
    isCompleted = true;
    return isCompleted;
  } else {
    print('Request failed with status: ${response.statusCode}');
    throw Exception('API call failed with status: ${response.statusCode}');
  }
  // Set _isUploading to false to hide the progress bar
}