错误在Flutter中检索Firebase集合数时?

时间:2019-12-11 08:54:09

标签: firebase flutter dart google-cloud-firestore

我正在开发一个管理应用程序,因为我想显示云Firestore中的用户数(集合)。当我尝试执行此操作时,无法以十进制显示值,但在我的应用程序中显示为0。 有人可以帮忙吗,这是我的代码

class _AdminState extends State<Admin> {
  getUsersCount() {
    var length = 0;
    Firestore.instance.collection('users').getDocuments().then((myDocuments){
      print("${myDocuments.documents.length}");
      length = myDocuments.documents.length;
    });
    return length.toString();

  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Row(
            children: <Widget>[
              Expanded(
                  child: FlatButton.icon(
                      onPressed: () {
                        setState(() => _selectedPage = Page.dashboard);
                      },
                      icon: Icon(
                        Icons.dashboard,
                        color: _selectedPage == Page.dashboard
                            ? active
                            : notActive,
                      ),
                      label: Text('Dashboard'))),
              Expanded(
                  child: FlatButton.icon(
                      onPressed: () {
                        setState(() => _selectedPage = Page.manage);
                      },
                      icon: Icon(
                        Icons.sort,
                        color:
                        _selectedPage == Page.manage ? active : notActive,
                      ),
                      label: Text('Manage'))),
            ],
          ),
          elevation: 0.0,
          backgroundColor: Colors.white,
        ),
        body: _loadScreen());
  }

  Widget _loadScreen() {
    switch (_selectedPage) {
      case Page.dashboard:


        return Column(
          children: <Widget>[
            ListTile(
              subtitle: Text(
                'Admin View',
                textAlign: TextAlign.center,
                style: TextStyle(fontSize: 29.0, color: Colors.indigo,fontWeight: FontWeight.bold),
              ),
            ),
            Expanded(
              child: GridView(
                gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                    crossAxisCount: 2,


                ),
                children: <Widget>[
                  Padding(

                    padding: const EdgeInsets.all(18.0),
                    child: Card(

                      child: ListTile(
                          title: FlatButton.icon(

                              onPressed: null,
                              icon: Icon(Icons.directions_boat,color: Colors.black,),
                              label: Text("Boats",style: TextStyle(fontSize: 9,color: Colors.indigo),)),
                          subtitle: Text(
                            '3',
                            textAlign: TextAlign.center,
                            style: TextStyle(color: active, fontSize: 50.0),
                          )),
                    ),
                  ),
                  Padding(
                    padding: const EdgeInsets.all(18.0),
                    child: Card(

                      child: ListTile(
                          title: FlatButton.icon(
                              onPressed: null,
                              icon: Icon(Icons.people,color: Colors.black,),
                              label: Text("Users",style: TextStyle(fontSize: 9,color: Colors.indigo),)),
                          subtitle: Text(
                            getUsersCount(),
                            textAlign: TextAlign.center,
                            style: TextStyle(color: active, fontSize: 50.0),
                          )),
                    ),
                  ),
                  Padding(
                    padding: const EdgeInsets.all(22.0),
                    child: Card(
                      child: ListTile(
                          title: FlatButton.icon(
                              onPressed: null,
                              icon: Icon(Icons.bookmark,color: Colors.black,),
                              label: Text("Bookings",style: TextStyle(fontSize: 8,color: Colors.indigo),)),
                          subtitle: Text(
                            '120',
                            textAlign: TextAlign.center,
                            style: TextStyle(color: active, fontSize: 50.0),
                          )),
                    ),
                  ),
                ],

              ),

            ),
          ],
        );
        break;

我的终端正在打印数据库中可用的确切值。终端看起来像这样 enter image description here

我的应用程序屏幕截图如下所示 enter image description here

Padding(
                    padding: const EdgeInsets.all(18.0),
                    child: Card(

                      child: ListTile(
                          title: FlatButton.icon(
                              onPressed: null,
                              icon: Icon(Icons.people,color: Colors.black,),
                              label: Text("Users",style: TextStyle(fontSize: 9,color: Colors.indigo),)),
                          subtitle: Text(
                            getUsersCount(),
                            textAlign: TextAlign.center,
                            style: TextStyle(color: active, fontSize: 50.0),
                          )),
                    ),
                  ),

enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

getDocuments()是异步的,那么您需要返回类型为Future的值,以便以后能够获取返回的值:

 Future<String> getUsersCount() {
    var length = 0;
    Firestore.instance.collection('users').getDocuments().then((myDocuments){
      print("${myDocuments.documents.length}");
      length = myDocuments.documents.length;
    });
    return Future.value(length.toString());
  }

然后,当您调用它时,您可以执行以下操作:

getUsersCount().then((value){
    print(value);
  });