Виджет SafeArea в Flutter
На телефонах с «чёлкой», скруглёнными углами
и жестовой полосой часть экрана занимают
системные элементы. Виджет
SafeArea
добавляет отступы, чтобы текст и кнопки не
оказались под статус-баром или в зоне выреза.
Оборачивают им содержимое body или
отдельный блок интерфейса:
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: SafeArea(
child: Padding(
padding: const EdgeInsets.all(16),
child: Text('Text in the safe area'),
),
),
);
}
}
Виджет
Scaffold
сам учитывает часть системных отступов для
body, но полноэкранные макеты, цветной
фон до края и кастомные шапки без AppBar
часто требуют явного SafeArea. Параметры
top, bottom, left,
right можно отключить выборочно,
если, например, нижнюю зону намеренно
заполняет NavigationBar:
Scaffold(
body: Column(
children: [
SafeArea(
bottom: false,
child: Container(
width: double.infinity,
padding: const EdgeInsets.all(16),
color: Colors.teal,
child: const Text(
'Header',
style: TextStyle(color: Colors.white),
),
),
),
const Expanded(
child: Center(child: Text('Content')),
),
],
),
)
Выведите в body один Text
'Top edge' внутри SafeArea
с Padding 16. Текст не должен
заходить под строку состояния.