Обработчик кнопки возврата Android реагирует на поток маршрутизатора

У меня есть одно собственное приложение для реагирования, в котором я использовал поток реагирования на собственный маршрутизатор, моя сцена падает таким образом

  1. Всплеск
  2. Авторизоваться
  3. Щиток приборов
  4. При щелчке по значку панели инструментов открывается экран уведомлений.

Первоначально, когда приложение загружено, все идет гладко. Но когда я нажимаю значок панели инструментов, он переходит на экран уведомлений, а когда я нажимаю кнопку возврата Android, он переходит на экран панели инструментов, поскольку я написал BackHandler и в котором я написал Actions.pop ()

Теперь на панели инструментов я написал BackHandler с проверочным счетчиком, т.е. если кнопка «Назад» нажата два раза и выйдет из приложения, но проблема в том, что он работает только в том случае, если я не перешел на экран уведомлений, когда я перехожу на экран уведомлений и затем нажмите кнопку «Назад», он перейдет на панель управления, но когда я снова нажимаю кнопку «Назад» на панели управления, я просто перехожу на экран входа в систему, а оттуда - на экран-заставку.

Я хочу, чтобы даже если я перешел на экран уведомлений и нажал кнопку «Назад», я должен перейти на панель управления и нажать кнопку «Назад» на панели управления (2 раза), он должен выйти из приложения без перенаправления на экран входа и заставки.

Мой код для экрана панели инструментов -

constructor(props) {
    super(props);
    this.backCount = 0;
    this.onHandleBackButton = this.handleBackButton.bind(this);


}
async componentWillMount() {

    BackHandler.addEventListener('hardwareBackPress', this.onHandleBackButton);

}
handleBackButton() {
    console.log("back button - dashboard")

    if (this.backCount == 1) {
        BackHandler.exitApp();
        this.backCount = 2;
        return; // exit
    }
    else if (this.backCount == 0) {

        Toast.show("Press again to exit", Toast.SHORT);
        this.backCount++;

        setTimeout(() => {
            if (this.backCount != 2)
                this.backCount = 0;
        }, 2000)

        return true;
    }
}

Код для экрана уведомлений -

constructor(props) {
    super(props);
    this.onHandleBackButton = this.handleBackButton.bind(this);

}
componentWillMount() {
    BackHandler.addEventListener('hardwareBackPress', this.onHandleBackButton);

}
handleBackButton() {


    Actions.pop();
   return true;
}

Я пробовал несколько способов с type = {ActionConst.RESET} и другими.


person Krunal Panchal    schedule 23.06.2018    source источник


Ответы (1)


arrow_upward
0
arrow_downward

Первое, что вам нужно сделать, это переместиться и очистить заставку и экран входа в систему. Потому что в настоящее время происходит то, что ваши экраны всплывают, а заставка и логин уже находятся в стеке. И, во-вторых, поставьте условие проверки на панели инструментов, что если имя маршрута - это ваша панель, тогда только условие двойного выхода должно выполнять rest, оно не должно работать. Думаю, сработает.

person Adnan ali    schedule 23.06.2018
comment
Хорошо, попробую с помощью Action.reset (Dashboard) сбросить стек, но как я могу проверить имя текущей сцены? Я пробовал с Actions.currentScene, но не работал. - person Krunal Panchal; 23.06.2018
comment
Проверьте свой реквизит, если вы используете redux - person Adnan ali; 23.06.2018
comment
Вы где-нибудь получите navigation.routename - person Adnan ali; 23.06.2018
comment
это возможно, но если вы используете поток, текущая сцена получается через: Actions.currentScene - person ibininja; 05.11.2018