import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; class WidgetSize extends StatefulWidget { const WidgetSize({ required this.onChange, required this.child, final super.key, }); final Widget child; final Function onChange; @override State createState() => _WidgetSizeState(); } class _WidgetSizeState extends State { @override Widget build(final BuildContext context) { SchedulerBinding.instance.addPostFrameCallback(postFrameCallback); return Container( key: widgetKey, child: widget.child, ); } var widgetKey = GlobalKey(); Size? oldSize; void postFrameCallback(_) { final context = widgetKey.currentContext; if (context == null) { return; } ; final newSize = context.size; if (oldSize == newSize) { return; } oldSize = newSize; widget.onChange(newSize); } }