Emilio Verde
Emilio Verde

Reputation: 119

The argument type 'Object?' can't be assigned to the parameter type 'Map<dynamic, dynamic>'

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

Answers (4)

Vivek Yadav
Vivek Yadav

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

lookdadnomilk
lookdadnomilk

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

Diwyansh
Diwyansh

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

KuKu
KuKu

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

Related Questions