flutter - 未来的建设者将长度返回为空
问题描述
我正在从 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),),
),
),
);
},
),
);
}
},
),
);
}
解决方案
您在 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;
你需要做这样的事情。
推荐阅读
- javascript - 计算对象数组中属性的平均值
- javascript - 获取偶数个数组的中间两项
- javascript - React - hide component when an element in Navigation menu is clicked
- xamarin - Xamarin ios 14 permissions not showing in device settings
- google-analytics - User identification in Google Analytics
- c++ - 在 CMAKE 项目 Visual Studio 中添加自定义标头
- node.js - Nodejs和使用未存储在Firefox中的会话数据表达,chrome浏览器工作正常
- sql - Laravel 8 - 模型上的“刷新()”不执行匿名全局范围
- qt - 在 QLabel 中单独为字符着色
- angular - 无法访问角度类服务返回的数据