dart 将orElse函数添加到firstWhere方法

i1icjdpr  于 2023-04-03  发布在  其他
关注(0)|答案(4)|浏览(251)

我试图将onElse函数添加到itterator.firstWhere方法中,但语法不正确。
我试过类似的方法

List<String> myList = 

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

但是编译器有一个错误
需要1个位置参数,但找到2个
我确信这是一个简单的语法问题,但它难倒了我

gopyfrb3

gopyfrb31#

如果有人来到这里感谢谷歌,搜索如何返回null如果firstWhere没有找到任何东西,当您的应用程序是空安全,使用新的方法package:collection称为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');

关于方法:https://pub.dev/documentation/collection/latest/collection/IterableExtension/firstWhereOrNull.html

ergxz8rk

ergxz8rk2#

'orElse'是一个命名的可选参数。

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');
  }
}
vfh0ocws

vfh0ocws3#

使用cast〈E?〉(),您可以在不添加依赖项的情况下完成此操作:

void main() {
  List<String> myList = ["Hello", "World"];

  String? result = myList.cast<String?>().firstWhere((o) => o!.startsWith('foo'), orElse: () => null);

  print(result ?? "No result");
}

你可以在dartpad上试试。

4szc88ey

4szc88ey4#

您必须直接添加集合包:运行下面的命令,这将把它添加到pubspec.yaml文件中:
$ flutter pub添加收藏
参考:collection: ^1.16.0

相关问题