Флаттер с Redux: Как показать предупреждение от промежуточного ПО?Где я могу получить BuildContext - PullRequest
0 голосов
/ 01 марта 2019

В моем приложении чата на Flutter с архитектурой Redux мне нужно показывать диалог после результата некоторого асинхронного вызова.Моя главная проблема - получить текущий BuildContext для показа диалога.И этот асинхронный вызов может быть сделан с разных экранов, и мне нужен контекст текущего экрана.

Мой вызов на стороне Middleware выглядит следующим образом:

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
     }
  });
}

Любые советы, как это сделать?

1 Ответ

0 голосов
/ 18 марта 2019

Возможно, вы можете передать свой диалог в качестве обратного вызова:

  • Создайте действия запроса следующим образом:
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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...