Redux 如何使用异步分派方法作为RefreshIndicator onRefresh回调
我有一个用Redux 如何使用异步分派方法作为RefreshIndicator onRefresh回调,redux,dart,flutter,redux-thunk,Redux,Dart,Flutter,Redux Thunk,我有一个用刷新指示器包装的列表。当下拉列表时,我想从Firestore(一个数据库)获取一些数据,更新我的状态,然后呈现列表 我有一个redux操作,可以获取数据并更新我的状态: final FetchPostsRequest = () { return (Store<AppState> store) { final CollectionReference postCollection = Firestore.instance.collection("post
刷新指示器包装的列表
。当下拉列表时,我想从Firestore(一个数据库)获取一些数据,更新我的状态,然后呈现列表
我有一个redux操作,可以获取数据并更新我的状态:
final FetchPostsRequest = () {
return (Store<AppState> store) {
final CollectionReference postCollection = Firestore.instance.collection("posts");
postCollection.getDocuments().then((QuerySnapshot snapshot) {
List<DocumentSnapshot> docs = snapshot.documents;
print("Getting documents....");
List<Model.Post> posts = docs.map((d) => Model.Post.fromMap(d.data)).toList();
store.dispatch(new FetchPostsSuccess(posts: posts));
}).catchError((err) {
print(err);
store.dispatch(new FetchPostsFailure(error: err));
});
};
};
final FetchPostsRequest=(){
return(存储回调?它的回调是Future RefreshCallback()
,我不知道如何将其与redux状态管理思想相结合。对于在Flutter中使用redux的RefreshIndicator
,您应该在Action类中放置一个完成符。
计划是
创建一个包含完成符的操作
将action.completer.future
返回到refresh指示器的onRefresh
功能
编写侦听此操作的中间件
行动
假设您有RefreshItemsAction
。代码如下:
class RefreshItemsAction {
final Completer<Null> completer;
RefreshItemsAction({Completer completer})
: this.completer = completer ?? Completer<Null>();
}
List<Middleware<AppState>> createItemsMiddleware() {
return [
TypedMiddleware<AppState, RefreshItemsAction>(_refreshItems),
];
}
Middleware<AppState> _refreshItems() {
return (Store<AppState> store, action, NextDispatcher next) {
if (action is RefreshItemsAction) {
loadItems().then((items) {
store.dispatch(ItemsRefreshedAction(items));
action.completer.complete();
},
).catchError((_) {
store.dispatch(ItemsNotRefreshedAction());
action.completer.complete();
});
}
next(action);
};
}
return RefreshIndicator(
onRefresh: () {
var action = RefreshItemsAction();
store.dispatch(action);
return action.completer.future;
},
child: ListView(...)
);
有关更多信息,请查看