与Redux一起颤抖:如何从中间件显示警报?我在哪里可以获得BuildContext

问题描述 投票:0回答:1

在我使用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
     }
  });
}

有什么建议怎么做?

android redux flutter
1个回答
2
投票

也许您可以将对话框作为回调传递:

  • 以这种方式创建请求操作:
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();
    }
© www.soinside.com 2019 - 2024. All rights reserved.