【发布时间】:2020-01-18 14:19:30
【问题描述】:
我正在编写一个 Flutter 应用程序,我决定使用 RxDart 将我的数据和事件传递给管理器、服务和 UI。
基本上我有一个服务,它从 Web 服务中获取数据并返回它。假设它返回一个名为ExploreEntity 的模型的List。
class ExploreMockService extends ExploreServiceStruct {
final String response = /** a sample json **/;
@override
Future<List<ExploreEntity>> loadExploreData(PaginationInput input) async {
await Future.delayed(new Duration(seconds: 2));
return List<ExploreEntity>.from(jsonDecode(response));
}
}
现在在我的经理类中,我在 RxCommand 中调用 loadExploreData 方法。
class ExploreManagerImplementation extends ExploreManager {
@override
RxCommand<void, List<ExploreEntity>> loadExploreDataCommand;
ExploreManagerImplementation() {
loadExploreDataCommand = RxCommand.createAsync<PaginationInput, List<ExploreEntity>>((input) =>
sl //Forget about this part
.get<ExploreServiceStruct>() //and this part if you couldn't understand it
.loadExploreData(input));
}
}
最后我通过RxLoader 得到结果,如果成功获取数据,则将其传递给GridView。
class ExplorePageState extends State<ExplorePage>{
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Explore"),
),
body: Column(children: <Widget>[
Expanded(
child: RxLoader<List<ExploreEntity>>(
commandResults:
sl.get<ExploreManager>().loadExploreDataCommand.results,
dataBuilder: (context, data) => ExploreGridView(data),
placeHolderBuilder: (context) => Center(
child: Center(
child: CircularProgressIndicator(),
),
),
errorBuilder: (context, error) => Center(
child: Text("Error"),
)),
)
]));
}
}
它就像一个魅力,但是当我想从 Web 服务加载下一页的数据并将其附加到列表时,我找不到存储前一页内容的解决方案,而只是附加新页面的内容内容给他们,因为数据是通过RxCommand和RxLoader自动传递的。
当loadExploreData 将响应发送给经理时,我需要先将结果附加到一个列表中,然后将该列表作为结果发送给RxLoader。有什么建议吗?
【问题讨论】:
标签: flutter dart reactive-programming rxdart