问题描述
Exception caught by widgets library
Closure call with mismatched arguments: function '[]'
Receiver: Closure: () => Map<String,dynamic> from Function 'data':.
Tried calling: []("imageURL")
Found: []() => Map<String,dynamic>
我一直试图使用它从Firestore中获取数据并将其显示在我的应用页面上。但是我无法从集合中获取数据,尤其是对于图像。我从youtube引用了本教程。即使我做了所有相同的事情,但我无法处理。也许是公元前的版本。如果您能帮助我,我会很高兴。
class _HomeState extends State<Home> {
PostService postService = new PostService();
Stream postStream;
//Stream postsstream;
Widget postsList() {
return SingleChildScrollView(
child: postStream != null
? Column(
children: <Widget>[
StreamBuilder(
//stream: postStream,stream: postStream,builder: (context,snapshot)
{
if(snapshot.data == null) return CircularProgressIndicator();
return ListView.builder(
padding: EdgeInsets.symmetric(horizontal:16.0),itemCount: snapshot.data.docs.length,shrinkWrap: true,itemBuilder: (context,index) {
return PostTile(
imgurl: snapshot.data.docs[index].data['imageURL'],title: snapshot.data.docs[index].data['postTitle'],desc: snapshot.data.docs[index].data['postDesc'],city: snapshot.data.docs[index].data['cityName'],);
});
}),],): Container(
alignment: Alignment.center,child: CircularProgressIndicator(),),);
}
@override
void initState() {
postService.getPostData().then((result) {
setState(() {
postStream = result;
});
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,appBar: AppBar(
title: Text('Ana Sayfa'),backgroundColor: Colors.Amber,elevation: 0.0,actions: <Widget>[
FlatButton.icon(
icon: Icon(Icons.group_rounded),label: Text(''),onpressed: () {
Navigator.push(
context,MaterialPageRoute(
builder: (context) => KullaniciSayfasi()));
},body: postsList(),floatingActionButton: Container(
padding: EdgeInsets.symmetric(vertical: 10.0),child: Row(
mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
FloatingActionButton(
onpressed: () {
//Ekleme butonuna basıldığında
Navigator.push(context,MaterialPageRoute(builder: (context) => CreatePost()));
},child: Icon(Icons.add),)
],);
} }
邮政服务代码
import 'package:cloud_firestore/cloud_firestore.dart';
class PostService{
Future<void> addData(postData) async{
FirebaseFirestore.instance.collection("posts").add(postData).catchError((e){
print(e);
});
}
getPostData() async{
return await FirebaseFirestore.instance.collection("posts").snapshots();
}
}
解决方法
firebase插件发生了重大变化,并且发生了许多变化。例如,我看到您在做snapshot.data.docs[index].data['imageURL']
,这已更改为snapshot.data.docs[index].data()['imageURL']
。请检查文档以获取更新的API引用