Назад к вопросам
Middle
268
questionbank
Какие виджеты во Flutter обеспечивают адаптивную верстку?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
MediaQuery- для получения информации о размере и ориентации экрана.LayoutBuilder- для построения виджетов в зависимости от ограничений родительского элемента.OrientationBuilder- для построения виджетов в зависимости от ориентации экрана.FractionallySizedBox- для создания элементов с размером, пропорциональным доступному пространству.AspectRatio- для поддержания заданного соотношения сторон элемента.ExpandedиFlexible- для гибкого распределения пространства между элементами вRowилиColumn.SingleChildScrollView- для прокрутки содержимого, если оно превышает доступную область.ListViewиGridView- для отображения списков и сеток с возможностью адаптации.ResponsiveBuilder(из пакетаresponsive_framework) - для построения виджетов в зависимости от брейкпоинтов.FittedBox- для масштабирования дочернего виджета в соответствии с размером родителя.
// Пример использования MediaQuery
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final Size screenSize = MediaQuery.of(context).size;
return Scaffold(
appBar: AppBar(
title: Text('Адаптивный дизайн'),
),
body: Center(
child: Text('Размер экрана: ${screenSize.width.toStringAsFixed(1)}x${screenSize.height.toStringAsFixed(1)}'),
),
);
}
}
// Пример использования LayoutBuilder
class AdaptiveContainer extends StatelessWidget {
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
if (constraints.maxWidth > 600) {
// Широкий экран
return Container(
color: Colors.blue,
width: 300,
height: 100,
child: Center(child: Text('Широкий')),
);
} else {
// Узкий экран
return Container(
color: Colors.red,
width: 100,
height: 50,
child: Center(child: Text('Узкий')),
);
}
},
);
}
}
// Пример использования Expanded
class FlexibleLayout extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Row(
children: <Widget>[
Container(
color: Colors.yellow,
width: 50,
height: 50,
),
Expanded( // Займет оставшееся пространство
child: Container(
color: Colors.green,
height: 50,
),
),
],
);
}
}