You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart使用List.sort按价格排序列表报int返回值非空错误修复

报错原因

List.sort() 方法要求传入的比较函数必须返回一个非空int类型值,用来判定两个元素的排序优先级:

  • 返回值 < 0:a排在b前面
  • 返回值 = 0:a和b位置相等
  • 返回值 > 0:b排在a前面

你的代码里比较函数用大括号包裹了逻辑块,但调用a.price.compareTo(b.price)时没有加return关键字,这个函数不会把compareTo的结果返回给sort方法,默认返回null,和要求的非空int返回值规则冲突,因此抛出该错误。另外你写的print((books))多套了一层括号,虽然不影响运行,但属于冗余写法。

修复方案

二选一即可:

方案1:箭头函数简写(单逻辑行推荐)

如果比较逻辑只有一行,直接用箭头函数语法,会自动隐式返回执行结果,代码更简洁:

sortAll(List<BookModel> books) {
  // 升序排序,要降序就改成 b.price.compareTo(a.price)
  books.sort((a, b) => a.price.compareTo(b.price));
  print(books);
}

方案2:保留代码块写法,显式加return

如果后续要在比较逻辑里加其他判断,需要保留大括号代码块的话,必须显式return比较结果:

sortAll(List<BookModel> books) {
  books.sort((a, b) {
    // 这里可以加其他自定义判断逻辑
    return a.price.compareTo(b.price);
  });
  print(books);
}
注意事项
  • 上述默认写法是按价格从小到大升序排列,需要从大到小降序的话,只需要把compareTo的调用双方调换位置即可
  • 要保证BookModel里的price字段是int/double/num这类实现了Comparable接口的类型,否则compareTo方法本身会调用失败

内容的提问来源于stack exchange,提问作者dsfsfsdf rwrrwr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 07:39:19