1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-11-30 00:36:28 +00:00
comunicmobile/lib/ui/routes/image_editor_route.dart

55 lines
1.5 KiB
Dart

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<BytesFile> 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();
}
}