Reputation: 119
I have an error on the "snap.snapshot.value" parameter in the following line "var map = Map <String, dynamic> .from (snap.snapshot.value);". The error is "The argument type 'Object?' can't be assigned to the parameter type 'Map <dynamic, dynamic>'. "
class _HomePageState extends State<HomePage> {
List<Posts> postsList = [];
@override
void initState() {
super.initState();
DatabaseReference postsRef = FirebaseDatabase.instance.reference().child("Posts");
postsRef.once().then((snap) {
var map = Map<String, dynamic>.from(snap.snapshot.value); <--- the error is here
postsList.clear();
map.forEach((key, value) {
var values = Map<String,dynamic>.from(map);
Posts posts = Posts
(
values['url'],
values['descrizione'],
values['data'],
values['ora']
);
postsList.add(posts);
});
Upvotes: 4
Views: 14818
Reputation: 161
var map = Map<String, dynamic>.from(snap.snapshot.value as Map<dynamic, dynamic>);
to
var map = Map<Object?, dynamic>.from(snap.snapshot.value as Map<Object?, dynamic>);
Because Firebase Date DatabaseRef Require / fetch Data in Object Form So Convert The Map data Into Object?
Upvotes: 0
Reputation: 71
In your Posts model, you need to remove any explicit object casting. e.g. change from
`Posts.fromMap(Map<String, dynamic> map) {
comments: List<String>.from((map['comments'] as List<String>))
}`
to
`Posts.fromMap(Map<String, dynamic> map) {
comments: List<String>.from((map['comments'] as List))
}`
so it's cast as a List and no farther
Upvotes: 1
Reputation: 3514
This is because Map.from function accepts a Map<dynamic, dynamic> but you are passing the object
instead. So to pass as the same use casting like below :
var map = Map<String, dynamic>.from(snap.snapshot.value as Map<dynamic, dynamic>);
Upvotes: 3
Reputation: 7492
Would you change a code like below?
From
var map = Map<String, dynamic>.from(snap.snapshot.value);
To
Map<String, dynamic> map = snap.snapshot.value as Map<String, dynamic>
Upvotes: 10