首页 > 解决方案 > 未来的建设者将长度返回为空

问题描述

我正在从 cloud firestore 检索数据并使用 Future builder 和 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),),
                  
                ),
              ),
            );
          },
        ),
           );
         }
        },
              
      ),
    );
  }
 

标签: fluttergoogle-cloud-firestore

解决方案


您在 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;

你需要做这样的事情。


推荐阅读