Условие if в списке потомков в Flutter
Списки children у Column,
Row
и других виджетов - обычные Dart-списки.
В Dart 3 внутри литерала списка можно
писать if (условие) элемент: при
истинном условии элемент попадает в список,
при ложном - пропускается. Так не нужно
собирать список вручную через add:
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) {
const showSubtitle = true;
const showBadge = false;
return Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
const Text('Title'),
if (showSubtitle)
const Text('Subtitle'),
if (showBadge)
const Icon(Icons.verified),
],
),
),
);
}
}
После if можно ставить несколько
виджетов в фигурных скобках, если нужно
вставить блок сразу из нескольких элементов.
Когда альтернатива - «ничего не добавлять»,
if читается проще, чем
тернарный оператор
с пустым SizedBox.shrink().
Условие вычисляется при каждом build;
пока флаг задан константой в коде, список
потомков фиксирован до следующего запуска:
Column(
children: [
const Text('Step 1'),
if (false) const Text('Hidden step'),
const Text('Step 2'),
],
)
Соберите Column так:
const hasFooter = true;
Column(
children: [
const Text('Article'),
if (hasFooter) const Text('Author: Ann'),
],
)
Присвойте флагу false: должна
остаться одна строка заголовка.