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

Flutter中如何将Cloud Firestore内以uid为ID的用户列表按高分排序

解决办法

你可以通过两种方式实现按高分排序,优先推荐Firestore服务端排序的方案,性能和一致性更好。

方案1:修改Firestore查询逻辑(推荐)

直接在DatabaseService的brews流中添加排序规则,修改你Database类里的get brews方法即可:

// Get brews stream
Stream<List<HighscoreData>> get brews {
  // 按score字段降序排序,分数越高越靠前
  return brewCollection.orderBy('score', descending: true).snapshots().map(_brewListFromSnapshot);
}

注意事项

  • 请确保你存储在Firestore中的score字段是数字类型,如果是字符串类型会出现"99" > "100"的排序错误
  • 第一次运行带排序的查询时,Firestore会要求你创建对应索引,你直接按照控制台报错提示创建即可,等待索引生效后就能正常返回排序结果。

方案2:本地手动排序

如果不想改数据库查询逻辑,也可以在拿到分数列表后在前端本地排序,修改HighscoreList组件中的代码:

@override
Widget build(BuildContext context) {
  final differentHighScores = Provider.of<List<HighscoreData>>(context) ?? [];
  // 本地按分数降序排序,注意要把score转成数字比较
  differentHighScores.sort((a, b) => int.parse(b.score).compareTo(int.parse(a.score)));

  return ListView.builder(
    itemCount: differentHighScores.length,
    itemBuilder: (BuildContext context, int index){
      return PlayerHighscoreTile(highscoreData: differentHighScores[index]);
    },
  );
}

注意事项

该方案仅适合数据量较小的场景,如果用户数量过百,本地排序会有明显的性能损耗。

内容的提问来源于stack exchange,提问作者Cameron Johnson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:12:03