Skip to content

Instantly share code, notes, and snippets.

@SashaKryzh
Created July 7, 2022 21:30
Show Gist options
  • Save SashaKryzh/7d668cf94203d5952650bb90ddc457e8 to your computer and use it in GitHub Desktop.
Save SashaKryzh/7d668cf94203d5952650bb90ddc457e8 to your computer and use it in GitHub Desktop.
Flutter Measure Size widget
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
class MeasureSizeRenderObject extends RenderProxyBox {
MeasureSizeRenderObject(this.onChanged);
Size? oldSize;
final ValueChanged<Size> onChanged;
@override
void performLayout() {
super.performLayout();
final newSize = child!.size;
if (oldSize == newSize) {
return;
}
oldSize = newSize;
WidgetsBinding.instance?.addPostFrameCallback((_) {
onChanged(newSize);
});
}
}
class MeasureSize extends SingleChildRenderObjectWidget {
const MeasureSize({
required this.onChanged,
required Widget child,
Key? key,
}) : super(key: key, child: child);
final ValueChanged<Size> onChanged;
@override
RenderObject createRenderObject(BuildContext context) {
return MeasureSizeRenderObject(onChanged);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment