Gestire righe flessibili con Expanded e Wrap
Per disposizioni orizzontali, Expanded e Flexible distribuiscono lo spazio tra i figli di una Row. Quando però il contenuto rischia di traboccare su schermi piccoli, Wrap manda automaticamente gli elementi a capo. Combiniamo i due approcci usando LayoutResponsivo.
class PannelloInfo extends StatelessWidget {
const PannelloInfo({super.key});
@override
Widget build(BuildContext context) {
final box1 = Container(height: 120, color: Colors.blue.shade100, child: const Center(child: Text('Box 1')));
final box2 = Container(height: 120, color: Colors.green.shade100, child: const Center(child: Text('Box 2')));
final box3 = Container(height: 120, color: Colors.orange.shade100, child: const Center(child: Text('Box 3')));
return LayoutResponsivo(
// Su mobile impiliamo in colonna
mobile: Column(
children: [box1, const SizedBox(height: 12), box2, const SizedBox(height: 12), box3],
),
// Su tablet usiamo Wrap per andare a capo se serve
tablet: Wrap(
spacing: 12,
runSpacing: 12,
children: [
SizedBox(width: 300, child: box1),
SizedBox(width: 300, child: box2),
SizedBox(width: 300, child: box3),
],
),
// Su desktop distribuiamo lo spazio con Expanded
desktop: Row(
children: [
Expanded(child: box1),
const SizedBox(width: 12),
Expanded(child: box2),
const SizedBox(width: 12),
Expanded(child: box3),
],
),
);
}
}
Risultato atteso
I box si dispongono in colonna su mobile, a capo su tablet e affiancati su desktop.