FlutterでレイアウトしたWidgetの表示されている座標を取得したかったので調べました。RenderBoxを使うとできました。RenderBoxにアクセスするためにはWidgetにKeyを渡す必要があります。なるほど、Keyってこういう時に使うんですね。
class MyWidget extends StatelessWidget {
final widgetKey = GlobalKey();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('My app'),
),
body: Stack(
children: <Widget>[
Positioned(
right: 100,
bottom: 200,
child: FlutterLogo(
key: widgetKey, // 座標を取得したいWidgetにkeyを付けると、後から参照できる
size: 64,
),
),
],
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// widgetKeyを付けたWidgetのグローバル座標を取得する
final RenderBox box = widgetKey.currentContext.findRenderObject();
final globalOffset = box.localToGlobal(Offset.zero);
print(globalOffset);
},
child: Icon(Icons.add),
),
);
}
}