v5.0.2measure_size
一个在大小改变时触发回调的控件
40喜欢 1.2万近 30 天下载160Pub 分数
AndroidiOSWebmacOSWindowsLinux
一个有状态的控件,可在子控件渲染后立即测量其大小。
{"sdk":"flutter"}^6.0.0{"sdk":"flutter"}以下为英文项目原文快照,最新内容请访问 GitHub。
A Flutter package for efficiently measuring widget sizes and building size-aware, adaptive layouts with minimal overhead.
https://raw.githubusercontent.com/mhrst/measure_size/HEAD/demo.gif
MeasureSize |
MeasureSizeBuilder |
|
|---|---|---|
| Purpose | Monitor size changes | Prototype-driven layout |
| Callback timing | Post-frame | During layout (invokeLayoutCallback) |
| Measurements | Single widget | Multiple prototypes |
| Use case | Reactive to size changes | Proactive layout decisions |
| Complexity | Simple | Advanced |
| Performance | Good | Excellent (single pass) |
| PreferredSizeWidget limitation | Does not work | First frame problematic |
import 'package:measure_size/measure_size.dart';
Widget child = Text('Lorem ipsum dolor sit amet');
MeasureSize(
onChange: (Size newSize) {
/// [newSize] will be the displayed size of [Widget child]
},
child: child,
);
MeasureSizeBuilder<String>(
prototypeConstraints: (constraints) => BoxConstraints(
minWidth: 0,
maxWidth: constraints.maxWidth,
minHeight: 0,
maxHeight: double.infinity,
),
prototypes: [
PrototypeId(
id: 'lorem',
child: child,
),
],
builder: (context, sizes) {
// [sizes['lorem']] will be the layed out size of [Widget child]
return child;
}
);
MeasureSizeWidget child - This widget will be displayed and and measured.void onChange(Size newSize) - A callback that is fired exactly once after the first frame of the child widget is rendered.MeasureSizeBuilder<T>List<PrototypeId<T>> prototypes - Wrap widgets you'd like to measure with PrototypeId and provide a unique identifier for each widget.PrototypeWidgetBuilder<T> builder - A builder function that contains the sizes of all prototypes.PrototypeConstraintCalculator prototypeConstraints - Constraints to be assigned to each prototype widget.A demonstration can be found in the example directory. To run the example:
flutter run example/main.dart