如何使用 dart null-safety 对可能包含 null 值的列表进行排序

Bra*_*ay 3 sorting dart flutter dart-null-safety

我有一个可能包含空值的字符串列表,如何对该列表进行排序?

我正在使用Flutter beta 通道,因此会检查空安全性。这是我到目前为止所拥有的:

List<String?> _list = [
  
 'beta',
 'fotxtrot',
 'alpha',
  null,
  null, 
 'delta',
];

_list.sort((a, b) => a!.compareTo(b!)); 
Run Code Online (Sandbox Code Playgroud)

我如何得到这个结果:

_list = [
  null,
  null,
  'alpha',
  'beta',
  'delta',
  'fotxtrot',
];
Run Code Online (Sandbox Code Playgroud)

Ant*_*REL 12

我最近遇到了这个问题,并根据compareTo文档构建了一个单行函数:

myList.sort((a, b) => a==null ? 1: b==null? -1 : a.compareTo(b));
Run Code Online (Sandbox Code Playgroud)

注意:这会将空值带到列表的末尾。在您的情况下,只需交换 -1 和 1 即可将它们放在列表的前面。


Chr*_*ore 5

您需要修改排序方法以处理可为空值,而不仅仅是忽略它们。处理完潜在的空值后,您可以正常比较它们。

_list.sort((a, b) {
  if(a == null) {
    return -1;
  }
  if(b == null) {
    return 1;
  }
  return a.compareTo(b);
}); 
Run Code Online (Sandbox Code Playgroud)