Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Handling BackHandler

Being a newbie in RN programming, I'm trying to handle android hardware button. But pressing it on screen leads to simultaneously going to previous screen and closing app. My StackNavigator looks like:

const navigatorApp = StackNavigator({
  Screen1: { screen: Screen1 },
  Screen2: { screen: Screen2 },
  Screen3: { screen: Screen3 },
  Screen4: { screen: Screen4 }
})

I tried to make a global backpress handling for screens like

class HandleHavigation extends React.Component {
  componentWillMount () {
    if (Platform.OS === 'android') return
    BackHandler.addEventListener('hardwareBackPress', () => {
      const { dispatch, nav } = this.props
      if (nav.routes.length === 1 && (nav.routes[0].routeName === 'Screen1')) {
        return false
      }
      dispatch({ type: 'Navigation/BACK' })
      return true
    })
  }
  componentWillUnmount () {
    if (Platform.OS === 'android') return
    BackHandler.removeEventListener('hardwareBackPress')
  }

  render () {
    return <navigatorApp navigation={addNavigationHelpers({
      dispatch: this.props.dispatch,
      state: this.props.nav,
      addListener: createReduxBoundAddListener('root')
    })} />
  }
}
const mapStateToProps = state => ({ nav: state.reducer })
export default connect(mapStateToProps)(HandleNavigation)

I also tried some given in other questions solutions, but nothing helped to prevent app closing.

I also thought about realizing backHandler on every screen. In my app every screen contains function onPress for top button. That is why I tried to copy this action to hardware button using Backhandler. But all I get - screen goes back, and the app hides at the same time.

Is there any solution in my case to prevent closing app by pressing hw backbutton?

like image 673
Ison Avatar asked Nov 08 '22 04:11

Ison


1 Answers

You can use BackHandler to exit/close the application:

import { BackHandler } from 'react-native';

BackHandler.exitApp();
like image 55
Hristo Eftimov Avatar answered Nov 15 '22 05:11

Hristo Eftimov