The argument type 'Map Function()' can't be assigned to the parameter type 'Map'

后端 未结 4 1140
梦谈多话
梦谈多话 2021-01-05 03:02

This could initially was working but after firebase update, it is now giving me this error. I have added asterisks to the part giving the error. The error message has been

相关标签:
4条回答
  • 2021-01-05 03:28

    This is how I solved it.

    import 'package:cloud_firestore/cloud_firestore.dart';
    
    class Record {
      final String name;
      final int totalVotes;
      final DocumentReference reference;
    
      Record.fromMap(Map<String, dynamic> map(), {this.reference})
          : assert(map()['name'] != null),
            assert(map()['totalVotes'] != null),
            name = map()['name'],
            totalVotes = map()['totalVotes'];
    
      Record.fromSnapshot(DocumentSnapshot snapshot)
          : this.fromMap(snapshot.data, reference: snapshot.reference);
    
      @override
      String toString() => "Record<$name:$totalVotes>";
    }
    
    class Voters {
      String uid;
      String voteId;
      String markedVoteOption;
    }
    
    
     /// Contains all the data of this [DocumentSnapshot].
      Map<String, dynamic> data() {
        return _CodecUtility.replaceDelegatesWithValueInMap(
            _delegate.data(), _firestore);
      }
    
    0 讨论(0)
  • 2021-01-05 03:35

    Try the following:

      Record.fromSnapshot(DocumentSnapshot snapshot)
          : this.fromMap(snapshot.data(), reference: snapshot.reference);
    

    data() is a method:

      /// Contains all the data of this [DocumentSnapshot].
      Map<String, dynamic> data() {
        return _CodecUtility.replaceDelegatesWithValueInMap(
            _delegate.data(), _firestore);
      }
    

    that returns a Map<String, dynamic>

    0 讨论(0)
  • 2021-01-05 03:38

    It's because DocumentSnapshot.data() is a function that returns Map<String, dynamic>.

    So, the answer is:

      Record.fromSnapshot(DocumentSnapshot snapshot)
          : this.fromMap(snapshot.data(), reference: snapshot.reference);
    
    0 讨论(0)
  • 2021-01-05 03:48

    Apparently all that was needed was parentheses on the maps

    import 'package:cloud_firestore/cloud_firestore.dart';
    
    class Record {
      final String name;
      final int votes;
      final DocumentReference reference;
    
      Record.fromMap(Map<String, dynamic> map(), {this.reference})
          : assert(map()['name'] != null),
            assert(map()['votes'] != null),
            name = map()['name'],
            votes = map()['votes'];
    
      Record.fromSnapshot(DocumentSnapshot snapshot)
          : this.fromMap(snapshot.data, reference: snapshot.reference);
    
      @override
      String toString() => "Record<$name:$votes>";
    }
    
    
    0 讨论(0)
提交回复
热议问题