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

Posted 一叶飘舟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flutter通过 GlobalKey 获取界面任意元素坐标尺寸相关的知识,希望对你有一定的参考价值。

最初:

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

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;

以上是关于flutter通过 GlobalKey 获取界面任意元素坐标尺寸的主要内容,如果未能解决你的问题,请参考以下文章

Flutter中GlobalKey的用法

Flutter 局部Widget刷新

Flutter 局部Widget刷新

Flutter 局部Widget刷新

Flutter:多个小部件使用相同的 GlobalKey

Flutter 获取某个控件的坐标