ListView внутри Column в Flutter
Иногда над списком нужен заголовок или
панель, а сами строки должны прокручиваться.
Тогда ListView
кладут внутрь Column
вместе с другими виджетами. Без ограничения
по высоте ListView пытается стать
бесконечно высоким, и Flutter сообщает
об ошибке вёрстки.
Виджет
Expanded
заставляет потомка занять оставшуюся долю
высоты в Column. Обёрнутый в
Expanded ListView получает
конечную высоту и нормально прокручивается
под заголовком:
import 'package:flutter/material.dart';
void main() {
runApp(const MaterialApp(home: HomePage()));
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
static const items = ['One', 'Two', 'Three', 'Four', 'Five'];
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
const Padding(
padding: EdgeInsets.all(16),
child: Text(
'Task list',
style: TextStyle(fontSize: 20),
),
),
Expanded(
child: ListView(
children: [
for (final label in items)
ListTile(title: Text(label)),
],
),
),
],
),
);
}
}
Сделайте экран: сверху Text
'News' с отступом 16, ниже
ListView из шестнадцати
ListTile. Заголовки возьмите
циклом: 'Story 1' …
'Story 16'. Список оберните
в Expanded: заголовок стоит
на месте, строки листаются.