Как определить тип «_InternalLinkedHashMap <динамический, динамический>» не является подтипом типа «Карта <String, динамический> - PullRequest
1 голос
/ 03 мая 2019

Я пытаюсь получить пользовательские данные, но при этом получаю ошибку ниже:

Exception: type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>

Я посмотрел на различные решения для аналогичной проблемы и соответственно изменил свой код (например: использовал <String, dynamic> вместо <dynamic, dynamic>, но все еще вижу эту ошибку.

Фрагмент модели:

// Returns a Pro created from JSON
  factory Pro.fromJson(Map<String, dynamic> json) {
    Pro pro = Pro();

    pro.uid = json['uid'];
    pro.email = json['email'];

И извлекаем эти данные, как показано ниже, и вызываем этот метод в initState():

Future<Pro> _getPro() async {
    await userDatabaseReference.once().then((DataSnapshot snapshot) {
      Map<String, dynamic> values = snapshot.value;
      values["uid"] = snapshot.key;
      print(snapshot.key); 
      Pro fetchedUser = Pro.fromJson(values);
      setState(() {
        this.pro = fetchedUser;
      });
    });
  }

Если я использую Map<String, dynamic> values, тогда я получаю ошибку в той же строке, а если я использую Map<dynamic, dynamic> values, то я получаю ошибку в: Pro fetchedUser = Pro.fromJson(values)

Так как Pro.fromJson(values) имеет тип параметра Map<String, dynamic>это тот же тип параметра, который я использовал для объявления values, но все еще не уверен, почему он выдает ошибку.

1 Ответ

2 голосов
/ 03 мая 2019

Пожалуйста, попробуйте, как показано ниже, где мы сначала конвертируем значения в Map.from (), а затем используем это с методом fromJson модели Pro:

Future<Pro> _getPro() async {
    await userDatabaseReference.once().then((DataSnapshot snapshot) {
      Map<String, dynamic> values = snapshot.value;
      values["uid"] = snapshot.key;
      print(snapshot.key); 
      final mapJsonCategory = Map<String, dynamic>.from(values);
      Pro fetchedUser = Pro.fromJson(mapJsonCategory);
      setState(() {
        this.pro = fetchedUser;
      });
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...