Flutter中获取widget尺寸及位置信息

一、获取屏幕宽高
1.1 MediaQuery
获取屏幕尺寸。单位dp
MediaQuery.of(context).size // Size(414.0, 896.0)
1
获取设备像素密度
MediaQuery.of(context).devicePixelRatio; // 2.0
1
1.2 window
使用window需要引入dart:ui库。

获取屏幕尺寸。单位px(px = dp * 像素密度)
window.physicalSize; // Size(828.0, 1792.0)
1
获取设备像素密度
window.devicePixelRatio; // 2.0
1
二、获取widget尺寸及位置
    使用widget中的key可以获取widget的尺寸及位置信息。

class GetWidgetSize extends StatelessWidget {
  GlobalKey _key1 = GlobalKey();
  GlobalKey _key2 = GlobalKey();
  GlobalKey _key3 = GlobalKey();

  @override
  Widget build(BuildContext context) {
  	// 监听widget渲染完成
	WidgetsBinding.instance.addPostFrameCallback((duration){
      RenderBox box = _key1.currentContext.findRenderObject();
      // _key1.currentContext.size; Size(200.0, 100.0)
      print(box.size); // Size(200.0, 100.0)
      print(box.localToGlobal(Offset.zero)); // Offset(107.0, 100.0)
    });

    // TODO: implement build
    return Center(
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          Container(
            key: _key1,
            constraints: BoxConstraints.tight(Size(200, 100)),
            color: Colors.red,
          ),
          Container(
            key: _key2,
            margin: EdgeInsets.symmetric(vertical: 30.0),
            constraints: BoxConstraints.tight(Size(200, 100)),
            color: Colors.yellow,
          ),
          Container(
            key: _key3,
            constraints: BoxConstraints.tight(Size(200, 100)),
            color: Colors.blue,
          ),
        ],
      ),
    );
  }
}

————————————————
版权声明:本文为CSDN博主「MAXLZ」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33635385/article/details/102739309

 

你可能感兴趣的:(【Flutter点滴知识,】)