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'), ]);