1

I updated flutter3 after that I get an error "type '_Map<Object?, Object?>' is not a subtype of type 'Map<String?, dynamic>' in type cast" printed on the console in this line:

itemId = (event.snapshot.value as Chat).itemId;

this is Chat Class:

    class Chat extends MyObject<Chat?> {
  Chat({
    this.itemId,
    this.receiverId,
    this.senderId,
  });

  String? itemId;
  String? receiverId;
  String? senderId;

  @override
  bool operator ==(dynamic other) => other is Chat && itemId == other.itemId;

  @override
  int get hashCode => hash2(itemId.hashCode, itemId.hashCode);

  @override
  String? getPrimaryKey() {
    return itemId;
  }

  @override
  List<Chat?> fromMapList(List<dynamic> dynamicDataList) {
    final List<Chat?> subCategoryList = <Chat?>[];
    for (dynamic dynamicData in dynamicDataList) {
      if (dynamicData != null) {
        subCategoryList.add(fromMap(dynamicData));
      }
    }
    return subCategoryList;
  }

  @override
  Chat? fromMap(dynamic dynamicData) {
    if (dynamicData != null) {
      return Chat(
        itemId: dynamicData['itemId'],
        receiverId: dynamicData['receiver_id'],
        senderId: dynamicData['sender_id'],
      );
    } else {
      return null;
    }
  }

and in addition:

  @override
  List<Map<String, dynamic>?> toMapList(List<Chat?> objectList) {
    final List<Map<String, dynamic>?> mapList = <Map<String, dynamic>?>[];
    for (Chat? data in objectList) {
      if (data != null) {
        mapList.add(toMap(data));
      }
    }
    return mapList;
  }

  @override
  Map<String, dynamic>? toMap(Chat? object) {
    if (object != null) {
      final Map<String, dynamic> data = <String, dynamic>{};
      data['itemId'] = object.itemId;
      data['receiver_id'] = object.receiverId;
      data['sender_id'] = object.senderId;
      return data;
    } else {
      return null;
    }
  }
}

the other class is:

abstract class MyObject<T> {


String? key = '0';

  String? getPrimaryKey();

  T fromMap(dynamic dynamicData);

  Map<String, dynamic>? toMap(T object);

  List<T> fromMapList(List<dynamic> dynamicDataList);

  List<Map<String, dynamic>?> toMapList(List<T> objectList);
}

how Can I solve it? also I upgraded firebase and dataset to last version.

1 Answers1

1

Finally I solved this here:

//itemId = (event.snapshot.value as Chat).itemId;

final Map<Object?, Object?> _itemId =
    event.snapshot.value as Map<Object?, Object?>;

final Object? itemin = _itemId.values.elementAt(0);
final Object? _receiverId = _itemId.values.elementAt(1);

if (_receiverId == psValueHolder.loginUserId &&
    itemin == widget.itemId) {
  if (isActive != ChatUserStatus.active && mounted) {
    setState(() {
      status = Utils.getString(context, 'chat_view__status_active');
      isActive = ChatUserStatus.active;
    });
  }
} else {
  if (isActive != ChatUserStatus.in_active) {
    setState(() {
      status = Utils.getString(context, 'chat_view__status_inactive');
      isActive = ChatUserStatus.in_active;
    });
  }
}

}