Actually you can use if/else
and switch
and any other statement inline in dart / flutter.
Use a builder
Widget build(BuildContext context) {
return Container(
child: Builder(
builder: (context) {
if (true) //
return "tis true";
return "anything but true";
},
),
);
}
or an immediate anonymous function
Widget build(BuildContext context) {
return Container(child: () {
if (value == 1) {
return Text('tis true');
}
return Text('anything but true');
}());
}
I would heavily recommend against putting too much logic directly with your UI 'markup' but I found that type inference in Dart needs a little bit of work so it can be sometimes useful in scenarios like that.
Use the ternary operator
condition ? Text("True") : null,
Use If or For statements or spread operators in collections
children: [
...manyItems,
oneItem,
if(canIKickIt)
...kickTheCan
for (item in items)
Text(item)
Use a method
child: getWidget()
Widget getWidget() {
if (x > 5) ...
//more logic here and return a Widget
EDIT - new with Dart 3.0
Dart 3.0 adds new functionality such as if-case & switch expressions in order to use pattern matching, destructuring, guard clauses.
https://dart.dev/language/patterns
Switch Expressions
We can now use switch as an expression.
https://dart.dev/language/branches#switch-expressions
child: switch (task) {
Task_completed(:date) => Text("completed on $date"),
Task_overdue(:priority) => Text("$priority"),
},
if-case (new to Dart 3.0)
Use if-case instead of switch when you have a single or small number of conditions to check.
https://dart.dev/language/branches#if-case
return ListView(children: [
Text('header'),
if (pair case [int x, int y]) //
Text('Coordinates: ($x, $y)') //
else
Text('No coordinates given'),
]);