Ошибка при возврате количества отсчетов в флаттере Firebase? - PullRequest
1 голос
/ 11 декабря 2019

Я занимаюсь разработкой приложения для администраторов, которое устало возвращать количество пользователей из firebase, я получил небольшую помощь от stackoverflow и смог печатать в терминале, но его нулевое возвращение в приложении может кто-то помочь, пожалуйстаme.this мой код

    class _AdminState extends State<Admin> {



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




  Page _selectedPage = Page.dashboard;
  MaterialColor active = Colors.indigo;
  MaterialColor notActive = Colors.grey;
  final databaseReference = Firestore.instance;



  bool isDelete= true;
  var values;

  TextEditingController categoryController = TextEditingController();
  TextEditingController brandController = TextEditingController();
  GlobalKey<FormState> _categoryFormKey = GlobalKey();
//GlobalKey<FormState> _brandFormKey = GlobalKey();
// BrandService _brandService = BrandService();
  CategoryService _categoryService = CategoryService();





  @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 FutureBuilder(
            future: getUsersCount(),
            builder: (BuildContext context, AsyncSnapshot<String> text) {
              print(text);
              if(text== "-1"){
              return CircularProgressIndicator();
              } else {
                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(text.data != null ? text.data : '',
                                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),
                                )),
                          ),
                        ),
                      ],

                    ),

                    ),
                  ],
                );
              } })

я возвращал нулевое строковое значение, но когда включил этот набор строк Text (text.data ?? 'default value'), я смог очистить эту ошибку, но все еще неткто-то может решить мою проблему, пожалуйста, помогите мне enter image description here

1 Ответ

0 голосов
/ 11 декабря 2019

Инициализируйте ваш length to -1 в методе getUsersCount, а затем в build method перед возвратом cloumn widget, проверьте текст (значение снимка):

if (text == "-1"){
  return Center(
    child: CircularProgressIndicator(backgroundColor: Colors.red,)
  );
} else{
  return Column(....)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...