marco.pms.mobile/lib/widgets/size_observer.dart
2025-04-02 19:11:36 +05:30

42 lines
880 B
Dart

import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
typedef SizeCallback = void Function(Size size);
class _RenderSizeObserver extends RenderProxyBox {
_RenderSizeObserver({
RenderBox? child,
required this.onLayoutChangedCallback,
}) : super(child);
final SizeCallback onLayoutChangedCallback;
Size? _oldSize;
@override
void performLayout() {
super.performLayout();
if (size != _oldSize) {
onLayoutChangedCallback(size);
}
_oldSize = size;
}
}
class SizeObserver extends SingleChildRenderObjectWidget {
const SizeObserver({
super.key,
required Widget super.child,
required this.onSized,
});
final SizeCallback onSized;
@override
_RenderSizeObserver createRenderObject(BuildContext context) {
return _RenderSizeObserver(
onLayoutChangedCallback: onSized,
);
}
}