【问题标题】:How to build a List from Realtime database and update ListView in Flutter when data changes?如何在数据更改时从实时数据库构建列表并在 Flutter 中更新 ListView?
【发布时间】:2020-08-01 20:31:25
【问题描述】:

我有一个用户列表和他们的分数,我想在任何分数发生变化或新用户添加到行列时建立一个实时排行榜。在flutter的firebase_database SDK中,有onChildAddedonChildChanged的方法,但是如果我想建立这个排行榜,其中一些用户在比赛开始之前就存在并且他们有一些分数。如何创建实时排行榜? 我现在的基本代码。

user 提供者中定义的函数。

Stream getAllUsers() {
    return rtdb.child('ranks').orderByChild('score').onValue;
  }

排行榜.dart

import 'package:dating_app/providers/user.dart';
import 'package:dating_app/widgets/loader.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

class LeaderBoard extends StatefulWidget {
  @override
  _LeaderBoardState createState() => _LeaderBoardState();
}

class _LeaderBoardState extends State<LeaderBoard> {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: StreamBuilder(
        stream: Provider.of<User>(context, listen: false).getAllUsers(),
        builder: (context, snapshot){
          if(!snapshot.hasData){
            return Loader();
          }else{
            print(snapshot.data);
            return Text('Hello World');
          }
        },
      ),
    );
  }
}

【问题讨论】:

    标签: flutter firebase-realtime-database dart


    【解决方案1】:

    如果我想建立这个排行榜,其中一些用户在比赛开始前就存在并且他们有一些分数

    当您附加您的侦听器时,会立即为在该位置匹配的每个现有子节点调用 onChildAdded

    来自listening for child events上的文档:

    onChildAdded() 检索项目列表或监听项目列表的添加。此回调会为每个现有的孩子触发一次,然后每次将新的孩子添加到指定路径时再次触发。

    【讨论】:

      猜你喜欢
      • 2021-10-19
      • 2020-05-18
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多