import 'dart:io'; import 'package:comunic/models/api_request.dart'; import 'package:comunic/utils/intl_utils.dart'; import 'package:comunic/utils/log_utils.dart'; import 'package:comunic/utils/ui_utils.dart'; import 'package:flutter/material.dart'; import 'package:image_cropper/image_cropper.dart'; import '../../models/api_request.dart'; import '../../utils/files_utils.dart'; /// Image cropper route /// /// @author Pierre Hubert /// Attempt to crop image /// /// Return original image in case of error / if the user did not crop the image Future showImageCropper(BuildContext context, BytesFile source, {CropAspectRatio aspectRatio}) async { assert(context != null); assert(source != null); File file; File cropped; try { file = await generateTemporaryFile(); await file.writeAsBytes(source.bytes); File cropped = await ImageCropper.cropImage( sourcePath: file.absolute.path, compressFormat: ImageCompressFormat.png, aspectRatio: aspectRatio, androidUiSettings: AndroidUiSettings( toolbarColor: Colors.black, toolbarTitle: tr("Crop Photo"), toolbarWidgetColor: Colors.white, ), ); if (cropped == null) return null; return BytesFile("cropped.png", await cropped.readAsBytes()); } catch (e, s) { logError(e, s); snack(context, tr("Failed to execute image cropper!")); return source; } finally { if (file != null && await file.exists()) file.delete(); if (cropped != null && await cropped.exists()) cropped.delete(); } }