While working on a Flutter app I ran into an exception in a ListView.separated
that took me entirely too long to find the root issue. While scrolling I suddenly encountered this error:
Bad state: No element
My first instinct was something was wrong with the widget’s state. After some searching I was tipped off to look in another area, Dart 2.2’s Iterable.first. I was surprised to find that first
, Throws a StateError if this is empty. Otherwise returns the first element in the iteration order, equivalent to this.elementAt(0).
What I didn’t know is my data set was coming in over HTTPS and had changed to be an empty array. My once safe jobs.first.title
became dangerous!
I used a null-aware operator (?.
) along with a default value (??
), and added the helper function to my model. Keeping my widget’s a bit cleaner. Now I’m safe if jobs is null
or []
(empty).
String getFirstTitle() => jobs?.isNotEmpty ?? false ? jobs.first.title : 'Unknown';
I was bummed that Iterable.first throws an exception in Dart instead of just returning null, so I’m stuck just using helper functions. 🙁