Asynchronous 颤振复飞蛇形杆

Asynchronous 颤振复飞蛇形杆,asynchronous,redux,flutter,snackbar,Asynchronous,Redux,Flutter,Snackbar,我在颤振代码中使用了redux。我有一个按钮,按下它可以发送一个调用异步API的操作(在我的中间件中)。我想做的是,当api调用执行并返回响应时,我想显示snackbar,说明它已成功更新数据或错误消息。我的问题是如何通过调度一个动作来显示snackbar。或者在redux中有更好的方法吗?免责声明: 这不是在IDE中编写并运行的代码。。这只是一种描述问题解决方案的方式。可能会有错误 假设您拥有Redux存储并使用async进行API调用 您的页面小部件: ... _onSubmit(Sto

我在颤振代码中使用了redux。我有一个按钮,按下它可以发送一个调用异步API的操作(在我的中间件中)。我想做的是,当api调用执行并返回响应时,我想显示snackbar,说明它已成功更新数据或错误消息。我的问题是如何通过调度一个动作来显示snackbar。或者在redux中有更好的方法吗?

免责声明: 这不是在IDE中编写并运行的代码。。这只是一种描述问题解决方案的方式。可能会有错误

假设您拥有Redux存储并使用async进行API调用

您的页面小部件:

... 

_onSubmit(Store<MyState> store) {
   store.dispatch(new SubmitAction(onCompleted: _onCompleted, onError: _onError))

}

_onCompleted() {
    Scaffold.of(context).showSnackBar(new SnackBar(
       content: new Text("Item Completed")));

}

_onError(error) {
    Scaffold.of(context).showSnackBar(new SnackBar(
       content: new Text("Error Occurred")));
}
apiMiddleware(Store<MyState> store, action, NextDispatcher next) {

    if(action is SubmitAction) {
        yourAPICall()
            .then((data) => action.onCompleted())
            .catchError((e) => action.onError(error));
    }

    next(action);
}
typedef void VoidCallback();
typedef void ErrorCallback(error);
class MyAction {
   MyAction({this.onCompleted, this.onError})

   VoidCallback onCompeleted;
   ErrorCallback onError;
}

其中一些可以通过futures完成,但这非常简单。

您可以将回调(完成和错误)作为中间件可以执行的操作的一部分传递use@aqwert你能详细说明一下吗?我不明白。另外,我的问题更多的是如何在异步api响应之后显示snackbar。对于我可以使用appState的值,对吗?添加了一个答案非常感谢。这种做法奏效了。我发现的另一种方法是使用一个全局键,并在中间件中使用该键在从api获得响应后显示snackbar。当然。。无论怎样,只要工作正常,并且您对中间件与UIIF的耦合程度感到满意,那么当单击submit时,我也会发送加载操作。这将触发当前小部件被替换为新的小部件,并显示一个进度条。回调将指向一个已破坏的上下文。回调是否是无状态小部件的安全机制?取决于您传递的上下文。如果您停留在同一个页面上,您可以传递页面上下文,而不是按钮的上下文。但是这对Redux提出的架构合适吗?