@expo/vector-icons#AntDesign TypeScript Examples
The following examples show how to use
@expo/vector-icons#AntDesign.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: MessageIcon.tsx From vsinder with Apache License 2.0 | 6 votes |
MessageIcon: React.FC<MessageIconProps> = ({ size, color }) => {
const { data } = useQuery<MeResponse>("/me", defaultQueryFn);
const { inputValidationErrorBorder } = useTheme();
const cSize = 18;
return (
<View style={{ position: "relative" }}>
<AntDesign name="message1" size={size} color={color} />
{data?.user?.unreadMatchUserIds.length ? (
<View
style={{
position: "absolute",
top: -8,
right: -10,
minWidth: cSize,
paddingHorizontal: 4,
backgroundColor: inputValidationErrorBorder,
borderRadius: cSize / 2,
alignItems: "center",
justifyContent: "center",
}}
>
<MyText>{data.user.unreadMatchUserIds.length}</MyText>
</View>
) : null}
</View>
);
}
Example #2
Source File: MessageIcon.tsx From vsinder-app with Apache License 2.0 | 6 votes |
MessageIcon: React.FC<MessageIconProps> = ({ size, color }) => {
const { data } = useQuery<MeResponse>("/me", defaultQueryFn);
const { inputValidationErrorBorder } = useTheme();
const cSize = 18;
return (
<View style={{ position: "relative" }}>
<AntDesign name="message1" size={size} color={color} />
{data?.user?.unreadMatchUserIds.length ? (
<View
style={{
position: "absolute",
top: -8,
right: -10,
height: cSize,
width: cSize,
backgroundColor: inputValidationErrorBorder,
borderRadius: cSize / 2,
alignItems: "center",
justifyContent: "center",
}}
>
<MyText>{data.user.unreadMatchUserIds.length}</MyText>
</View>
) : null}
</View>
);
}
Example #3
Source File: index.tsx From selftrace with MIT License | 6 votes |
Icon = {
Question: (props: Props) => <FontAwesome name="question" size={25} {...props} />,
MapMarker: (props: Props) => <MaterialCommunityIcons name="map-marker" size={25} {...props} />,
Earth: (props: Props) => <MaterialCommunityIcons name="earth" size={25} {...props} />,
Lock: (props: Props) => <Foundation name="lock" size={25} {...props} />,
Form: (props: Props) => <AntDesign name="form" size={23} {...props} />,
Person: (props: Props) => <MaterialIcons name="person" size={25} {...props} />,
MapMarkerMultiple: (props: Props) => (
<MaterialCommunityIcons name="map-marker-multiple" size={23} {...props} />
),
}
Example #4
Source File: index.tsx From tiktok-clone with MIT License | 6 votes |
Discover: React.FC = () => {
const [search, setSearch] = useState('');
return (
<Container>
<Header>
<Search>
<AntDesign
style={{
paddingRight: 10,
}}
name="search1"
size={18}
color="#838383"
/>
<Input
placeholder="Search"
value={search}
returnKeyType="search"
onChangeText={text => setSearch(text)}
/>
</Search>
<Ionicons name="md-qr-scanner" size={25} color="black" />
</Header>
</Container>
);
}
Example #5
Source File: App.tsx From react-native-scroll-bottom-sheet with MIT License | 6 votes |
function App() {
return (
<NavigationContainer>
<Stack.Navigator initialRouteName="Home">
<Stack.Screen
name="Home"
component={Home}
options={{ headerTitle: 'Scroll Bottom Sheet Example' }}
/>
<Stack.Screen
options={{
headerTitleAlign: 'center',
headerTitle: 'Personal Account',
headerRight: () => (
<AntDesign
name="piechart"
size={24}
color="#5C6BC0"
style={{ marginRight: 16 }}
/>
),
}}
name="SectionListExample"
component={SectionListExample}
/>
<Stack.Screen
options={{ headerShown: false }}
name="HorizontalFlatListExample"
component={HorizontalFlatListExample}
/>
</Stack.Navigator>
</NavigationContainer>
);
}
Example #6
Source File: index.tsx From tiktok-clone with MIT License | 5 votes |
Me: React.FC = () => {
return (
<Container>
<Header>
<AntDesign
style={{ position: 'absolute', left: 10, top: 10 }}
name="adduser"
size={24}
color="black"
/>
<Title>Matheus Castro</Title>
<MaterialIcons name="arrow-drop-down" size={24} color="black" />
<FontAwesome
style={{ position: 'absolute', right: 13, top: 12 }}
name="ellipsis-v"
size={24}
color="black"
/>
</Header>
<ScrollView>
<Content>
<Avatar source={avatar} />
<Username>@matheuscastroweb</Username>
<Stats>
<StatsColumn>
<StatsNumber>1950</StatsNumber>
<StatsText>Following</StatsText>
</StatsColumn>
<Separator>|</Separator>
<StatsColumn>
<StatsNumber>650</StatsNumber>
<StatsText>Followers</StatsText>
</StatsColumn>
<Separator>|</Separator>
<StatsColumn>
<StatsNumber>950</StatsNumber>
<StatsText>Likes</StatsText>
</StatsColumn>
</Stats>
<ProfileColumn>
<ProfileEdit>
<ProfileText>Edit profile</ProfileText>
</ProfileEdit>
<Bookmark name="bookmark" size={24} color="black" />
</ProfileColumn>
<StatsText>Tap to add bio</StatsText>
</Content>
</ScrollView>
</Container>
);
}
Example #7
Source File: index.tsx From tiktok-clone with MIT License | 5 votes |
Record: React.FC = () => {
const [hasPermission, setHasPermission] = useState<boolean | null>(null);
const [type, setType] = useState(Camera.Constants.Type.back);
const navigation = useNavigation();
useEffect(() => {
async function permission(): Promise<void> {
const { status } = await Camera.requestPermissionsAsync();
setHasPermission(status === 'granted');
StatusBar.setHidden(true);
}
permission();
}, []);
if (hasPermission === null) {
return <View />;
}
if (hasPermission === false) {
return <Text>No access to camera</Text>;
}
return (
<Camera style={{ flex: 1 }} type={type}>
<Container>
<Header>
<Button
onPress={() => {
StatusBar.setHidden(false);
navigation.goBack();
}}
>
<AntDesign name="close" size={28} color="#fff" />
</Button>
<Button>
<Row>
<FontAwesome name="music" size={18} color="#fff" />
<Description>Sons</Description>
</Row>
</Button>
<Button
onPress={() => {
setType(
type === Camera.Constants.Type.back
? Camera.Constants.Type.front
: Camera.Constants.Type.back,
);
}}
>
<MaterialCommunityIcons
name="rotate-right"
size={28}
color="#fff"
/>
</Button>
</Header>
<RecordButton />
</Container>
</Camera>
);
}
Example #8
Source File: index.tsx From SpotifyClone with MIT License | 4 votes |
PlayerWidget = () => {
const [song, setSong] = useState(null);
const [sound, setSound] = useState<Sound|null>(null);
const [isPlaying, setIsPlaying] = useState<boolean>(true);
const [duration, setDuration] = useState<number|null>(null);
const [position, setPosition] = useState<number|null>(null);
const { songId } = useContext(AppContext);
useEffect(() => {
const fetchSong = async () => {
try {
const data = await API.graphql(graphqlOperation(getSong, { id: songId }))
setSong(data.data.getSong);
} catch (e) {
console.log(e);
}
}
fetchSong();
}, [songId])
const onPlaybackStatusUpdate = (status) => {
setIsPlaying(status.isPlaying);
setDuration(status.durationMillis);
setPosition(status.positionMillis);
}
const playCurrentSong = async () => {
if (sound) {
await sound.unloadAsync();
}
const { sound: newSound } = await Sound.createAsync(
{ uri: song.uri },
{ shouldPlay: isPlaying },
onPlaybackStatusUpdate
)
setSound(newSound)
}
useEffect(() => {
if (song) {
playCurrentSong();
}
}, [song])
const onPlayPausePress = async () => {
if (!sound) {
return;
}
if (isPlaying) {
await sound.stopAsync();
} else {
await sound.playAsync();
}
}
const getProgress = () => {
if (sound === null || duration === null || position === null) {
return 0;
}
return (position / duration) * 100;
}
if (!song) {
return null;
}
return (
<View style={styles.container}>
<View style={[styles.progress, { width: `${getProgress()}%`}]} />
<View style={styles.row}>
<Image source={{ uri: song.imageUri }} style={styles.image} />
<View style={styles.rightContainer}>
<View style={styles.nameContainer}>
<Text style={styles.title}>{song.title}</Text>
<Text style={styles.artist}>{song.artist}</Text>
</View>
<View style={styles.iconsContainer}>
<AntDesign name="hearto" size={30} color={"white"}/>
<TouchableOpacity onPress={onPlayPausePress}>
<FontAwesome name={isPlaying ? 'pause' : 'play'} size={30} color={"white"}/>
</TouchableOpacity>
</View>
</View>
</View>
</View>
)
}
Example #9
Source File: index.tsx From TwitterClone with MIT License | 4 votes |
Footer = ({ tweet }: FooterContainerProps) => {
console.log(tweet);
const [user, setUser] = useState(null);
const [myLike, setMyLike] = useState(null);
const [likesCount, setLikesCount] = useState(tweet.likes.items.length);
useEffect(() => {
const fetchUser = async () => {
const currentUser = await Auth.currentAuthenticatedUser();
setUser(currentUser);
const searchedLike = tweet.likes.items.find(
(like) => like.userID === currentUser.attributes.sub
);
setMyLike(searchedLike);
}
fetchUser();
}, [])
const submitLike = async () => {
const like = {
userID: user.attributes.sub,
tweetID: tweet.id,
}
try {
const res = await API.graphql(graphqlOperation(createLike, { input: like }))
setMyLike(res.data.createLike);
setLikesCount(likesCount + 1);
} catch (e) {
console.log(e);
}
}
const removeLike = async () => {
try {
await API.graphql(graphqlOperation(deleteLike, { input: { id: myLike.id } }))
setLikesCount(likesCount - 1);
setMyLike(null);
} catch (e) {
console.log(e);
}
}
const onLike = async () => {
if (!user) {
return;
}
if (!myLike) {
await submitLike()
} else {
await removeLike();
}
}
return (
<View style={styles.container}>
<View style={styles.iconContainer}>
<Feather name={"message-circle"} size={20} color={'grey'}/>
<Text style={styles.number}>{tweet.numberOfComments}</Text>
</View>
<View style={styles.iconContainer}>
<EvilIcons name={"retweet"} size={28} color={'grey'}/>
<Text style={styles.number}>{tweet.numberOfRetweets}</Text>
</View>
<View style={styles.iconContainer}>
<TouchableOpacity onPress={onLike}>
<AntDesign name={!myLike ? "hearto" : "heart"} size={20} color={!myLike ? 'grey' : 'red'}/>
</TouchableOpacity>
<Text style={styles.number}>{likesCount}</Text>
</View>
<View style={styles.iconContainer}>
<EvilIcons name={"share-google"} size={28} color={'grey'}/>
</View>
</View>
)
}
Example #10
Source File: NewTweetScreen.tsx From TwitterClone with MIT License | 4 votes |
export default function NewTweetScreen() {
const [tweet, setTweet] = useState("");
const [imageUrl, setImageUrl] = useState("");
const navigation = useNavigation();
const getPermissionAsync = async () => {
if (Platform.OS !== 'web') {
const { status } = await Permissions.askAsync(Permissions.CAMERA_ROLL);
if (status !== 'granted') {
alert('Sorry, we need camera roll permissions to make this work!');
}
}
};
useEffect(() => {
getPermissionAsync()
}, [])
const pickImage = async () => {
try {
let result = await ImagePicker.launchImageLibraryAsync({
mediaTypes: ImagePicker.MediaTypeOptions.All,
allowsEditing: true,
aspect: [4, 3],
quality: 1,
});
if (!result.cancelled) {
setImageUrl(result.uri);
}
console.log(result);
} catch (E) {
console.log(E);
}
};
const uploadImage = async () => {
try {
const response = await fetch(imageUrl);
const blob = await response.blob();
const urlParts = imageUrl.split('.');
const extension = urlParts[urlParts.length - 1];
const key = `${uuidv4()}.${extension}`;
await Storage.put(key, blob);
return key;
} catch (e) {
console.log(e);
}
return '';
}
const onPostTweet = async () => {
let image;
if (!!imageUrl) {
image = await uploadImage();
}
try {
const currentUser = await Auth.currentAuthenticatedUser({ bypassCache: true });
const newTweet = {
content: tweet,
image,
userID: currentUser.attributes.sub,
}
await API.graphql(graphqlOperation(createTweet, { input: newTweet }));
navigation.goBack();
} catch (e) {
console.log(e);
}
}
return (
<SafeAreaView style={styles.container}>
<View style={styles.headerContainer}>
<TouchableOpacity onPress={() => navigation.goBack()}>
<AntDesign name="close" size={30} color={Colors.light.tint} />
</TouchableOpacity>
<TouchableOpacity style={styles.button} onPress={onPostTweet}>
<Text style={styles.buttonText}>Tweet</Text>
</TouchableOpacity>
</View>
<View style={styles.newTweetContainer}>
<ProfilePicture image={'https://scontent.fkiv3-1.fna.fbcdn.net/v/t31.0-8/s960x960/22256588_1932617800312085_5686197942193420542_o.jpg?_nc_cat=110&_nc_sid=85a577&_nc_ohc=svjjE7DUkc0AX9yjcdC&_nc_ht=scontent.fkiv3-1.fna&tp=7&oh=1df4116c73c45a32ebad070704ca3333&oe=5F6ECD77'}/>
<View style={styles.inputsContainer}>
<TextInput
value={tweet}
onChangeText={(value) => setTweet(value)}
multiline={true}
numberOfLines={3}
style={styles.tweetInput}
placeholder={"What's happening?"}
/>
<TouchableOpacity onPress={pickImage}>
<Text style={styles.pickImage}>Pick a image</Text>
</TouchableOpacity>
<Image source={{ uri: imageUrl }} style={styles.image} />
</View>
</View>
</SafeAreaView>
);
}
Example #11
Source File: SwiperScreen.tsx From vsinder with Apache License 2.0 | 4 votes |
SwiperScreen: React.FC<MainTabNav<"swiper">> = ({
navigation,
}) => {
const viewMap = useRef<Record<string, "loading" | "done">>({});
const [mutate] = useMutation(defaultMutationFn);
const [report] = useMutation(defaultMutationFn);
const swiper = useRef<CardStack>(null);
const { buttonForeground } = useTheme();
const [outOfProfiles, setOutOfProfiles] = useState(false);
const fetchCount = useRef(0);
const { isLoading, isFetching, data, refetch } = useQuery<FeedResponse>(
"/feed",
defaultQueryFn
);
const view = async (i: number, liked: boolean) => {
const id = data?.profiles[i]?.id;
if (!id || id in viewMap.current) {
return;
}
viewMap.current[id] = "loading";
try {
await mutate([`/view`, { liked, userId: id }, "POST"]);
} catch {}
viewMap.current[id] = "done";
if (i >= data!.profiles.length - 1) {
for (let i = 0; i < 50; i++) {
if (Object.values(viewMap.current).some((x) => x === "loading")) {
await sleep(100);
} else {
break;
}
}
refetch({ throwOnError: true })
.then((x) => {
viewMap.current = {};
fetchCount.current++;
if (!x?.profiles) {
setOutOfProfiles(true);
}
})
.catch(() => {});
}
};
const navRef = useRef(navigation);
navRef.current = navigation;
useEffect(() => {
// This listener is fired whenever a user taps on or interacts with a notification (works when app is foregrounded, backgrounded, or killed)
const sub = Notifications.addNotificationResponseReceivedListener(() => {
navRef.current.navigate("matches");
});
return () => {
Notifications.removeNotificationSubscription(sub);
};
}, []);
if (
isLoading ||
isFetching ||
(data && !data.profiles.length && !outOfProfiles && fetchCount.current > 0)
) {
return <FullscreenLoading />;
}
if (!data?.profiles.length) {
return (
<FullscreenMessage message="There are no more profiles, try changing your criteria or come back later" />
);
}
return (
<ScreenWrapper>
<CardStack
ref={swiper}
renderNoMoreCards={() => null}
disableTopSwipe={true}
disableBottomSwipe={true}
onSwipedRight={(i) => {
view(i, true);
}}
onSwipedLeft={(i) => {
view(i, false);
}}
>
{data.profiles.map((x) => (
<Card key={x.id}>
<CodeCard
onReport={(message) => {
report([
"/report",
{ message, unmatchOrReject: "reject", userId: x.id },
"POST",
]).then(() => {
viewMap.current[x.id] = "done";
swiper.current?.swipeLeft();
});
}}
profile={x}
/>
</Card>
))}
</CardStack>
<View
style={{
marginTop: codeImageHeight + 40,
flexDirection: "row",
justifyContent: "center",
}}
>
<View
style={{
flexDirection: "row",
}}
>
<IconButton onPress={() => swiper.current?.swipeLeft()} size={60}>
<AntDesign name="close" size={30} color={buttonForeground} />
</IconButton>
<View style={{ width: 50 }} />
<IconButton onPress={() => swiper.current?.swipeRight()} size={60}>
<FontAwesome
style={{ marginTop: 2 }}
name="heart"
size={30}
color={buttonForeground}
/>
</IconButton>
</View>
</View>
</ScreenWrapper>
);
}
Example #12
Source File: AudioPlayer.tsx From react-native-jigsaw with MIT License | 4 votes |
export default function AudioPlayer({ source }: { source: AVPlaybackSource }) {
const [sound, setSound] = React.useState<Sound>();
const [playing, setPlay] = React.useState(false);
const [loading, setLoading] = React.useState(false);
const [durationMillis, setDurationMillis] = React.useState(1);
const [isDraggingSlider, setIsDraggingSlider] = React.useState(false);
const [sliderPositionMillis, setSliderPositionMillis] = React.useState(0);
const onPlaybackStatusUpdate = (status: AVPlaybackStatus) => {
if (status.isLoaded) {
if (status.isPlaying && !isDraggingSlider) {
setSliderPositionMillis(status.positionMillis);
}
}
};
const setOnPlaybackStatusUpdate = () => {
if (sound) {
sound.setOnPlaybackStatusUpdate(onPlaybackStatusUpdate);
}
};
React.useEffect(() => {
return sound
? () => {
sound.unloadAsync();
}
: undefined;
}, [sound]);
async function loadAudio() {
setLoading(true);
const { sound: s, status } = await Audio.Sound.createAsync(source);
setSound(s);
setLoading(false);
setOnPlaybackStatusUpdate();
if (status.isLoaded && status.durationMillis) {
setDurationMillis(status.durationMillis);
}
s.setOnPlaybackStatusUpdate(onPlaybackStatusUpdate);
await s.playAsync();
setPlay(true);
}
async function playSound() {
if (sound && playing) {
await sound.pauseAsync();
setPlay(false);
return;
}
if (sound && !playing) {
await sound.playAsync();
setPlay(true);
return;
}
await loadAudio();
}
const setTrackPosition = async (positionMillis: number) => {
if (sound) {
await sound.setPositionAsync(positionMillis);
}
};
const onSlidingComplete = (sliderValue: number) => {
if (isDraggingSlider) {
setIsDraggingSlider(false);
}
setTrackPosition(sliderValue);
};
const onSliderChange = () => {
if (!isDraggingSlider) {
setIsDraggingSlider(true);
}
};
const iconName = loading ? "loading1" : !sound || !playing ? "play" : "pause";
return (
<View style={styles.container}>
<TouchableHighlight onPress={playSound} style={{ marginRight: 8 }}>
<AntDesign name={iconName} size={24} />
</TouchableHighlight>
<Text style={{ marginRight: 8 }}>
{formatDuration(sliderPositionMillis || 0)} /{" "}
{formatDuration(durationMillis || 0)}
</Text>
<Slider
style={{ flex: 1 }}
minimumTrackTintColor="#333"
maximumTrackTintColor="#000000"
thumbTintColor="black"
minimumValue={0}
value={sliderPositionMillis}
maximumValue={durationMillis}
onValueChange={onSliderChange}
onSlidingComplete={onSlidingComplete}
/>
</View>
);
}
Example #13
Source File: index.tsx From tiktok-clone with MIT License | 4 votes |
Feed: React.FC<Props> = ({ play, item }) => {
const spinValue = new Animated.Value(0);
Animated.loop(
Animated.timing(spinValue, {
toValue: 1,
duration: 10000,
easing: Easing.linear,
useNativeDriver: true,
}),
).start();
const rotateProp = spinValue.interpolate({
inputRange: [0, 1],
outputRange: ['0deg', '360deg'],
});
return (
<>
<LinearGradient
colors={['rgba(0,0,0,.3)', 'transparent']}
style={{
position: 'absolute',
left: 0,
right: 0,
top: 0,
height: '70%',
}}
/>
<Container>
<Video
source={{ uri: item.uri }}
rate={1.0}
volume={1.0}
isMuted={false}
resizeMode="cover"
shouldPlay={play}
isLooping
style={{
width: '100%',
height: '100%',
}}
/>
</Container>
<Details>
<User>{item.username}</User>
<Tags>{item.tags}</Tags>
<MusicBox>
<FontAwesome name="music" size={15} color="#f5f5f5" />
<Music>{item.music}</Music>
</MusicBox>
</Details>
<Actions>
<BoxAction>
<AntDesign
style={{ alignSelf: 'center' }}
name="heart"
size={35}
color="#fff"
/>
<TextAction>{item.likes}</TextAction>
</BoxAction>
<BoxAction>
<FontAwesome
style={{ alignSelf: 'center' }}
name="commenting"
size={35}
color="#fff"
/>
<TextAction>{item.comments}</TextAction>
</BoxAction>
<BoxAction>
<FontAwesome
style={{ alignSelf: 'center' }}
name="whatsapp"
size={35}
color="#06d755"
/>
<TextAction>Share</TextAction>
</BoxAction>
<BoxAction>
<Animated.View
style={{
borderRadius: 50,
borderWidth: 12,
borderColor: '#292929',
transform: [
{
rotate: play ? rotateProp : 0,
},
],
}}
>
<Image
style={{
width: 35,
height: 35,
borderRadius: 25,
}}
source={{
uri: 'https://avatars3.githubusercontent.com/u/45601574',
}}
/>
</Animated.View>
<Lottie
source={musicFly}
progress={play ? spinValue : 0}
style={{ width: 150, position: 'absolute', bottom: 0, right: 0 }}
/>
</BoxAction>
</Actions>
<LinearGradient
colors={['transparent', 'rgba(0,0,0,.4)']}
style={{
position: 'absolute',
left: 0,
right: 0,
bottom: 0,
height: '50%',
}}
/>
</>
);
}
Example #14
Source File: app.routes.tsx From tiktok-clone with MIT License | 4 votes |
AppRoutes: React.FC = () => {
const [home, setHome] = useState(true);
StatusBar.setBarStyle('dark-content');
if (Platform.OS === 'android') StatusBar.setBackgroundColor('#fff');
if (home) {
StatusBar.setHidden(true);
if (Platform.OS === 'android') {
StatusBar.setBackgroundColor('#fff');
StatusBar.setBarStyle('light-content');
}
} else {
StatusBar.setHidden(false);
}
return (
<Tab.Navigator
shifting={false}
barStyle={{
backgroundColor: home ? '#000' : '#fff',
}}
initialRouteName="Home"
activeColor={home ? '#fff' : '#000'}
>
<Tab.Screen
name="Home"
component={Home}
listeners={{
focus: () => setHome(true),
blur: () => setHome(false),
}}
options={{
tabBarLabel: 'Home',
tabBarIcon: ({ color }) => (
<FontAwesome name="home" size={24} color={color} />
),
}}
/>
<Tab.Screen
name="Discover"
component={Discover}
options={{
tabBarLabel: 'Discover',
tabBarIcon: ({ color }) => (
<AntDesign name="search1" size={24} color={color} />
),
}}
/>
<Tab.Screen
name="Live"
component={Record}
listeners={({ navigation }) => ({
tabPress: e => {
// Prevent default action
e.preventDefault();
// Do something with the `navigation` object
navigation.navigate('Record');
},
})}
options={{
tabBarLabel: '',
tabBarIcon: () => <HomeButtom home={home} />,
}}
/>
<Tab.Screen
name="Inbox"
component={Inbox}
options={{
tabBarLabel: 'Inbox',
tabBarIcon: ({ color }) => (
<MaterialCommunityIcons
name="message-text-outline"
size={24}
color={color}
/>
),
}}
/>
<Tab.Screen
name="Me"
component={Me}
options={{
tabBarLabel: 'Me',
tabBarIcon: ({ color }) => (
<AntDesign name="user" size={24} color={color} />
),
}}
/>
</Tab.Navigator>
);
}