React Native Android - как отключить кнопку возврата Android в StackNavigator - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь реализовать экран блокировки. Экран возвращается только после ввода правильного пароля, в противном случае экран нельзя закрыть. Но если вы нажмете кнопку «Назад» на Android, он всегда вернется. Я попытался использовать BackHandler, но это не удалось. Кажется, это связано с StackNavigator. Как я могу ничего не делать, когда нажата кнопка BackButton?

import React, { PureComponent } from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import PINCode from '@haskkor/react-native-pincode';
import { BackHandler } from 'react-native';
import {
  View, Text, Button,
} from 'native-base';
import { NavigationEvents } from 'react-navigation';
import Colors from '../common/Colors';

class LockScreenContainer extends PureComponent {
  static navigationOptions = () => ({
    header: false,
    gesturesEnabled: false,
  });

  finishProcess = async () => {
    const { navigation } = this.props;
    navigation.goBack();
  }

  render() {
    const { navigation,isLock } = this.props;

    return (
      <View style={{ backgroundColor: Colors.GRAY_LV0, justifyContent: 'center', flex: 1 }}>
        <NavigationEvents
          onWillBlur={() => BackHandler.removeEventListener('hardwareBackPress')}
          onWillFocus={() => BackHandler.addEventListener('hardwareBackPress', () => false)}
        />
        <PINCode
          status={isLock ? 'enter' : 'choose'}
          finishProcess={this.finishProcess}
        />
      </View>
    );
  }
}

export default connect(
  state => ({
    isLock: state.lock.isLock,
  }),
  undefined,
)(LockScreenContainer);

вставка BackHandler.addEventListener ('hardwareBackPress', () => false) в componentDidMount также имеет тот же результат.

1 Ответ

1 голос
/ 11 октября 2019

Вы можете сделать что-то вроде следующего

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

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


backButtonActionCheck = () => {
// Your logic to check if user should go back or stay
}
...