Issue
Currently working on Grocery Application but getting an error: The operator '[]' isn't defined for the type 'Object'. Tried searching online but got no solution. Flutter Developers help me resolve the error.
import 'package:cloud_firestore/cloud_firestore.dart';
class UserModel{
static const NUMBER = 'number';
static const ID = 'id';
late String _number;
late String _id;
String get number => _number;
String get id => _id;
UserModel.fromSnapShot(DocumentSnapshot documentSnapshot){
_number = documentSnapshot.data()![NUMBER];
_id = documentSnapshot.data()![ID];
}
}
UPDATE: ERROR FIXED
import 'package:cloud_firestore/cloud_firestore.dart';
class UserModel{
static const NUMBER = 'number';
static const ID = 'id';
String? _number;
String? _id;
String? get number => _number;
String? get id => _id;
UserModel.fromSnapShot(DocumentSnapshot<Map<String,dynamic>> documentSnapshot){
_number = documentSnapshot.data()![NUMBER];
_id = documentSnapshot.data()![ID];
}
}
Solution
An important detail for DocumentSnapshot is that it is defined with a generic:
DocumentSnapshot<T extends Object?>
https://pub.dev/documentation/cloud_firestore/latest/cloud_firestore/DocumentSnapshot-class.html
Where T is then used by the data() method signature:
data() → T?
If we don't specify anything in the generic part, Dart will in this case automatically assume T is Object?. This is a problem in your case since Object? does not have any [String] operator.
You therefore need to explicit tell Dart what type you expect T to be by doing something like this:
UserModel.fromSnapShot(DocumentSnapshot<Map<String,dynamic>> documentSnapshot){
Here we tell Dart that T in DocumentSnapshot should be Map<String,dynamic> so when we call data(), Dart can assume that you get a Map<String,dynamic>? typed object back (notice it will always add ? at the end because that is how data() is defined).
Answered By - julemand101

0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.