You can use constraint property of Container Widget. -I think-
You can try this:
Row(
children: [
Expanded(
flex: 117,
child: Container(
constraints: BoxConstraints(minWidth: 40),
child: Widget(),
),
),
Expanded(
flex: 400,
child: Container(
constraints: BoxConstraints(minWidth: 40),
child: Widget(),
),
),
Expanded(
flex: 13,
child: Container(
constraints: BoxConstraints(minWidth: 40),
child: Widget(),
),
),
Expanded(
flex: 470,
child: Container(
constraints: BoxConstraints(minWidth: 40),
child: Widget(),
),
),
],
);
Edit 1: I created custom widget called MinHeightExpanded.
MinHeightExpanded Widget:
class MinHeightExpanded extends StatefulWidget {
const MinHeightExpanded({
Key? key,
required this.minHeight,
required this.flex,
required this.color,
}) : super(key: key);
final double minHeight;
final int flex;
final Color color;
@override
_MinHeightExpandedState createState() => _MinHeightExpandedState();
}
class _MinHeightExpandedState extends State<MinHeightExpanded> {
bool setToMin = false;
@override
Widget build(BuildContext context) {
WidgetsBinding.instance!.addPostFrameCallback((timeStamp) => setState(() {}));
return !setToMin
? Expanded(
flex: widget.flex,
child: LayoutBuilder(
builder: (BuildContext context, BoxConstraints boxConstraints) {
print("${widget.color}: ${boxConstraints.maxHeight}");
if (boxConstraints.maxHeight < widget.minHeight) {
setToMin = true;
}
return Container(
color: widget.color,
);
},
),
)
: Container(
color: widget.color,
height: widget.minHeight,
);
}
}
Use it like that:
SizedBox(
height: size.height,
width: double.infinity,
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
MinHeightExpanded(
flex: 117,
color: Colors.red,
minHeight: 40,
),
MinHeightExpanded(
flex: 400,
color: Colors.yellow,
minHeight: 40,
),
MinHeightExpanded(
flex: 13,
color: Colors.blue,
minHeight: 400,
),
MinHeightExpanded(
flex: 470,
color: Colors.green,
minHeight: 40,
),
],
),
),