Как создать невидимый виджет с минимальным размером в Flutter?

SizedBox.shrink() в Flutter используется для создания невидимого виджета с минимально возможным размером, то есть с размерами 0x0. Это полезно в ситуациях, когда нужно вернуть пустой виджет или создать пустое место, не занимая дополнительного пространства в макете.

Основные сценарии использования SizedBox.shrink():

  1. Замена виджета в условной логике: Когда вам нужно показать либо виджет, либо ничего, SizedBox.shrink() может заменить невидимый элемент, не нарушая макет.

    Пример:

    Widget build(BuildContext context) {
      return Column(
        children: [
          _showWidget ? SomeWidget() : SizedBox.shrink(),
        ],
      );
    }
    

    Здесь, если условие _showWidget ложно, вместо реального виджета будет показан пустой контейнер с размером 0x0.

  2. Исключение отступов или пробелов: Иногда вам нужно вставить пустой виджет без отступов, например, если вы используете SizedBox для задания фиксированного отступа, но хотите, чтобы в некоторых случаях его не было.

    Пример:

    Widget build(BuildContext context) {
      return Column(
        children: [
          Text('First line'),
          _addSpacing ? SizedBox(height: 20) : SizedBox.shrink(),
          Text('Second line'),
        ],
      );
    }
    

    В этом примере отступ будет добавлен только при истинном значении переменной _addSpacing.

  3. Место для обязательного виджета: В некоторых случаях виджет обязательно требуется в структуре макета, но фактически вам не нужно отображать ничего. Вместо удаления этого виджета можно использовать SizedBox.shrink(), чтобы сохранить место в иерархии виджетов без какого-либо влияния на размеры.

Таким образом, SizedBox.shrink() удобно использовать, когда нужно «отобразить ничего» в макете, сохраняя при этом структуру без появления лишнего пространства.