Прокрутка SingleChildScrollView в Flutter
Виджет
Column
внутри Scaffold
получает ограниченную высоту экрана. Если
потомков много, колонка хочет быть выше, чем
body, и снова появляется переполнение
по вертикали. Обёртка
SingleChildScrollView
даёт одному потомку прокручиваться внутри
доступной области:
import 'package:flutter/material.dart';
void main() {
runApp(const MaterialApp(home: HomePage()));
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: List.generate(
20,
(i) => Padding(
padding: const EdgeInsets.all(16),
child: Text('Row ${i + 1}'),
),
),
),
),
);
}
}
Виджет SingleChildScrollView подходит,
когда
потомок один и его высота может превышать
экран: форма, текст статьи, длинный список
из нескольких блоков. Для сотен однотипных
строк позже возьмут ListView;
пока достаточно прокрутки вокруг Column.
По умолчанию прокрутка вертикальная. Горизонтальную
включают параметром scrollDirection:
Axis.horizontal. Внутри прокрутки Column
может быть выше экрана - ограничение по
высоте снимается, зато пользователь листает
содержимое пальцем или колёсиком:
SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: Column(
children: const [
Text('Title'),
SizedBox(height: 400),
Text('Form bottom'),
],
),
)
Соберите Column из Text
'Start', SizedBox высотой
900 и Text 'End'. Без
прокрутки на телефоне видна жёлто-чёрная
полоса. Оберните колонку в
SingleChildScrollView и долистайте
до последней строки.