У меня есть возврат этой структуры 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
У кого-нибудь есть какие-либо советы по этой проблеме?