【问题标题】:Adding all the numbers in the firebase and store it in a variable in Flutter在 firebase 中添加所有数字并将其存储在 Flutter 中的变量中
【发布时间】:2021-06-18 11:59:19
【问题描述】:

我有一个带有评级字段的集合,我想遍历集合并添加所有值。最后,我想将它存储在一个变量中,该变量可以被所有屏幕在颤动中访问。

有什么想法吗?

这是我尝试过的但失败了

void calculateHomeTeamRating(){
    int rating=0;
    StreamBuilder<QuerySnapshot>(
      stream: _firestore.collection('SelectedPlayersHome').snapshots(),
      builder: (context, snapshot){
        if(!snapshot.hasData){
          return Center(
            child: CircularProgressIndicator(
              backgroundColor: Colors.lightBlueAccent,
            ),
          );
        }
        final players = snapshot.data.docs;
        List<int> homeRating = [];
        for(var playerRating in players){
          rating = rating + playerRating.get('Rating');
        }
        String textRating = rating.toString();
        homeRating.add(rating);
        return null;
      },
    );
  }
}

这是显示玩家姓名和评分的集合和字段:

【问题讨论】:

    标签: firebase flutter


    【解决方案1】:

    您可以创建一个模型类来对来自 firestore 的传入数据进行编码和解码,并且可以使用此模型类来存储数据。

    创建类来存储玩家数据。

    class Player {
      String playerName;
      int rating;
      String timestamp;
    
      Player({this.playerName, this.rating, this.timestamp});
    
      Player.fromJson(Map<String, dynamic> json) {
        playerName = json['PlayerName'];
        rating = json['Rating'];
        timestamp = json['timestamp'];
      }
    
      Map<String, dynamic> toJson() {
        final Map<String, dynamic> data = new Map<String, dynamic>();
        data['PlayerName'] = this.playerName;
        data['Rating'] = this.rating;
        data['timestamp'] = this.timestamp;
        return data;
      }
    }
    
    

    QuerySnapshot 传递给calculateHomeTeamRating 函数,它将返回List&lt;Player&gt; 并相应地使用它。 .

    Future<List<Player>> calculateHomeTeamRating(
          QuerySnapshot querySnapshot) async {
        final List<Player> playerList = [];
    
        final data = querySnapshot.docs;
        if (data != null && data.isNotEmpty) {
          for (var i = 0; i < data.length; i++) {
            var model = Player.fromJson(querySnapshot.docs[i].data());
            playerList.add(model);
          }
          return playerList;
        } else {
          return null;
          
        }
      }
    }
    

    使用玩家列表中的特定值(评分)

    var List<int> ratings;
    
    final players = snapshot.data.docs;
    
    final list = calculateHomeTeamRating(players);
    
    if(list!= null && list.isNotEmpty){
      ratings = list.map((player)=> player.rating).toList();
    }
    
    if(ratings!= null && ratings.isNotEmpty){
      print("Total given ratings: ${ratings.length}");
    }
    

    【讨论】:

    • 如果在快照中我只想访问特定字段(即评分)并循环它以获得它的总数怎么办?
    • 据我了解,通过这种方式,我可以访问每个玩家的评分并将其添加到 List 评分中。那么,如何获得所有玩家评分的累计值呢?通过累积,我的意思是添加所有评级并将其存储到 totalRating。抱歉让我有点困惑,感谢您的帮助。
    • 您可以从此代码中获得所有评分的总和。 var sum = rating.reduce((a, b) => a + b);
    • 兄弟,如果我想访问其他flutter页面中的列表,我该怎么办?
    • 您可以在其他页面的构造函数中传递列表,也可以使用状态管理技术,它可以在应用程序的任何位置使用。
    猜你喜欢
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    相关资源
    最近更新 更多