所以我试图从api端点获取JSON并订阅它。端点基于Firebase Cloud Functions构建。
如果这样做,是否会在数据库中发生某些更改时更新项目?还是我必须先刷新或移至另一个视图然后再返回才能获取更改?
错误:Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>'
代码和我正在关注的教程:https://www.youtube.com/watch?v=hvvYA1N-tEc&list=PLLLVjvC0H5GbU-E9hyj9ZEMTtfqmgVwWD
List<Termmodel> list = [];
StreamController<Termmodel> streamController;
@override
void initState() {
super.initState();
streamController = StreamController.broadcast();
streamController.stream.listen((t) => {
setState(() => list.add(t)),
});
_load(streamController);
}
class Termmodel {
final String term;
final String docid;
Termmodel({this.term, this.docid});
factory Termmodel.fromJson(Map json) {
return Termmodel(
term: json['term'],
docid: json['docid'],
);
}
}
加载模块:
_load(StreamController<Termmodel> sc) async {
String url =
'... api url here ...';
var client = new http.Client();
var req = new http.Request('get', Uri.parse(url));
var streamedRes = await client.send(req);
streamedRes.stream
.transform(utf8.decoder)
.transform(json.decoder)
.expand((e) => e)
.map((data) => Termmodel.fromJson(data))
.pipe(streamController);
}
API的响应格式如下:
{"results":[{"docid":"-12345","term":"myterm"}]}
答案 0 :(得分:0)
如果这样做,是否会在数据库中发生某些更改时更新项目?
由于端点是云功能,因此不会更新项目。您必须直接侦听数据库。
错误:
Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>'
您收到此错误,因为必须传递结果List
的项目,但您传递的是包裹结果Map
的{{1}}。试试,代替:
List