【问题标题】:Rx Flutter Request List From JsonPalceHolder来自 JsonPalceHolder 的 Rx Flutter 请求列表
【发布时间】:2019-07-07 02:45:51
【问题描述】:

我尝试使用 Flutter rxdart 流从 jsonPlaceHolder 获取 List 并尝试在其上应用 bloc 模式。

用于从 api 获取帖子响应的响应类

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();
    }
  }

}

我使用存储库类来包装使用 ItemApi 类

import 'json_item_request.dart';
import '../models/post_item.dart';

class Repository{

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


}

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

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 变量中设置响应以在列表更改时使用它。

【问题讨论】:

    标签: flutter rxdart


    【解决方案1】:

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

    void fetchAllPost() async {
      List<JsonItem> list = await _repository.getItem();
      _streamOfJsonList.add(list);
    }
    

    这将触发 onListen 回调,其中包含正在侦听流的任何内容的新列表。

    【讨论】:

      【解决方案2】:

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

       void fetchAllPost() async {
          List<JsonItem> list = await _repository.getItem();
          if (list != null) {
            _streamOfJsonList.sink.add(list);
          } else {
            _streamOfJsonList.addError("ERROR");
          }
        }
      

      【讨论】:

        猜你喜欢
        • 2021-03-12
        • 2020-02-20
        • 2022-07-29
        • 2021-08-07
        • 2020-10-11
        • 1970-01-01
        • 2021-07-19
        • 1970-01-01
        • 2021-08-07
        相关资源
        最近更新 更多