我正在尝试使用streambuilder检索数组“类”,如下图所示。我使用future builder尝试了同样的方法,但是从前面提出的问题中找不到合适的解决方案。如何获取课程列表并显示在列表视图中?
当我将鼠标悬停在显示以下内容的['fields']上时,错误发生在snapshot.data['fields']['class'][position]
:
不能将参数类型'String'分配给参数类型'int'
我使用streambuilder实现了以下代码:
var ref;
List values = [];
Future<void> getassignment() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
final name = prefs.getString('orgname') ?? '';
print(name);
var ref = FirebaseFirestore.instance.collection('Org').doc(name).collection('Login').doc(FirebaseAuth.instance.currentUser.uid);
print(ref);
ref.snapshots().forEach((doc) {
values = List.from(doc.data()['fields']['class']);
print(values);
});
}
@override
void initState() {
getassignment();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Color(0xFF1976D2),
body: StreamBuilder<List<DocumentSnapshot>>(
stream: ref.snapshots(),
builder: (context,snapshot){
if(!snapshot.hasData){
print("Error");
}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:snapshot.data['fields']['class'][position].toString(),
);
}
));
},
child: Card(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Text(snapshot.data['fields']['class'][position].toString(), style: TextStyle(fontSize: 22.0),),
),
),
);
},
),
);
}
},
)
);
}
答案 0 :(得分:1)
您的类数组中的数据实际上是一个字符串,而不是整数。您可以知道,因为它的值前后都有引号。如果它是数字类型的值,则不会带引号。
如果在那里需要数字,则写数据的代码应使用数字类型变量,而不是字符串。您可能必须convert it to a number first。
如果您无法更改编写文档的代码,那么您将不得不更改读取数据库的代码以将字符串转换为数字。