1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-11-26 06:49:22 +00:00

Force square account image

This commit is contained in:
Pierre HUBERT 2021-03-13 18:11:28 +01:00
parent e70aaabbc9
commit f8910c8f8b
5 changed files with 14 additions and 6 deletions

View File

@ -8,6 +8,7 @@ import 'package:file_picker/file_picker.dart';
import 'package:filesize/filesize.dart'; import 'package:filesize/filesize.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:image_cropper/image_cropper.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'package:mime/mime.dart'; import 'package:mime/mime.dart';
@ -91,6 +92,7 @@ Future<BytesFile> showPickFileDialog({
List<String> allowedMimeTypes, List<String> allowedMimeTypes,
int imageMaxWidth, int imageMaxWidth,
int imageMaxHeight, int imageMaxHeight,
CropAspectRatio aspectRatio,
}) async { }) async {
assert(allowedMimeTypes != null); assert(allowedMimeTypes != null);
@ -133,7 +135,7 @@ Future<BytesFile> showPickFileDialog({
file = BytesFile(image.path.split("/").last, await image.readAsBytes()); file = BytesFile(image.path.split("/").last, await image.readAsBytes());
file = await showImageCropper(context, file); file = await showImageCropper(context, file, aspectRatio: aspectRatio);
break; break;

View File

@ -17,8 +17,8 @@ import '../../utils/files_utils.dart';
/// Attempt to crop image /// Attempt to crop image
/// ///
/// Return original image in case of error / if the user did not crop the image /// Return original image in case of error / if the user did not crop the image
Future<BytesFile> showImageCropper( Future<BytesFile> showImageCropper(BuildContext context, BytesFile source,
BuildContext context, BytesFile source) async { {CropAspectRatio aspectRatio}) async {
assert(context != null); assert(context != null);
assert(source != null); assert(source != null);
@ -32,6 +32,7 @@ Future<BytesFile> showImageCropper(
File cropped = await ImageCropper.cropImage( File cropped = await ImageCropper.cropImage(
sourcePath: file.absolute.path, sourcePath: file.absolute.path,
compressFormat: ImageCompressFormat.png, compressFormat: ImageCompressFormat.png,
aspectRatio: aspectRatio,
androidUiSettings: AndroidUiSettings( androidUiSettings: AndroidUiSettings(
toolbarColor: Colors.black, toolbarColor: Colors.black,
toolbarTitle: tr("Crop Photo"), toolbarTitle: tr("Crop Photo"),

View File

@ -12,6 +12,7 @@ import 'package:comunic/utils/intl_utils.dart';
import 'package:comunic/utils/ui_utils.dart'; import 'package:comunic/utils/ui_utils.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:identicon/identicon.dart'; import 'package:identicon/identicon.dart';
import 'package:image_cropper/image_cropper.dart';
import 'package:random_string/random_string.dart'; import 'package:random_string/random_string.dart';
import 'package:settings_ui/settings_ui.dart'; import 'package:settings_ui/settings_ui.dart';
@ -160,7 +161,8 @@ class _AccountImageSettingsScreenState
/// Upload a new account image /// Upload a new account image
void _uploadAccountImage() async { void _uploadAccountImage() async {
try { try {
final image = await pickImage(context); final image = await pickImage(context,
aspectRatio: CropAspectRatio(ratioX: 5, ratioY: 5));
if (image == null) return; if (image == null) return;

View File

@ -254,7 +254,7 @@ class _PostCreateFormWidgetState extends State<PostCreateFormWidget> {
}); });
} catch (e, s) { } catch (e, s) {
logError(e, s); logError(e, s);
snack(context, tr("Failed to pick image for post!")); snack(context, tr("Failed to pick an image for the post!"));
} }
} }

View File

@ -1,6 +1,7 @@
import 'dart:io'; import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:image_cropper/image_cropper.dart';
import 'package:path/path.dart' as path; import 'package:path/path.dart' as path;
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:random_string/random_string.dart'; import 'package:random_string/random_string.dart';
@ -15,12 +16,14 @@ import '../ui/dialogs/pick_file_dialog.dart';
/// Ask the user to choose an image, either from the gallery or using the camera /// Ask the user to choose an image, either from the gallery or using the camera
/// ///
/// Throws an exception null in case of failure /// Throws an exception null in case of failure
Future<BytesFile> pickImage(BuildContext context) async { Future<BytesFile> pickImage(BuildContext context,
{CropAspectRatio aspectRatio}) async {
return await showPickFileDialog( return await showPickFileDialog(
context: context, context: context,
allowedMimeTypes: ["image/png", "image/jpeg", "image/gif"], allowedMimeTypes: ["image/png", "image/jpeg", "image/gif"],
imageMaxHeight: 10000, imageMaxHeight: 10000,
imageMaxWidth: 10000, imageMaxWidth: 10000,
aspectRatio: aspectRatio,
); );
} }