1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- part of cool_ui;
- class WidgetUtils {
- bool _hasMeasured = false;
- double _width;
- double _height;
- /// Widget rendering listener.
- /// Widget渲染监听
- /// context: Widget context
- /// isOnce: true,Continuous monitoring false,Listen only once.
- /// onCallBack: Widget Rect CallBack
- void asyncPrepare(
- BuildContext context, bool isOnce, ValueChanged<Rect> onCallBack) {
- if (_hasMeasured) return;
- WidgetsBinding.instance.addPostFrameCallback((Duration timeStamp) {
- RenderBox box = context.findRenderObject();
- if (box != null && box.semanticBounds != null) {
- if (isOnce) _hasMeasured = true;
- double width = box.semanticBounds.width;
- double height = box.semanticBounds.height;
- if (_width != width || _height != height) {
- _width = width;
- _height = height;
- if (onCallBack != null) onCallBack(box.semanticBounds);
- }
- }
- });
- }
- ///get Widget Bounds (width, height, left, top, right, bottom and so on).Widgets must be rendered completely.
- ///获取widget Rect
- static Rect getWidgetBounds(BuildContext context) {
- RenderBox box = context.findRenderObject();
- return (box != null && box.semanticBounds != null)
- ? box.semanticBounds
- : Rect.zero;
- }
- ///Get the coordinates of the widget on the screen.Widgets must be rendered completely.
- ///获取widget在屏幕上的坐标,widget必须渲染完成
- static Offset getWidgetLocalToGlobal(BuildContext context) {
- RenderBox box = context.findRenderObject();
- return box == null ? Offset.zero : box.localToGlobal(Offset.zero);
- }
- }
|