firebase - 在 Flutter 中计算排行榜排名

标签 firebase flutter dart google-cloud-firestore

<分区>

我正在 flutter 中创建一个 2D 游戏,使用 firebase 作为后端服务。 我如何根据他们的分数计算用户的排名。目前,我通过使用索引获得他们的排名,但如果两个或更多用户的分数相同,那么我如何向他们展示相同的排名位置。 这是代码:

StreamBuilder<QuerySnapshot>(
        stream: FirebaseFirestore.instance
            .collection('teams')
            .orderBy('points', descending: true)
            .snapshots(),
        builder: (context, snapshot) {
          return ListView.builder(
              itemCount: snapshot.data.docs.length,
              itemBuilder: (context, index) {
                return Container(
                  child:   Text('Rank ${index +1}'),
                );
              });
        },
      ),

最佳答案

这可能有效:只计算得分较高的元素的数量。我还添加了 _denseRank 函数,如果您想以这种方式显示它(例如,排名将变为 1、2、2、3、3 等)。这只计算得分较高的唯一元素的数量 - toSet() 用于删除重复项 - 即获取唯一值。

import 'package:flutter/material.dart';

final Color darkBlue = Color.fromARGB(255, 18, 32, 47);

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: MyWidget(),
        ),
      ),
    );
  }
}

class MyWidget extends StatelessWidget {
  
  final a=<int>[10,9,9,8,8,4,4];
  
    
  int _rank(int index) => a.where( (element) => element>a[index]).length+1;
  
  int _denseRank(int index) => a.where( (element) => element>a[index]).toSet().length+1;
  
  
  
  @override
  Widget build(BuildContext context) {
    return Column(children: <Widget>[
      for (var index=0; index<a.length;index++) Row(children: <Widget>[Text('Index $index'), Text('Rank ${_rank(index)}'), Text('Dense Rank ${_denseRank(index)}')])
    ]);
  }
}



关于firebase - 在 Flutter 中计算排行榜排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66839287/

相关文章:

datagrid - DART 的任何 UI 控制框架?

java - 当没有条件可显示的项目时隐藏 recyclerview

javascript - 在 firebase 中给定 id 之后获取更多数据

flutter - TextFormField 启用后未聚焦

flutter - 将 Flutter 应用程序链接到 opencart 电子商务网上商店

syntax - Dart方法签名中的大括号有什么用

firebase - 如何查询Firestore上的数据列表?

java - 无法向 firebase 中的所有组参与者发送通知消息

ios - tableview 不刷新已删除的数据

发生 Flutter 错误 : The position being added ($position) has a smaller timestamp ($time) than its predecessor: $previousPoint