Класс RenderObject
Класс RenderObject стоит под виджетом в дереве элементов.
Его возвращает
findRenderObject,
когда элемент уже прошёл раскладку.
До первого кадра метод может вернуть null.
Синтаксис
context.findRenderObject()
Пример
Давайте после кадра прочитать размер блока:
import 'package:flutter/material.dart';
void main()
{
runApp(const Box());
}
class Box extends StatefulWidget
{
const Box({super.key});
@override
State<Box> createState() => _BoxState();
}
class _BoxState extends State<Box>
{
var label = 'abcde';
final key = GlobalKey();
@override
void initState()
{
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
var object = key.currentContext?.findRenderObject();
if (object is RenderBox) {
setState(() {
label = object.size.width.toStringAsFixed(0);
});
}
});
}
@override
Widget build(BuildContext context)
{
return MaterialApp(
home: Scaffold(
body: Center(
child: SizedBox(
key: key,
width: 40,
child: Text(label),
),
),
),
);
}
}
После первого кадра на экране ширина блока, 40.
Смотрите также
-
метод
findRenderObject,
который достаёт этот узел из контекста -
класс
BuildContext,
место виджета в дереве -
класс
GlobalKey,
через который берут контекст чужого виджета -
виджет
SizedBox,
размер которого можно прочитать после раскладки