Add margin when cropping to work with gesture navigation

This commit is contained in:
Ming Ming 2023-03-26 18:49:46 +08:00
parent 32447a310d
commit 43d1df9aa2
2 changed files with 35 additions and 13 deletions

View file

@ -12,7 +12,7 @@ part 'crop_controller.g.dart';
/// Crop editor
///
/// This widget only work when width == device width!
class CropController extends StatefulWidget {
class CropController extends StatelessWidget {
const CropController({
Key? key,
required this.image,
@ -21,7 +21,33 @@ class CropController extends StatefulWidget {
}) : super(key: key);
@override
createState() => _CropControllerState();
Widget build(BuildContext context) {
return Padding(
// to make cropping works on phone using gesture navigation
padding: const EdgeInsets.symmetric(horizontal: 32),
child: _WrappedCropController(
image: image,
initialState: initialState,
onCropChanged: onCropChanged,
),
);
}
final Rgba8Image image;
final TransformArguments? initialState;
final ValueChanged<TransformArguments>? onCropChanged;
}
class _WrappedCropController extends StatefulWidget {
const _WrappedCropController({
Key? key,
required this.image,
required this.initialState,
this.onCropChanged,
}) : super(key: key);
@override
State<StatefulWidget> createState() => _WrappedCropControllerState();
final Rgba8Image image;
final TransformArguments? initialState;
@ -29,7 +55,7 @@ class CropController extends StatefulWidget {
}
@npLog
class _CropControllerState extends State<CropController> {
class _WrappedCropControllerState extends State<_WrappedCropController> {
@override
initState() {
super.initState();
@ -223,14 +249,10 @@ class _CropControllerState extends State<CropController> {
final renderObj = context.findRenderObject() as RenderBox?;
if (renderObj?.hasSize == true && renderObj!.size.width > 16) {
// the renderbox height is always max
if (renderObj.size.width == MediaQuery.of(context).size.width) {
final height =
renderObj.size.width / widget.image.width * widget.image.height;
_size = Size(renderObj.size.width, height);
_offsetY = (renderObj.size.height - height) / 2;
} else {
_size = renderObj.size;
}
final height =
renderObj.size.width / widget.image.width * widget.image.height;
_size = Size(renderObj.size.width, height);
_offsetY = (renderObj.size.height - height) / 2;
}
_log.info("[_tryUpdateSize] size = $_size, offsetY: $_offsetY");
if (_size == null) {

View file

@ -6,10 +6,10 @@ part of 'crop_controller.dart';
// NpLogGenerator
// **************************************************************************
extension _$_CropControllerStateNpLog on _CropControllerState {
extension _$_WrappedCropControllerStateNpLog on _WrappedCropControllerState {
// ignore: unused_element
Logger get _log => log;
static final log =
Logger("widget.image_editor.crop_controller._CropControllerState");
Logger("widget.image_editor.crop_controller._WrappedCropControllerState");
}