Ternary operator in Dart
Ternary Conditional Operators are a pretty useful thing in Dart. They can be used to conditionally show a Flutter widget. They accept 2 operands. If the given condition is true, the first thing will be executed and if it is false, it will execute the second one.
Example in Dart code
void main() {
bool isComplete = false;
print(isComplete ? "completed!" : "not Completed");
}
//Outputs not Completed
This will print not completed
.
If we change the value of isComplete
to true, it will print completed
.
void main() {
bool isComplete = true;
print(isComplete ? "completed!" : "not Completed");
//Outputs completed
}
Now let’s consider a non-boolean value.
void main() {
String name = "John Doe";
String myName = "mukhtharcm";
print(name == myName ? "your name is $name " : "your name is NOT $name ");
}
//Outputs your name is NOT John Doe
If we run this code, it’ll print your name is NOT john Doe
.
But if we change the value of myName
to John Doe
, it will print your name is John Doe
void main() {
String name = "John Doe";
String myName = "John Doe";
print(name == myName ? "your name is $name " : "your name is NOT $name ");
}
//Outputs your name is John Doe
Using in Flutter
Ternary Operators are pretty handy when working with Flutter.
They can be used to conditionally show widgets.
Like showing a CircularProgressIndicator()
when loading.
Flutter Example
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: MyWidget(),
),
),
);
}
}
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
bool isLoading = true;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
isLoading ? CircularProgressIndicator() : Text("Loading Completed"),
SizedBox(height: 100),
Text("Click Floating Action Button Toggle Loading")
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() {
isLoading = !isLoading;
});
},
),
);
}
}
In the above example, isLoading
is a boolean value.
Initially it’s value is true
.
So the CircularProgressIndicator
is shown.
But the FloatingActionButton
toggles the value of isLoading
.
So the CircularProgressIndicator
changes to Text
and vice-versa.
As we saw above, we can also use values other than boolean here.
If you fancy testing this out in the browser, you can follow this link to see a dartpad filled with sample code for this post.
If you found any typo or have any suggestions, please feel free to contact me on Twitter. 😊
Finally, if you found this helpful, please share this within your reach so that more people can benefit from this. And Follow me on Twitter for getting more posts like these 😉.