Ошибка при запросе к серверу - Flutter и Firebase - PullRequest
0 голосов
/ 10 марта 2020

У меня есть возврат этой структуры firebase (realTimeDatabase) ...

{
  "aut": {
    "id": 1,
    "name": "Autoconhecimento",
    "url": "https://myurlPhoto"
  },
  "autD": {
    "id": 2,
    "name": "Autodomínio",
    "url": "url": "https://myurlPhoto"
  },
  "pisc": {
    "id": 3,
    "name": "Psicopatologia",
    "url": "url": "https://myurlPhoto"
  },
  "rel": {
    "id": 4,
    "name": "Relacionamento",
    "url": "url": "https://myurlPhoto"
  }
}

И этот класс был создан для получения данных, возвращаемых из базы firebase

class Topics {
      Tp topic;

      Topics({this.topic});

      Topics.fromJson(Map<String, dynamic> json) {
        topic = json['aut'] != null ? new Tp.fromJson(json['aut']) : null;
      }

      Map<String, dynamic> toJson() {
        final Map<String, dynamic> data = new Map<String, dynamic>();
        if (this.topic != null) {
          data['aut'] = this.topic.toJson();
        }
        return data;
      }
    }

    class Tp {
      int id;
      String name;
      String url;

      Tp({this.id, this.name, this.url});

      Tp.fromJson(Map<String, dynamic> json) {
        id = json['id'];
        name = json['name'];
        url = json['url'];
      }

      Map<String, dynamic> toJson() {
        final Map<String, dynamic> data = new Map<String, dynamic>();
        data['id'] = this.id;
        data['name'] = this.name;
        data['url'] = this.url;
        return data;
      }
    }

часть кода, которая делает вызов к запросу и анализатору json, это

final db = FirebaseDatabase.instance.reference();
class TopicsApi {

  static Future<List<Topics>> getTopics() async {
    var url = 'https://MYAPP.firebaseio.com/MYNODE.json';      
    var response = await http.get(url);
    String json = response.body;
    print("JSON Topics>> $json");     
    List list = convert.json.decode(json);
    print("LIST Topics>> ${list.toString()}");
    final t = list.map<Topics>((map) => Topics.fromJson(map)).toList();
    return t;    
  }
}

class TopicsBloc extends SimpleBloc<List<Topics>>{
  fetch() async{
    try {
      print("<< TOPICS >>");
      List<Topics> t = await TopicsApi.getTopics();
      print("<<TOPICS ${t.toString()}");
      add(t);
    } catch (e){
      addError(e);
    }
  }
}
class SimpleBloc<T>{
  final _controller = StreamController<T>();
  Stream<T> get stream => _controller.stream;

  void add(T object){
    _controller.add(object);
  }

  void addError(Object error){
    if(! _controller.isClosed){
      print("<< ERRO  >> ${error.toString()}");
      _controller.addError(error);
    }
  }
  void dispose() {
    _controller.close();
  }
}

, это JSON, который возвращается из запроса firebase

JSON Topics>> {"aut":{"id":1,"name":"Teste card","url":"MYurlPHOTO"},"rel":{"id":2,"name":"teste","url":"MYurlPHOTO"}}

при запуске Я получаю следующее сообщение об ошибке:

флаттер: << ERROR >> тип '_InternalLinkedHashMap' не является подтипом типа 'List'

Я пытался чтобы найти проблему на некоторое время, но я не могу найти, что это может вызвать.

Мне нужно получить контент, который находится в подпункте каждого узла. например, в узле AUT мне нужно получить данные из URL-адреса ИМЕНИ для использования в дальнейшем на моем объекте Topi c

У кого-нибудь есть какие-либо советы по этой проблеме?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...