其实就是通过key获取到currentContext,再获取到size
//获取Widget Size
class WidgetSize extends StatefulWidget {
const WidgetSize({Key? key, required this.onChange, required this.child}) : super(key: key);
final Function onChange;
final Widget child;
@override
State<WidgetSize> createState() => _WidgetSizeState();
}
class _WidgetSizeState extends State<WidgetSize> {
var widgetKey = GlobalKey();
var oldSize;
@override
Widget build(BuildContext context) {
SchedulerBinding.instance.addPostFrameCallback(postFrameCallBack);
return Container(
key: widgetKey,
child: widget.child,
);
}
void postFrameCallBack(_) {
var context = widgetKey.currentContext;
if (context == null) return;
var newSize = context.size;
print("$newSize-$oldSize");
if (oldSize == newSize) return;
oldSize = newSize;
widget.onChange(newSize);
}
}
使用:
Column(
children: [
WidgetSize(
onChange: (Size size) {
setState(() {
textSize = size;
});
},
child: const CenterText('获取Size')),
CenterText('result:$textSize'),
],
)