这是我的代码,聊天堆栈构成了所有聊天屏幕的堆栈,我制作了一个显示在屏幕上的底部选项卡导航器,但是当我通过 chatStack(这是所有聊天屏幕的堆栈)时它失败?我是否正确地将聊天堆栈传递给选项卡导航器?我不确定我哪里出错了
const ChatStack = createStackNavigator();
const ModalStack = createStackNavigator();
const ProfileStack = createStackNavigator(); // profile stack
const Tab = createBottomTabNavigator(); // BOTTOM STACK NAVIGATOR
export default function HomeStack() {
useEffect(() => {
registerForPushNotificationsAsync().then((token) => {
kitty.updateCurrentUser((user) => {
user.properties = {
...user.properties,
'expo-push-token': token,
};
return user;
});
});
}, []);
return (
<ModalStack.Navigator mode="modal" headerMode="none">
<ModalStack.Screen
name="ChatApp"
component={withInAppNotification(ChatComponent)}
/>
<ModalStack.Screen name="CreateChannel" component={CreateChannelScreen} />
</ModalStack.Navigator>
);
}
function ChatComponent({ navigation, showNotification }) {
useEffect(() => {
return kitty.onNotificationReceived((notification) => {
showNotification({
title: notification.title,
message: notification.body,
onPress: () => {
switch (notification.data.type) {
case 'USER:SENT:MESSAGE':
case 'SYSTEM:SENT:MESSAGE':
kitty.getChannel(notification.data.channelId).then((result) => {
navigation.navigate('Chat', { channel: result.channel });
});
break;
}
},
});
});
}, [navigation, showNotification]);
return (
<Tab.Navigator>
<Tab.Screen name="NewsFeed" component={NewsFeed} />
<Tab.Screen name="HomeScreen" component={ChatStack} />
</Tab.Navigator>
);
return (
<ChatStack.Navigator
screenOptions={{
headerStyle: {
backgroundColor: '#5b3a70',
},
headerTintColor: '#ffffff',
headerTitleStyle: {
fontSize: 22,
},
}}
>
<ChatStack.Screen
name="Home"
component={HomeScreen}
options={(options) => ({
headerRight: () => (
<IconButton
icon="plus"
size={28}
color="#ffffff"
onPress={() => options.navigation.navigate('BrowseChannels')}
/>
),
})}
/>
<ChatStack.Screen
name="BrowseChannels"
component={BrowseChannelsScreen}
options={(options) => ({
headerRight: () => (
<IconButton
icon="plus"
size={28}
color="#ffffff"
onPress={() => options.navigation.navigate('CreateChannel')}
/>
),
})}
/>
<ChatStack.Screen
name="Chat"
component={withInAppNotification(ChatScreen)}
options={({ route }) => ({
title: getChannelDisplayName(route.params.channel),
})}
/>
</ChatStack.Navigator>
);
}
async function registerForPushNotificationsAsync() {
let token;
if (Constants.isDevice && Platform.OS !== 'web') {
const {
status: existingStatus,
} = await Notifications.getPermissionsAsync();
let finalStatus = existingStatus;
if (existingStatus !== 'granted') {
const { status } = await Notifications.requestPermissionsAsync();
finalStatus = status;
}
if (finalStatus !== 'granted') {
console.log('Failed to get push token for push notification!');
return;
}
token = (await Notifications.getExpoPushTokenAsync()).data;
} else {
console.log('Must use physical device for Push Notifications');
}
if (Platform.OS === 'android') {
await Notifications.setNotificationChannelAsync('default', {
name: 'default',
importance: Notifications.AndroidImportance.MAX,
vibrationPattern: [0, 250, 250, 250],
lightColor: '#FF231F7C',
});
}
return token;
}