与Redux一起颤抖:如何从中间件显示警报?我在哪里可以获得BuildContext
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了与Redux一起颤抖:如何从中间件显示警报?我在哪里可以获得BuildContext相关的知识,希望对你有一定的参考价值。
在我使用Redux架构的Flutter上的聊天应用程序中,我需要在一些异步调用的结果后显示对话框。我的主要问题是为show对话框获取当前的BuildContext。这个异步调用可以在不同的屏幕上完成,我需要当前屏幕的上下文。
我对中间件方面的看法如下:
void _setCompanionToChat(String groupChatId) {
var documentReference = _getChatDocument(groupChatId);
documentReference.get().then((snapshot) {
var closed = snapshot[ChatDatabase.CLOSED_ATTRIBUTE];
if (snapshot.exists && !closed) {
// SOME OPERATIONS
} else {
// SHOW DIALOG
}
});
}
有什么建议怎么做?
答案
也许您可以将对话框作为回调传递:
- 以这种方式创建请求操作:
class MyDataRequestAction {
...
Function onError;
MyDataRequestAction({this.onError});
}
- 在您的屏幕中,在StoreConnector中调度这些操作,例如
@override
Widget build(BuildContext context) {
...
StoreConnector<AppState, _MyScreenViewModel>(
onInit: (store) => store.dispatch(MyDataRequestAction(
onError: () => showDialog(context: context, builder: (context) => AlertDialog(...));
));
...
- 最后在你的中间件中:
class MyMiddleware extends MiddlewareClass<AppState> {
...
@override
void call(Store<AppState> store, action, NextDispatcher next) async {
...
_setCompanionToChat(groupChatId, action) // PASS THE ACTION!!
}
void _setCompanionToChat(String groupChatId, dynamic action) {
...
if (snapshot.exists && !closed) {
// SOME OPERATIONS
} else {
action.onError();
}
以上是关于与Redux一起颤抖:如何从中间件显示警报?我在哪里可以获得BuildContext的主要内容,如果未能解决你的问题,请参考以下文章
redux-saga 与 redux 一起使用会导致 render() 被调用两次
如何让我的服务器端 Joi 验证与 redux-form 一起正常工作?