将来的构建器返回的长度为null

时间:2020-09-03 09:28:30

标签: flutter google-cloud-firestore

我要从Cloud Firestore检索数据,并使用Future构建器和Listview Builder显示数据。但是我在Listview构建器中得到的是空值,即始终显示CircularProgressIndicator。无法解决问题。任何解决方案都会有很大帮助。

print(values)函数可以成功打印出[9,8]

这是我实现的代码:

Future<List> getassignment() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    final name = prefs.getString('orgname') ?? '';
    print(name);
    

      var query = FirebaseFirestore.instance.collection('Org').doc(name).collection('Login').doc(FirebaseAuth.instance.currentUser.uid);
    query.snapshots().forEach((doc) {

    List values = List.from(doc.data()['fields']['class']);
    print(values);
    return values;

    });

  }

  // void getlist() async{
  //   await getassignment();
  // }       

  @override
  void initState() {
    
    // getlist();
    super.initState();
  }

  

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Color(0xFF1976D2),
      body: FutureBuilder(
        future: getassignment(),
        builder: (context,snapshot){
          List list = snapshot.data;
          if (!snapshot.hasData) {
            return Center(child: CircularProgressIndicator());
         } else{
           return Container(
             child: ListView.builder(
          itemCount: snapshot.data.length,
          itemBuilder: (context, position) {
            return GestureDetector(
              onTap: (){
                Navigator.of(context).push(MaterialPageRoute<Null>(
                                      builder: (BuildContext context){
                                        return new SubjectList(
                                          clas: list[position].toString(),
                                        );
                                      }
                                      ));
              },
              child: Card(
                
                child: Padding(
                  padding: const EdgeInsets.all(16.0),
                  child: Text(list[position].toString(), style: TextStyle(fontSize: 22.0),),
                  
                ),
              ),
            );
          },
        ),
           );
         }
        },
              
      ),
    );
  }
 

1 个答案:

答案 0 :(得分:1)

您正在foreach循环内分配和返回数据。这样就不会返回任何内容。

// try adding await in this line.
var query = await FirebaseFirestore.instance.collection('Org').doc(name).collection('Login').doc(FirebaseAuth.instance.currentUser.uid);

List values = query.snapshots().forEach((doc) => List.from(doc.data()['fields']['class']));

print(values);
return values;

您需要执行以下操作。