Назад к вопросам
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,
          ),
        ),
      ],
    );
  }
}