Fix crash on app start

This commit is contained in:
Arnaud Vergnet 2020-09-23 09:03:48 +02:00
parent c5287611c4
commit f5233c53f8
6 changed files with 63 additions and 51 deletions

View file

@ -55,7 +55,7 @@ type StateType = {
currentTheme: ReactNativePaper.Theme | undefined; currentTheme: ReactNativePaper.Theme | undefined;
}; };
export default class App extends React.Component<null, StateType> { export default class App extends React.Component<{}, StateType> {
navigatorRef: {current: null | NavigationContainerRef}; navigatorRef: {current: null | NavigationContainerRef};
defaultHomeRoute: string | null; defaultHomeRoute: string | null;
@ -64,8 +64,8 @@ export default class App extends React.Component<null, StateType> {
urlHandler: URLHandler; urlHandler: URLHandler;
constructor() { constructor(props: {}) {
super(null); super(props);
this.state = { this.state = {
isLoading: true, isLoading: true,
showIntro: true, showIntro: true,

View file

@ -284,5 +284,9 @@ type PropsType = {
}; };
export default function MainNavigator(props: PropsType) { export default function MainNavigator(props: PropsType) {
return <MainStackComponent createTabNavigator={() => TabNavigator(props)} />; return (
<MainStackComponent
createTabNavigator={() => <TabNavigator {...props} />}
/>
);
} }

View file

@ -142,7 +142,7 @@ function HomeStackComponent(
defaultData: {[key: string]: string}, defaultData: {[key: string]: string},
) { ) {
let params; let params;
if (initialRoute != null) { if (initialRoute) {
params = {data: defaultData, nextScreen: initialRoute, shouldOpen: true}; params = {data: defaultData, nextScreen: initialRoute, shouldOpen: true};
} }
const {colors} = useTheme(); const {colors} = useTheme();
@ -255,45 +255,53 @@ type PropsType = {
defaultHomeData: {[key: string]: string}; defaultHomeData: {[key: string]: string};
}; };
export default function TabNavigator(props: PropsType) { export default class TabNavigator extends React.Component<PropsType> {
let defaultRoute = 'home'; defaultRoute: string;
if (!props.defaultHomeRoute) { createHomeStackComponent: () => any;
defaultRoute = AsyncStorageManager.getString(
AsyncStorageManager.PREFERENCES.defaultStartScreen.key,
).toLowerCase();
}
const createHomeStackComponent = () =>
HomeStackComponent(props.defaultHomeRoute, props.defaultHomeData);
return ( constructor(props: PropsType) {
<Tab.Navigator super(props);
initialRouteName={defaultRoute} this.defaultRoute = 'home';
tabBar={(tabProps) => <CustomTabBar {...tabProps} />}> if (!props.defaultHomeRoute) {
<Tab.Screen this.defaultRoute = AsyncStorageManager.getString(
name="services" AsyncStorageManager.PREFERENCES.defaultStartScreen.key,
component={ServicesStackComponent} ).toLowerCase();
options={{title: i18n.t('screens.services.title')}} }
/> this.createHomeStackComponent = () =>
<Tab.Screen HomeStackComponent(props.defaultHomeRoute, props.defaultHomeData);
name="proxiwash" }
component={ProxiwashStackComponent}
options={{title: i18n.t('screens.proxiwash.title')}} render() {
/> return (
<Tab.Screen <Tab.Navigator
name="home" initialRouteName={this.defaultRoute}
component={createHomeStackComponent} tabBar={(tabProps) => <CustomTabBar {...tabProps} />}>
options={{title: i18n.t('screens.home.title')}} <Tab.Screen
/> name="services"
<Tab.Screen component={ServicesStackComponent}
name="planning" options={{title: i18n.t('screens.services.title')}}
component={PlanningStackComponent} />
options={{title: i18n.t('screens.planning.title')}} <Tab.Screen
/> name="proxiwash"
<Tab.Screen component={ProxiwashStackComponent}
name="planex" options={{title: i18n.t('screens.proxiwash.title')}}
component={PlanexStackComponent} />
options={{title: i18n.t('screens.planex.title')}} <Tab.Screen
/> name="home"
</Tab.Navigator> component={this.createHomeStackComponent}
); options={{title: i18n.t('screens.home.title')}}
/>
<Tab.Screen
name="planning"
component={PlanningStackComponent}
options={{title: i18n.t('screens.planning.title')}}
/>
<Tab.Screen
name="planex"
component={PlanexStackComponent}
options={{title: i18n.t('screens.planex.title')}}
/>
</Tab.Navigator>
);
}
} }

View file

@ -53,8 +53,8 @@ const LIST_ITEM_HEIGHT = 64;
export default class AboutDependenciesScreen extends React.Component<{}> { export default class AboutDependenciesScreen extends React.Component<{}> {
data: Array<ListItemType>; data: Array<ListItemType>;
constructor() { constructor(props: {}) {
super({}); super(props);
this.data = generateListFromObject(packageJson.dependencies); this.data = generateListFromObject(packageJson.dependencies);
} }

View file

@ -38,8 +38,8 @@ class AmicaleContactScreen extends React.Component<{}> {
// Dataset containing information about contacts // Dataset containing information about contacts
CONTACT_DATASET: Array<DatasetItemType>; CONTACT_DATASET: Array<DatasetItemType>;
constructor() { constructor(props: {}) {
super({}); super(props);
this.CONTACT_DATASET = [ this.CONTACT_DATASET = [
{ {
name: i18n.t('screens.amicaleAbout.roles.interSchools'), name: i18n.t('screens.amicaleAbout.roles.interSchools'),

View file

@ -55,8 +55,8 @@ const styles = StyleSheet.create({
type PermissionResults = 'unavailable' | 'denied' | 'blocked' | 'granted'; type PermissionResults = 'unavailable' | 'denied' | 'blocked' | 'granted';
class ScannerScreen extends React.Component<{}, StateType> { class ScannerScreen extends React.Component<{}, StateType> {
constructor() { constructor(props: {}) {
super({}); super(props);
this.state = { this.state = {
hasPermission: false, hasPermission: false,
scanned: false, scanned: false,