Flutter 3: What are enums and what is new about it
--
Let’s continue our Flutter 3 series. Enums have got a new power in Flutter 3/Dart 2.17; in this article, I will talk about what enum is and its new feature in Flutter 3.
What’s Enum
Enum is the short form of “Enumerated type”, a set of named constants where all possible values are declared. Enum is not a unique feature of the Dart language but exists in most modern languages.
For example, if I’m going to develop a programmable interface for a smart lightbulb, I may do this:
const int LIGHT_BULB_STATUS_ON = 1;
const int LIGHT_BULB_STATUS_OFF = 0;
Then I will define a function to set the status of the lightbulb to on or off:
void setStatus(int status) {
// ...
}// Usage:
setStatus(LIGHT_BULB_STATUS_ON);
This seems fine but one day a junior employee is adding new features to the codebase, and he sees that the setStatus
function takes an integer parameter, then he somehow passed -1
to it, causing a runtime exception:
setStatus(-1);
It is not a good practice that he didn’t read through the codebase before doing any modification, but if the codebase is very large, who wants to read it? Is there a way to let us find the problem even in the static analysis, without running the code? Enums to the rescue!
First, we define an enum class:
enum LightBulbStatus {
on,
off,
}
Then the setStatus
function becomes:
void setStatus(LightBulbStatus status) {
// ...
}// Usage:
setStatus(LightBulbStatus.on);
Now the function takes a value of the enum LightBulbStatus
, which is on
or off
only. This has two advantages:
- It restricts the parameter to the values declared in the enum, passing other values to it would give an error, and the error can be found by editor plugins.
- It prevents others from passing direct values to the function, e.g.
setStatus(0)
, which ensures the readability.
Therefore, you should always use enums when possible.