In the code below, a row of two 300x300 boxes (_Box
) wrapped with FittedBox
shrinks to fit in the screen. As a result, each box becomes smaller than 300x300.
However, if I get the width of a box in the build()
method of _Box
using RenderBox.size
and LayoutBuilder()
, the obtained size is 300.0
and Infinity
respectively.
How can I get the actual displayed size?
I'd like to get it inside the _Box
class, without it getting passed from the parent.
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: SafeArea(
child: FittedBox(
child: Row(
children: <Widget>[
_Box(Colors.red),
_Box(Colors.orange),
],
),
),
),
),
);
}
}
class _Box extends StatelessWidget {
const _Box(this.color);
final Color color;
@override
Widget build(BuildContext context) {
RenderBox renderBox = context.findRenderObject();
print(renderBox?.size?.width); // 300.0
return LayoutBuilder(
builder: (_, constraints) {
print(constraints.maxWidth); // Infinity
return Container(
width: 300,
height: 300,
color: color,
);
},
);
}
}