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,19 +255,26 @@ 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;
createHomeStackComponent: () => any;
constructor(props: PropsType) {
super(props);
this.defaultRoute = 'home';
if (!props.defaultHomeRoute) { if (!props.defaultHomeRoute) {
defaultRoute = AsyncStorageManager.getString( this.defaultRoute = AsyncStorageManager.getString(
AsyncStorageManager.PREFERENCES.defaultStartScreen.key, AsyncStorageManager.PREFERENCES.defaultStartScreen.key,
).toLowerCase(); ).toLowerCase();
} }
const createHomeStackComponent = () => this.createHomeStackComponent = () =>
HomeStackComponent(props.defaultHomeRoute, props.defaultHomeData); HomeStackComponent(props.defaultHomeRoute, props.defaultHomeData);
}
render() {
return ( return (
<Tab.Navigator <Tab.Navigator
initialRouteName={defaultRoute} initialRouteName={this.defaultRoute}
tabBar={(tabProps) => <CustomTabBar {...tabProps} />}> tabBar={(tabProps) => <CustomTabBar {...tabProps} />}>
<Tab.Screen <Tab.Screen
name="services" name="services"
@ -281,7 +288,7 @@ export default function TabNavigator(props: PropsType) {
/> />
<Tab.Screen <Tab.Screen
name="home" name="home"
component={createHomeStackComponent} component={this.createHomeStackComponent}
options={{title: i18n.t('screens.home.title')}} options={{title: i18n.t('screens.home.title')}}
/> />
<Tab.Screen <Tab.Screen
@ -297,3 +304,4 @@ export default function TabNavigator(props: PropsType) {
</Tab.Navigator> </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,