EDIT
Начиная с Dart 2.2, новый синтаксис изначально поддерживает это:
Column(
children: [
if (foo != null) Text(foo),
Bar(),
],
);
Эта проблема в настоящее время обсуждается на github здесь .
Но сейчас вы можете использовать функции dart sync*
:
Row(
children: toList(() sync* {
if (foo == 42) {
yield Text("foo");
}
}),
);
, где toList
:
typedef Iterable<T> IterableCallback<T>();
List<T> toList<T>(IterableCallback<T> cb) {
return List.unmodifiable(cb());
}
Не только решает проблему условного сложения; он также позволяет использовать «оператора распространения» благодаря yield*
. Пример: * 1 023 *
List<Widget> foo;
Row(
children: toList(() sync* {
yield Text("Hello World");
yield* foo;
}),
);