refactor: action buttons and scroll to bottom ui/ux
This commit is contained in:
40
lib/shared/widgets/measure_size.dart
Normal file
40
lib/shared/widgets/measure_size.dart
Normal file
@@ -0,0 +1,40 @@
|
||||
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);
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user