首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自JsonPalceHolder的Rx颤振请求列表

来自JsonPalceHolder的Rx颤振请求列表
EN

Stack Overflow用户
提问于 2019-02-13 17:58:30
回答 2查看 459关注 0票数 0

我尝试使用flutter rxdart stream从jsonPlaceHolder获取列表,并尝试在其上应用阻塞模式。

此类用于从api获取post响应

代码语言:javascript
复制
import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart' as http;
import '../models/post_item.dart';

class ItemApi {

  Future<List<JsonItem>> getPost() async {
    String _url = 'https://jsonplaceholder.typicode.com/posts';

    final _response = await http.get(_url);

    if (_response.statusCode == 200) {
      return (json.decode(_response.body) as List)
          .map((jsonItem) => JsonItem.fromJson(jsonItem))
          .toList();
    }
  }

}

我使用repository类使用ItemApi类进行包装

代码语言:javascript
复制
import 'json_item_request.dart';
import '../models/post_item.dart';

class Repository{

  final jsonItemResponse = ItemApi();
  Future<List<JsonItem>> getItem() => jsonItemResponse.getPost();


}

最后,我使用bloc类获取数据并将其设置在PublishSubject中

代码语言:javascript
复制
import '../models/post_item.dart';
import '../resouces/repository.dart';
import 'package:rxdart/rxdart.dart';

class JsonBloc {
  final _repository = Repository();
  final _streamOfJsonList = PublishSubject<List<JsonItem>>();


  Observable<List<JsonItem>> get jsonList=> _streamOfJsonList.stream;


  fetchAllPost() async{
    Future<List<JsonItem>> list = _repository.getItem();

  }

  dispose(){
    _streamOfJsonList.close();
  }


}

我的问题是,当列表发生变化时,如何在_streamOfJsonList变量中设置response来使用它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-13 21:12:08

听起来你已经把所有的活动部件都连接起来了?如果是这样,您只需将项目列表添加到PublishSubject:

代码语言:javascript
复制
void fetchAllPost() async {
  List<JsonItem> list = await _repository.getItem();
  _streamOfJsonList.add(list);
}

这将使用正在侦听流的任何内容上的新列表触发onListen回调。

票数 0
EN

Stack Overflow用户

发布于 2020-01-13 20:17:32

您可以将错误和数据添加到ReplaySubject,如下所示:

代码语言:javascript
复制
 void fetchAllPost() async {
    List<JsonItem> list = await _repository.getItem();
    if (list != null) {
      _streamOfJsonList.sink.add(list);
    } else {
      _streamOfJsonList.addError("ERROR");
    }
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54667283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档