flutter通过 GlobalKey 获取界面任意元素坐标尺寸

这篇博客介绍了在Flutter中如何获取屏幕任意元素的坐标和尺寸。通过使用 GlobalKey 和扩展方法,开发者可以轻松地获取Widget的RenderBox,进一步得到位置和大小信息,这对于实现特定交互或布局调整非常有用。
摘要由CSDN通过智能技术生成

最初:

需求开发中遇到要获取屏幕任意元素坐标尺寸的功能,最终实现如下:

1. example:

//...
GlobalKey _globalKey = GlobalKey();

@override
Widget build(BuildContext context) {
    //...
    ElevatedButton.icon(
      icon: Icon(Icons.send),
      label: Text("发送"),
      // onPressed: () => ddlog('pressed'),
      key: _globalKey,
      onPressed: (){
        // _showCustomPopView();
        ddlog(_globalKey.position());// Offset(143.5, 117.0)
        ddlog(_globalKey.size);// Size(88.0, 48.0)
      },
    ),
    //...
}

2. extension 封装:

import 'package:flutter/material.dart';

extension BuildContextExt on BuildContext {

  /// 获取当前组件的 RenderBox
  RenderBox? renderBox() {
    return this.findRenderObject() is RenderBox ? (this.findRenderObject() as RenderBox) : null;
  }

  /// 获取当前组件的 position
  Offset? position({Offset offset = Offset.zero}) {
    return this.renderBox()?.localToGlobal(offset);
  }
}


extension GlobalKeyExt on GlobalKey{

  /// 获取当前组件的 RenderBox
  RenderBox? renderBox() => this.currentContext?.renderBox();

  /// 获取当前组件的 position
  Offset? position({Offset offset = Offset.zero}) => this.currentContext?.position(offset: offset);

  /// 获取当前组件的 Size
  Size? get size  => this.currentContext?.size;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值