import React from 'react'; import { StyleSheet, Text } from 'react-native'; import { StackRouter, SceneView, StackActions, createNavigator, } from '@react-navigation/core'; import { createKeyboardAwareNavigator } from '@react-navigation/native'; import { HeaderBackButton } from 'react-navigation-stack'; import { ScreenStack, Screen, ScreenStackHeaderConfig, ScreenStackHeaderBackButtonImage, ScreenStackHeaderLeftView, ScreenStackHeaderRightView, ScreenStackHeaderCenterView, } from 'react-native-screens'; function renderComponentOrThunk(componentOrThunk, props) { if (typeof componentOrThunk === 'function') { return componentOrThunk(props); } return componentOrThunk; } class StackView extends React.Component { _removeScene = route => { this.props.navigation.dispatch(StackActions.pop({ key: route.key })); }; _onAppear = (route, descriptor) => { descriptor.options && descriptor.options.onAppear && descriptor.options.onAppear(); this.props.navigation.dispatch( StackActions.completeTransition({ toChildKey: route.key, key: this.props.navigation.state.key, }) ); }; _onFinishTransitioning = () => { const { routes } = this.props.navigation.state; let lastRoute = routes && routes.length && routes[routes.length - 1]; if (lastRoute) { this.props.navigation.dispatch( StackActions.completeTransition({ toChildKey: lastRoute.key, key: this.props.navigation.state.key, }) ); } }; _renderHeaderConfig = (index, route, descriptor) => { const { navigationConfig } = this.props; const { options } = descriptor; const { headerMode } = navigationConfig; const { title, headerStyle, headerTitleStyle, headerBackTitleStyle, headerBackTitle, headerBackTitleVisible, headerTintColor, largeTitle, headerLargeTitleStyle, translucent, hideShadow, } = options; const scene = { index, key: route.key, route, descriptor, }; const headerOptions = { translucent: translucent === undefined ? false : translucent, title, titleFontFamily: headerTitleStyle && headerTitleStyle.fontFamily, titleColor: headerTintColor, titleFontSize: headerTitleStyle && headerTitleStyle.fontSize, backTitle: headerBackTitleVisible === false ? '' : headerBackTitle, backTitleFontFamily: headerBackTitleStyle && headerBackTitleStyle.fontFamily, backTitleFontSize: headerBackTitleStyle && headerBackTitleStyle.fontSize, color: headerTintColor, largeTitle, largeTitleFontFamily: headerLargeTitleStyle && headerLargeTitleStyle.fontFamily, largeTitleFontSize: headerLargeTitleStyle && headerLargeTitleStyle.fontSize, hideShadow, }; const hasHeader = headerMode !== 'none' && options.header !== null; if (!hasHeader) { return