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(...)
        );
    
    有关更多信息,请查看