动态列表中的动态流

时间:2019-05-17 19:44:36

标签: flutter

所以我试图从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"}]}

1 个答案:

答案 0 :(得分:0)

  

如果这样做,是否会在数据库中发生某些更改时更新项目?

由于端点是云功能,因此不会更新项目。您必须直接侦听数据库。

  

错误:Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Iterable<dynamic>'

您收到此错误,因为必须传递结果List的项目,但您传递的是包裹结果Map的{​​{1}}。试试,代替:

List