import 'package:flutter/rendering.dart'; import 'package:flutter/widgets.dart'; /// Meldet die gezeichnete Größe des Kindes, sobald sie sich ändert (z. B. /// die Höhe der schwebenden Eingabeleiste, die mit Antwort-Leiste oder /// mehrzeiligem Text wächst). Die Meldung kommt nach dem Layout, damit der /// Empfänger gefahrlos setState aufrufen kann. class MeasureSize extends SingleChildRenderObjectWidget { const MeasureSize({super.key, required this.onChange, super.child}); final ValueChanged onChange; @override RenderObject createRenderObject(BuildContext context) => _MeasureSizeRender(onChange); @override void updateRenderObject(BuildContext context, RenderObject renderObject) { (renderObject as _MeasureSizeRender).onChange = onChange; } } class _MeasureSizeRender extends RenderProxyBox { _MeasureSizeRender(this.onChange); ValueChanged onChange; Size? _last; @override void performLayout() { super.performLayout(); final size = this.size; if (size == _last) return; _last = size; WidgetsBinding.instance.addPostFrameCallback((_) => onChange(size)); } }