来自 JsonPlaceHolder 的 Rx Flutter 请求列表
Rx Flutter Request List From JsonPalceHolder
我尝试使用 flutter rxdart 流从 jsonPlaceHolder 获取列表并尝试在其上应用 bloc 模式。
此 class 的响应 post 来自 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();
}
}
}
我使用存储库 class 使用 ItemApi 包装 class
import 'json_item_request.dart';
import '../models/post_item.dart';
class Repository{
final jsonItemResponse = ItemApi();
Future<List<JsonItem>> getItem() => jsonItemResponse.getPost();
}
最后我使用 bloc class 获取数据的响应并将其设置在 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 变量中设置响应以在列表更改时使用它。
听起来您已经连接了所有活动部件?如果是这样,您只需将项目列表添加到 PublishSubject:
void fetchAllPost() async {
List<JsonItem> list = await _repository.getItem();
_streamOfJsonList.add(list);
}
这将触发 onListen
回调,其中包含正在收听流的任何内容的新列表。
您可以将错误和数据添加到 ReplaySubject,如下所示:
void fetchAllPost() async {
List<JsonItem> list = await _repository.getItem();
if (list != null) {
_streamOfJsonList.sink.add(list);
} else {
_streamOfJsonList.addError("ERROR");
}
}
我尝试使用 flutter rxdart 流从 jsonPlaceHolder 获取列表并尝试在其上应用 bloc 模式。
此 class 的响应 post 来自 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();
}
}
}
我使用存储库 class 使用 ItemApi 包装 class
import 'json_item_request.dart';
import '../models/post_item.dart';
class Repository{
final jsonItemResponse = ItemApi();
Future<List<JsonItem>> getItem() => jsonItemResponse.getPost();
}
最后我使用 bloc class 获取数据的响应并将其设置在 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 变量中设置响应以在列表更改时使用它。
听起来您已经连接了所有活动部件?如果是这样,您只需将项目列表添加到 PublishSubject:
void fetchAllPost() async {
List<JsonItem> list = await _repository.getItem();
_streamOfJsonList.add(list);
}
这将触发 onListen
回调,其中包含正在收听流的任何内容的新列表。
您可以将错误和数据添加到 ReplaySubject,如下所示:
void fetchAllPost() async {
List<JsonItem> list = await _repository.getItem();
if (list != null) {
_streamOfJsonList.sink.add(list);
} else {
_streamOfJsonList.addError("ERROR");
}
}