Files
iiEsaywebUIapp/lib/shared/widgets/measure_size.dart
2025-09-16 18:15:44 +05:30

43 lines
1.0 KiB
Dart

import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';
typedef OnWidgetSizeChange = void Function(Size size);
class MeasureSize extends SingleChildRenderObjectWidget {
final OnWidgetSizeChange onChange;
const MeasureSize({super.key, required this.onChange, required Widget child})
: super(child: child);
@override
RenderObject createRenderObject(BuildContext context) {
return MeasureSizeRenderObject(onChange);
}
@override
void updateRenderObject(
BuildContext context,
covariant MeasureSizeRenderObject renderObject,
) {
renderObject.onChange = onChange;
}
}
class MeasureSizeRenderObject extends RenderProxyBox {
MeasureSizeRenderObject(this.onChange);
OnWidgetSizeChange onChange;
Size? _oldSize;
@override
void performLayout() {
super.performLayout();
Size? newSize = child?.size;
if (_oldSize == newSize || newSize == null) return;
_oldSize = newSize;
WidgetsBinding.instance.addPostFrameCallback((_) {
onChange(newSize);
});
}
}