Adding orElse function to firstWhere method

I am trying to add the onElse function to the itterator.firstWhere method but I cannot get the syntax right.

I have tried something like

List<String> myList = 

String result = myList.firstWhere((o) => o.startsWith('foo'), (o) => null);

But the compiler has an error of

1 positional arguments expected, but 2 found

I am sure it is a simple syntax problem, but it has me stumped


Solution 1:

In case someone came here thanks to google, searching about how to return null if firstWhere found nothing, when your app is Null Safe, use the new method of package:collection called firstWhereOrNull.

import 'package:collection/collection.dart'; // You have to add this manually, for some reason it cannot be added automatically

// somewhere...
MyStuff? stuff = someStuffs.firstWhereOrNull((element) => element.id == 'Cat');

About the method: https://pub.dev/documentation/collection/latest/collection/IterableExtension/firstWhereOrNull.html

Solution 2:

'orElse' is a named optional argument.

void main() {
  checkOrElse(['bar', 'bla']);
  checkOrElse(['bar', 'bla', 'foo']);
}

void checkOrElse(List<String> values) {
  String result = values.firstWhere((o) => o.startsWith('foo'), orElse: () => '');

  if (result != '') {
    print('found: $result');
  } else {
    print('nothing found');
  }
}

Solution 3:

void main() {
  List<String> myList = ['oof'];

  String result = myList.firstWhere((element) => 
element.startsWith('foo'),
      orElse: () => 'Found nothing');
  print(result);
}

Solution 4:

myObject = myList.firstWhere
       ((element) => element.myIdentifier == someIdentifier, orElse: ()=> null);