Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

TabNavigator.js 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import React from "react";
  2. import { createNativeStackNavigator } from "@react-navigation/native-stack";
  3. import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
  4. import { getFocusedRouteNameFromRoute } from "@react-navigation/native";
  5. import HomeScreen from "@screens/HomeScreen";
  6. import Ionicons from "@expo/vector-icons/Ionicons";
  7. import FavoriteScreen from "@screens/FavoriteScreen";
  8. import PostDetailsScreen from "@screens/PostDetailsScreen";
  9. import { useTheme } from "@styles";
  10. const Tab = createBottomTabNavigator();
  11. const Stack = createNativeStackNavigator();
  12. const HomeStack = () => {
  13. const { colors } = useTheme();
  14. return (
  15. <Stack.Navigator>
  16. <Stack.Screen
  17. name="Home"
  18. component={HomeScreen}
  19. options={{ headerShown: false }}
  20. />
  21. <Stack.Screen
  22. name="PostDetails"
  23. component={PostDetailsScreen}
  24. options={({ route }) => ({
  25. headerStyle: { backgroundColor: colors.background },
  26. headerTintColor: colors.textPrimary,
  27. title: route.params.title,
  28. })}
  29. />
  30. </Stack.Navigator>
  31. );
  32. };
  33. const TabNavigator = () => {
  34. return (
  35. <Tab.Navigator
  36. screenOptions={{
  37. headerShown: false,
  38. tabBarShowLabel: false,
  39. tabBarStyle: { backgroundColor: "#AD40AF" },
  40. tabBarInactiveTintColor: "#fff",
  41. tabBarActiveTintColor: "yellow",
  42. }}
  43. >
  44. <Tab.Screen
  45. name="Home2"
  46. component={HomeStack}
  47. options={({ route }) => ({
  48. tabBarStyle: {
  49. display: getTabBarVisibility(route),
  50. backgroundColor: "#AD40AF",
  51. },
  52. tabBarIcon: ({ color, size }) => (
  53. <Ionicons name="home-outline" color={color} size={size} />
  54. ),
  55. })}
  56. />
  57. <Tab.Screen
  58. name="Favorite"
  59. component={FavoriteScreen}
  60. options={{
  61. tabBarIcon: ({ color, size }) => (
  62. <Ionicons name="heart-outline" color={color} size={size} />
  63. ),
  64. }}
  65. />
  66. </Tab.Navigator>
  67. );
  68. };
  69. const getTabBarVisibility = (route) => {
  70. const routeName = getFocusedRouteNameFromRoute(route) ?? "Feed";
  71. if (routeName === "Details") {
  72. return "none";
  73. }
  74. return "flex";
  75. };
  76. export default TabNavigator;