Em vários cenários você precisa de scroll sim. Um formulário com vários campos de texto é um exemplo comum.
Mas existem funcionalidades em que o conteúdo deve ser adaptado de acordo com o espaço disponível na tela (ocupando mais ou menos espaço) e você não vai querer um scroll.
Vamos usar de exemplo um aplicativo de xilofone (um teclado musical colorido).
Nós vamos querer que as teclas ocupem o espaço disponível da tela do usuário. Visualmente seria mais ou menos assim:
E o código seria algo como:
class TeclaMusical extends StatelessWidget {
final Color color;
const TeclaMusical({ Key? key, required this.color }) : super(key: key);
@override
Widget build(BuildContext context) {
return Expanded(
child: GestureDetector(
onTap: () {
//tocar a música ...
},
child: Container(color: color),
),
);
}
}
class MyApp extends StatelessWidget {
const MyApp({ Key? key }) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
backgroundColor: Colors.black,
body: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: const [
TeclaMusical(color: Colors.red),
TeclaMusical(color: Colors.orange),
TeclaMusical(color: Colors.yellow),
TeclaMusical(color: Colors.green),
TeclaMusical(color: Colors.lightGreen),
TeclaMusical(color: Colors.blue),
TeclaMusical(color: Colors.purple),
],
),
),
);
}
}
Nesse exemplo criamos uma Column com cada item sendo um Expanded. Isso faz com que cada item ocupe o espaço disponível. Mesmo em uma tela menor não vamos gerar um scroll.