我在Flutter上为我的应用制作了图片裁剪器。从视觉上讲,它可以正常工作。但是生成的“裁剪”图像是错误的。
这是开始执行该过程所调用的函数。它会打开相机并等待用户拍照。
Future getImageFromCamera({BuildContext context}) async {
var imagePicker = await ImagePicker.pickImage(source: ImageSource.camera);
final sampleFile = await ImageCrop.sampleImage(
file: imagePicker,
preferredSize: context.size.longestSide.ceil(),
);
image = sampleFile;
openAddEntryDialog(
context: context, child: cropperDialog(context: context, image: image));
}
在这里我打开一个全屏对话框
void openAddEntryDialog({BuildContext context, Widget child}) {
Navigator.of(context).push(new MaterialPageRoute<Null>(
builder: (BuildContext context) => child, fullscreenDialog: true));
}
这是充当全屏对话框的Widget,它具有进行裁剪的按钮。
Widget cropperDialog({BuildContext context, File image}) {
return Scaffold(
backgroundColor: Colors.black.withOpacity(0.5),
appBar: AppBar(
backgroundColor: Colors.transparent,
elevation: 0,
actions: <Widget>[
FlatButton(
color: Colors.transparent,
onPressed: () => _cropImage(context),
child: Text(
'Recortar',
style: TextStyle(
color: Colors.white,
fontFamily: 'BrutalMedium',
fontSize: 14.0,
),
),
),
],
),
body: Container(
width: double.infinity,
height: double.infinity,
child: Crop(
key: cropKey,
image: FileImage(image),
aspectRatio: 1.0 / 1.0,
),
),
);
}
这是应该进行实际裁剪的功能
Future<void> _cropImage(BuildContext context) async {
final area = cropKey.currentState.area;
if (area == null) {
return;
}
croppedImage = await ImageCrop.cropImage(
file: image,
area: area,
);
image = croppedImage;
notifyListeners();
Navigator.of(context).pop();
}
生成的图像应为正方形,但最终为垂直矩形。有人看到我在做什么错吗?谢谢。