Firebase Firestore-保存查询结果

Firebase Firestore-保存查询结果,firebase,flutter,google-cloud-firestore,flutter-layout,Firebase,Flutter,Google Cloud Firestore,Flutter Layout,大家晚上好,我对Firebase有问题。基本上,我正在创建排行榜,我必须找到得分最多的7个用户,这一点没有问题,但我不知道如何保存7个用户的数据,以便稍后在文本小部件中显示他们 这是我做的函数: Future<void> getLeaderboard() async { return await FirebaseFirestore.instance .collection("leaderboard") .orderBy(

大家晚上好,我对Firebase有问题。基本上,我正在创建排行榜,我必须找到得分最多的7个用户,这一点没有问题,但我不知道如何保存7个用户的数据,以便稍后在文本小部件中显示他们

这是我做的函数:

 Future<void> getLeaderboard() async {

    return await FirebaseFirestore.instance
        .collection("leaderboard")
        .orderBy('Score', descending: true)
        .limit(7)
        .get()
        .then((QuerySnapshot querySnapshot) => {
        querySnapshot.docs.forEach((doc) {
        print(doc["first_name"]);
    }),
    });

  }
Future GetLeadboard()异步{
return wait wait FirebaseFirestore.instance
.收藏(“排行榜”)
.orderBy('Score',降序:true)
.限额(7)
.get()
.然后((QuerySnapshot QuerySnapshot)=>{
querySnapshot.docs.forEach((doc){
打印(文件[“名字]);
}),
});
}
如何保存所有7个用户的用户名和分数,以便以后重新使用

这是页面代码:

import 'package:sizer/sizer.dart';
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:goodgoals_android/pages/home_page.dart';
import 'package:goodgoals_android/pages/profile_page.dart';
import 'package:salomon_bottom_bar/salomon_bottom_bar.dart';
import 'package:goodgoals_android/services/authentication.dart';


class soloLeaderboardPage extends StatefulWidget {
  soloLeaderboardPage({Key key, this.auth, this.userId, this.logoutCallback, this.home})
      : super(key: key);

  final BaseAuth auth;
  final VoidCallback logoutCallback;
  final String userId;
  final HomePage home;

  @override
  State<StatefulWidget> createState() => new _soloLeaderboardPageState();
}


class _soloLeaderboardPageState extends State<soloLeaderboardPage> {

  final _formKey = new GlobalKey<FormState>();
  final databaseReference = FirebaseFirestore.instance;
  final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;

  var _selectedTab = _SelectedTab.leaderboard;
  var Nick = "";

  @override
  void initState() {
    super.initState();
    asyncMethod();
  }

  void asyncMethod() async {
    await getLeaderboard();
  }


  void _handleIndexChanged(int i) {
    setState(() {
      _selectedTab = _SelectedTab.values[i];
      print("Valore $i");
      if (i == 0) {
        Navigator.push(
            context,
            MaterialPageRoute(
              builder: (context) => HomePage(),
            ));
      }
      else if (i == 3) {
        Navigator.push(
            context,
            MaterialPageRoute(
              builder: (context) => ProfilePage(),
            ));
      }
      else if (i == 2) {
        Navigator.push(
            context,
            MaterialPageRoute(
              builder: (context) => soloLeaderboardPage(),
            ));
      }
    });
  }

  Future<void> getLeaderboard() async {
    return await FirebaseFirestore.instance
        .collection("leaderboard")
        .orderBy('Score', descending: true)
        .limit(7)
        .get()
        .then((QuerySnapshot querySnapshot) => {
      querySnapshot.docs.forEach((doc) {
        setState(() {
          Nick = (doc["Score"]);
        });
      }),
    });
  }




  @override
  Widget build(BuildContext context) {

    return new Scaffold(
      body: Stack(
          children: <Widget>[
            _showForm(),

          ]
      ),
    );
  }

  Widget _showForm() {

    return new Container(
        padding: EdgeInsets.all(10.0),
        child: new Form(
          key: _formKey,
          child: new ListView(
            physics: const NeverScrollableScrollPhysics(),
            shrinkWrap: true,
            children: <Widget>[
              leaderbordSelector(),
              showPodium1(),
              showOtherPosition(),
              bottomBarMimic(),
              //bottomBarMimic(),
            ],

          ),
        ));
  }

  Widget bottomBarMimic() {
    return Positioned(
      width: 100.0.w,
      bottom: 0,
      left: 0,
      child: Container(
          color: Colors.white,
          child: SalomonBottomBar(
            currentIndex: _SelectedTab.values.indexOf(_selectedTab),
            onTap: _handleIndexChanged,
            items: [
              SalomonBottomBarItem(
                icon: Icon(Icons.home),
                title: Text("Home"),
                selectedColor: Colors.purple,
              ),
              SalomonBottomBarItem(
                icon: Icon(Icons.menu_book_sharp),
                title: Text("Magazine"),
                selectedColor: Colors.pink,
              ),
              SalomonBottomBarItem(
                icon: Icon(Icons.bar_chart),
                title: Text("Leaderboard"),
                selectedColor: Colors.orange,
              ),
              SalomonBottomBarItem(
                icon: Icon(Icons.person),
                title: Text("Profile"),
                selectedColor: Colors.teal,
              ),
            ],
          )),
    );
  }

  Widget leaderbordSelector() {
    return new Padding(
      padding: EdgeInsets.symmetric(vertical: 5.0.h, horizontal: 17.0.h),
      child: Row(
        children: <Widget>[
          IconButton(
              icon: Icon(Icons.person, color: Colors.blue),
              onPressed: () {}
          ),
          IconButton(
              icon: Icon(Icons.people),
              onPressed: () {}
          ),
        ],
      ),
    );
  }


  Widget showPodium1() {
    return Container(
        child: Row(
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          children: <Widget>[
            Column(
              children: <Widget>[
                Container(
                  height: 20.0.h,
                  width: 30.0.w,
                  decoration: BoxDecoration(
                      color: const Color(0xFFFFFFFF),
                      borderRadius: BorderRadius.all(Radius.circular(5.0)),
                      border: Border.all(color: Colors.black),
                      boxShadow: [
                        BoxShadow(
                          color: Colors.grey.withOpacity(0.5),
                          spreadRadius: 2,
                          blurRadius: 7,
                          offset: Offset(0, 3),
                        )
                      ]
                  ),
                  child: Stack(
                      children: <Widget>[
                        Container(
                          width: 80.0.w,
                          height: 10.0.h,
                          decoration: new BoxDecoration(
                              shape: BoxShape.circle,
                              image: new DecorationImage(
                                fit: BoxFit.fitHeight,
                                image: AssetImage('assets/images/no_image.png'),
                              )),
                        ),

                        Container(
                            height: 10.0.h,
                            width: 10.0.w,
                            child:
                            new Image(
                              image: AssetImage(
                                  "assets/images/medal_third.png"),
                            )),

                        Stack(
                          alignment: Alignment.center,
                          children: <Widget>[
                            Text("Test",
                              style: TextStyle(
                                  fontWeight: FontWeight.bold,
                                  fontFamily: 'Roboto',
                                  color: const Color(0xFF3A404C),
                                  fontSize: 20.0.sp),
                              textAlign: TextAlign.center,
                            ),
                            new Align(alignment: Alignment.bottomCenter,
                              child: Text("Punti",
                                style: TextStyle(
                                    fontWeight: FontWeight.bold,
                                    fontFamily: 'Roboto',
                                    color: const Color(0xFF3A404C),
                                    fontSize: 15.0.sp),
                              ),
                            ),

                          ],
                        ),
                      ]),
                )],
            ),

            Column(
              children: <Widget>[
                Container(
                    height: 20.0.h,
                    width: 30.0.w,
                    decoration: BoxDecoration(
                        color: const Color(0xFFFFFFFF),
                        borderRadius: BorderRadius.all(Radius.circular(5.0)),
                        border: Border.all(color: Colors.black),
                        boxShadow: [
                          BoxShadow(
                            color: Colors.grey.withOpacity(0.5),
                            spreadRadius: 2,
                            blurRadius: 7,
                            offset: Offset(0, 3),
                          )
                        ]
                    ),
                    child: Stack(
                      children: <Widget>[
                        Container(
                          width: 80.0.w,
                          height: 10.0.h,
                          decoration: new BoxDecoration(
                              shape: BoxShape.circle,
                              image: new DecorationImage(
                                fit: BoxFit.fitHeight,
                                image: AssetImage('assets/images/no_image.png'),
                              )),
                        ),
                        Container(
                            height: 10.0.h,
                            width: 10.0.w,
                            child:
                            new Image(
                              image: AssetImage(
                                  "assets/images/medal_first.png"),
                            )),

                        Stack(
                          alignment: Alignment.center,
                          children: <Widget>[
                            Text("Test",
                              style: TextStyle(
                                  fontWeight: FontWeight.bold,
                                  fontFamily: 'Roboto',
                                  color: const Color(0xFF3A404C),
                                  fontSize: 20.0.sp),
                              textAlign: TextAlign.center,
                            ),
                            new Align(alignment: Alignment.bottomCenter,
                              child: Text("Punti",
                                style: TextStyle(
                                    fontWeight: FontWeight.bold,
                                    fontFamily: 'Roboto',
                                    color: const Color(0xFF3A404C),
                                    fontSize: 15.0.sp),
                              ),
                            ),

                          ],
                        ),
                      ],
                    )
                ),
              ],
            ),

            Column(
              children: <Widget>[
                Container(
                    height: 20.0.h,
                    width: 30.0.w,
                    decoration: BoxDecoration(
                        color: const Color(0xFFFFFFFF),
                        borderRadius: BorderRadius.all(Radius.circular(5.0)),
                        border: Border.all(color: Colors.black),
                        boxShadow: [
                          BoxShadow(
                            color: Colors.grey.withOpacity(0.5),
                            spreadRadius: 2,
                            blurRadius: 7,
                            offset: Offset(0, 3),
                          )
                        ]
                    ),
                    child: Stack(
                      children: <Widget>[
                        Container(
                          width: 80.0.w,
                          height: 10.0.h,
                          decoration: new BoxDecoration(
                              shape: BoxShape.circle,
                              image: new DecorationImage(
                                fit: BoxFit.fitHeight,
                                image: AssetImage('assets/images/no_image.png'),
                              )),
                        ),
                        Container(
                            height: 10.0.h,
                            width: 10.0.w,
                            child:
                            new Image(
                              image: AssetImage(
                                  "assets/images/medal_second.png"),
                            )),

                        Stack(
                          alignment: Alignment.center,
                          children: <Widget>[
                            Text(Nick,
                              style: TextStyle(
                                  fontWeight: FontWeight.bold,
                                  fontFamily: 'Roboto',
                                  color: const Color(0xFF3A404C),
                                  fontSize: 20.0.sp),
                              textAlign: TextAlign.center,
                            ),
                            new Align(alignment: Alignment.bottomCenter,
                              child: Text("Punti",
                                style: TextStyle(
                                    fontWeight: FontWeight.bold,
                                    fontFamily: 'Roboto',
                                    color: const Color(0xFF3A404C),
                                    fontSize: 15.0.sp),
                              ),
                            ),

                          ],
                        ),
                      ],
                    )
                ),
              ],
            ),

          ],
        ));
  }


  Widget showOtherPosition() {
    return Card(
      margin: EdgeInsets.symmetric(vertical: 4.0.h),
      elevation: 0,
      color: Colors.transparent,
      child: Padding(
          padding: EdgeInsets.symmetric(vertical: 0.5.h),
          child: Column(
            children: <Widget>[
              Wrap(
                spacing: 5.0,
                children: <Widget>[
                  Container(
                    height: 10.0.h,
                    width: 500.0.w,
                    color: Colors.transparent,
                    child: Container(
                      decoration: BoxDecoration(
                          color: const Color(0xFFFFFFFF),
                          borderRadius: BorderRadius.all(Radius.circular(10.0)),
                          boxShadow: [
                            BoxShadow(
                              color: Colors.grey.withOpacity(0.5),
                              spreadRadius: 1,
                              blurRadius: 7,
                              offset: Offset(0, 3),
                            )
                          ]
                      ),
                    ),
                  ),
                  SizedBox(height: 20),
                  Container(
                    height: 10.0.h,
                    width: 500.0.w,
                    color: Colors.transparent,
                    child: Container(
                      decoration: BoxDecoration(
                          color: const Color(0xFFFFFFFF),
                          borderRadius: BorderRadius.all(Radius.circular(10.0)),
                          boxShadow: [
                            BoxShadow(
                              color: Colors.grey.withOpacity(0.5),
                              spreadRadius: 1,
                              blurRadius: 7,
                              offset: Offset(0, 3),
                            )
                          ]
                      ),
                    ),
                  ),
                  SizedBox(height: 20),
                  Container(
                      height: 10.0.h,
                      width: 500.0.w,
                      color: Colors.transparent,
                      child: Container(
                        decoration: BoxDecoration(
                            color: const Color(0xFFFFFFFF),
                            borderRadius: BorderRadius.all(
                                Radius.circular(10.0)),
                            boxShadow: [
                              BoxShadow(
                                color: Colors.grey.withOpacity(0.5),
                                spreadRadius: 1,
                                blurRadius: 7,
                                offset: Offset(0, 3),
                              )
                            ]
                        ),
                      )),
                  SizedBox(height: 20),
                  Container(
                    height: 10.0.h,
                    width: 500.0.w,
                    color: Colors.transparent,
                    child: Container(
                      decoration: BoxDecoration(
                          color: const Color(0xFFFFFFFF),
                          borderRadius: BorderRadius.all(Radius.circular(10.0)),
                          boxShadow: [
                            BoxShadow(
                              color: Colors.grey.withOpacity(0.5),
                              spreadRadius: 1,
                              blurRadius: 7,
                              offset: Offset(0, 3),
                            )
                          ]
                      ),
                    ),
                  ),

                ],
              )
            ],
          )),
    );
  }

}
enum _SelectedTab {home, magazine, leaderboard, ProfilePage}
import'package:sizer/sizer.dart';
进口“包装:颤振/材料.省道”;
导入“包:firebase_auth/firebase_auth.dart”;
导入“包:cloud_firestore/cloud_firestore.dart”;
导入“包:goodgoals_android/pages/home_page.dart”;
导入“package:goodgoals_android/pages/profile_page.dart”;
进口“包装:所罗门底部酒吧/所罗门底部酒吧.省道”;
导入“package:goodgoals_android/services/authentication.dart”;
类soloLeaderboardPage扩展StatefulWidget{
soloLeaderboardPage({Key Key,this.auth,this.userId,this.logoutCallback,this.home})
:super(key:key);
最终BaseAuth-auth;
最终作废回拨注销回拨;
最终字符串用户标识;
最终主页主页;
@凌驾
State createState()=>新建的_soloLeaderboardPageState();
}
类_soloLeaderboardPageState扩展状态{
final _formKey=新的GlobalKey();
final databaseReference=FirebaseFirestore.instance;
final FirebaseAuth _FirebaseAuth=FirebaseAuth.instance;
var _selectedTab=_selectedTab.排行榜;
var Nick=“”;
@凌驾
void initState(){
super.initState();
异步方法();
}
void asyncMethod()异步{
等待GetLeadboard();
}
无效(内部交换){
设置状态(){
_selectedTab=_selectedTab.values[i];
打印(“Valore$i”);
如果(i==0){
导航器。推(
上下文
材料路线(
生成器:(上下文)=>主页(),
));
}
else如果(i==3){
导航器。推(
上下文
材料路线(
生成器:(上下文)=>ProfilePage(),
));
}
else如果(i==2){
导航器。推(
上下文
材料路线(
生成器:(上下文)=>soloLeaderboardPage(),
));
}
});
}
未来的GetLeadboard()异步{
return wait wait FirebaseFirestore.instance
.收藏(“排行榜”)
.orderBy('Score',降序:true)
.限额(7)
.get()
.然后((QuerySnapshot QuerySnapshot)=>{
querySnapshot.docs.forEach((doc){
设置状态(){
尼克=(文件[“分数]);
});
}),
});
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
主体:堆栈(
儿童:[
_showForm(),
]
),
);
}
小部件_showForm(){
退回新货柜(
填充:所有边缘设置(10.0),
儿童:新表格(
键:_formKey,
子:新列表视图(
物理学:const NeverScrollableScrollPhysics(),
收缩膜:对,
儿童:[
leaderbordSelector(),
showPodium1(),
showOtherPosition(),
bottomBarMissic(),
//bottomBarMissic(),
],
),
));
}
Widget-bottomBarMimic(){
返回定位(
宽度:100.0.w,
底部:0,
左:0,,
子:容器(
颜色:颜色,白色,
孩子:所罗门群岛(
currentIndex:_SelectedTab.values.indexOf(_SelectedTab),
onTap:_handleIndexChanged,
项目:[
所罗门水底气压计(
图标:图标(Icons.home),
标题:文本(“主页”),
selectedColor:Colors.purple,
),
所罗门水底气压计(
图标:图标(图标、菜单、书本、锐利),
标题:文本(“杂志”),
selectedColor:Colors.pink,
),
所罗门水底气压计(
图标:图标(图标、条形图),
标题:文本(“排行榜”),
selectedColor:Colors.orange,
),
所罗门水底气压计(
图标:图标(Icons.person),
标题:文本(“简介”),
selectedColor:Colors.teal,
),
],
)),
);
}
Widget leaderbordSelector(){
返回新的填充(
填充:边缘组。对称(垂直:5.0.h,水平:17.0.h),
孩子:排(
儿童:[
图标按钮(
图标:图标(Icons.person,颜色:Colors.blue),
onPressed:(){}
),
图标按钮(
图标:图标(Icons.people),
onPressed:(){}
),
],
),
);
}
小部件showPodium1(){
返回容器(
孩子:排(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
纵队(
儿童:[
容器(
高度:20.0.h,
宽度:30.0.w,
装饰:盒子装饰(
颜色:常量颜色(0xFFFFFF),
borderRadius:borderRadius.all(半径.圆形(5.0)),
边框:边框。全部(颜色:颜色。黑色),
boxShadow:[
箱形阴影(
颜色:颜色。灰色。不透明度(0.5),
扩展半径:2,
半径:7,
偏移量:偏移量(0,3),
var firstName = "";

Future<void> getLeaderboard() async {   
    return await FirebaseFirestore.instance
        .collection("leaderboard")
        .orderBy('Score', descending: true)
        .limit(7)
        .get()
        .then((QuerySnapshot querySnapshot) => {
        querySnapshot.docs.forEach((doc) {
          setState(() {
             firstName = (doc["first_name"]);                                    
          });
        }),
    });
  }
  Text("NICK HERE",...),