Кнопка реакции-навигации v2 закрывает приложение - PullRequest
0 голосов
/ 29 июня 2018

Я столкнулся с очень странной проблемой с приложением, которое работало нормально, и после обновления до response-navigation v2 начало возникать проблема.

В любом месте приложения кнопка Назад на Android закрывает приложение и возвращает его к приостановленным приложениям.

Я пробовал много вещей с точки зрения обработки поведения back вручную, понижения версии некоторых пакетов и т. Д., Но ни один из них не работал.

Вот мой файл package.json:

enter image description here

Ответы [ 7 ]

0 голосов
/ 05 января 2019

Я столкнулся с той же проблемой, похоже, что реализация Backhandler.android.js не верна, файл можно найти здесь 1002 *, в этом файле const subscription = Array.from (_backPressSubscription.values ​​()). Reverse (); кусок кода всегда возвращает массив длины 0, поэтому переменная invokeDefault всегда остается истинной и закрывает приложение, вы можете исправить это, обработав поведение кнопки возврата через собственную реализацию.

В службе навигации добавьте этот метод

import { NavigationActions, StackActions } from 'react-navigation';*

let navigator;
  function setTopLevelNavigator(navigatorRef) {
    navigator = navigatorRef; 
  }

  function pop() {
    navigator.dispatch(StackActions.pop());
  }

    export default {
     pop,
     setTopLevelNavigator
  };

Вам нужно установить навигатор верхнего уровня в вашем app.js, как в этом операторе return метода int render

<AppNavigator //Replace it with your navigator
        ref={navigatorRef => {
          NavigationService.setTopLevelNavigator(navigatorRef);
        }}
        onNavigationStateChange={(prevState, currentState) => {
          this.setState({ currentState });
        }}
/>

Для работы с кнопкой «Назад» добавьте эти вещи в ваш app.js

импорт NavigationService также

import {
 BackHandler,
 DeviceEventEmitter
} from 'react-native';

В componentDidMount добавьте эти

  componentDidMount() {
   BackHandler.addEventListener('hardwareBackPress', this.handleHardwareBack);
  }

В компонентWillUnmount добавьте эти

componentWillUnmount() {
 BackHandler.removeEventListener('hardwareBackPress',this.handleHardwareBack);
}

Теперь работаем с кнопкой возврата оборудования

  handleHardwareBack = () => {
if (!isUndefined(this.state.currentState)) {
  const mainRouteIndex = this.state.currentState.index;
  const mainRoute = this.state.currentState.routes[mainRouteIndex];
  const subRouteIndex = mainRoute.index;

  if (subRouteIndex === 0) {
    console.log(
      'the screen name is ----> ',
      mainRoute.routes[subRouteIndex].routeName
    );
    this.toggleExitModal(); //you can place any dialog if you want to show
    return true;
  }

  NavigationService.pop();
  return true;
}
console.log('Back Button is handled in the respective page seperately');
};

return true говорит о том, что мы собираемся обработать функциональность кнопки назад вручную, возвращение false приведет к выходу из приложения, поскольку по умолчанию это аппаратная кнопка возврата, закрывающая приложение: (

Надеюсь, это поможет вам

0 голосов
/ 05 января 2019

Что ж, я использую Firebase 5.5.5. У меня нет проблем с навигацией, я думаю, что вам нужно создать стековый навигатор, чтобы правильно использовать заднюю панель, я привел пример этого. страницы импортируются, и я не прикрепил код импорта экрана

import { createSwitchNavigator, createStackNavigator } from 'react-navigation';

  const Drawer = createDrawerNavigator(
    {
        BrowseQuestion: BrowseQuestion,
        BrowseCategory: BrowseCategory,

    }

  );

  const Loginstack = createStackNavigator({
    Login: LoginScreen,
    Forgot: ForgotPassword,
    Signup: SignupScreen,
  })


  export default createSwitchNavigator({
    Login : Loginstack,
    Account: Drawer,
   },
   {
    initialRouteName: 'Login'
   }
  );
0 голосов
/ 16 октября 2018

Преобразование этого оператора импорта исправило мою проблему

import Firebase from '@firebase/app' // The issue got fixed after adding @
import 'firebase/auth'
import 'firebase/database'
import 'firebase/storage'

Без @ кнопка выхода пользователя из приложения

0 голосов
/ 24 сентября 2018

Проблема связана с пакетом npm firebase . Есть два способа исправить это.

  1. Как уже упоминалось в других ответах, понизьте Firebase до 5.0.3
  2. Изменить способ импорта базы данных. Этот метод будет много Полегче. Использование :

    import firebase from "@firebase/app";
    import "firebase/auth";
    import "firebase/database";
    

    Не использовать import * as firebase from "firebase"; или import firebase from "firebase";

Подробнее см. в этом выпуске GitHub .

0 голосов
/ 02 июля 2018

Если вы используете реагирующую навигацию v2, посмотрите эту документацию .

Вы также можете использовать response-navigation-backhandler для простого в использовании решения.

0 голосов
/ 29 июня 2018

Решение понижения Firebase также работало для меня, но мне пришлось перейти на Firebase 4.13.1, так как с 5.0.3 я все еще сталкивался с проблемой.

0 голосов
/ 29 июня 2018

У меня была такая же проблема, и вот что я нашел: https://github.com/react-navigation/react-navigation/issues/4329 а также https://github.com/expo/expo/issues/1786

Упоминается временное решение, которое заключается в понижении версии Firebase до 5.0.3, что работает для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...