Expected a value of type 'Map<String, dynamic>', but got one of type '() => Map<String, dynamic>?'


I’m developing web app with flutter using Firebase cloud firestore.

I want to get values from firestore, but error occurs and can’t get them.


Expected a value of type ‘Map<String, dynamic>’, but got one of type ‘() => Map<String, dynamic>?’


  Future<String> getData(String collection, String field) async {
    DocumentSnapshot docSnapshot =
        await FirebaseFirestore.instance.collection(collection).doc().get();
    Map<String, dynamic> record = docSnapshot.data as Map<String, dynamic>;
    return record[field];

              future: getData("users", "userName"),
              builder: (context, snapshot) {
                if (snapshot.connectionState != ConnectionState.done) {
                  return const SizedBox(
                    width: 50,
                    child: LinearProgressIndicator(),

                if (snapshot.hasError) {
                  return SelectableText(snapshot.error.toString());

                if (!snapshot.hasData) {
                  return const Text('No data found');

                return Text('${snapshot.data}');

This code is FutureBuilder that calls getData() and displays an error statement on the screen when an error occurs.

After a bit of research, I found a way to get rid of the error this way. code like this;

Map<String,dynamic> record = new Map<String,dynamic>.from(docSnapshot.data["songs"]);

However, this is grammatically incorrect and will result in a compilation error.
Firestore seems to have changed a lot between 2019 and now, is that the cause?


This is not valid for DocumentSnapshot.

Can anyone resolve this error? thank you.

Addition 1;

I changed code but other similar error occurred.
The first error has been resolved.

    Map<String, dynamic> record = docSnapshot.data() as Map<String, dynamic>;

Expected a value of type ‘Map<String, dynamic>’, but got one of type

Firestore confirmed that the data "userName" was existed correctly.



I believe DocumentSnapshot.data is a method, so you should change it to: DocumentSnapshot.data()

Answered By – h8moss

Answer Checked By – Jay B. (FlutterFixes Admin)

Leave a Reply

Your email address will not be published. Required fields are marked *