#maps Component
```import React, {useEffect, useRef, useState} from 'react';
import {
Dimensions,
Image,
Platform,
StyleSheet,
Text,
TouchableOpacity,
View,
} from 'react-native';
import MapView, {
AnimatedRegion,
Marker,
Animated as AnimatedMap,
} from 'react-native-maps'; // remove PROVIDER_GOOGLE import if not using Google Maps
import MapViewDirections from 'react-native-maps-directions';
import {useTheme} from 'react-native-paper';
import Animated from 'react-native-reanimated';
import BottomSheet from 'reanimated-bottom-sheet';
import {GOOGLE_MAPS_APIKEY} from '../../constants/googlekey';
import mapIcons from '../../constants/mapIcons';
import {getCurrentLocation, locationPermission} from './helper';
// const origin = {latitude: 37.3318456, longitude: -122.0296002};
// const destination = {latitude: 37.771707, longitude: -122.4053769};
const {width, height} = Dimensions.get('window');
const screen = Dimensions.get('window');
const ASPECT_RATIO = screen.width / screen.height;
const LATITUDE_DELTA = 0.6;
const LONGITUDE_DELTA = LATITUDE_DELTA * ASPECT_RATIO;
function isCoordinateInRegion(coordinate, region) {
const top = region.latitude + region.latitudeDelta / 2;
const bot = region.latitude - region.latitudeDelta / 2;
const right = region.longitude + region.logitudeDelta / 2;
const left = region.longitude - region.logitudeDelta / 2;
return (
coordinate.latitude <= top &&
coordinate.latitude >= bottom &&
coordinate.longitude <= right &&
coordinate.longitude >= left
);
}
export default function MapScreen() {
const markerRef = useRef();
const {colors} = useTheme();
const userLocationCoordinates = useRef(
new AnimatedRegion({
latitude: 17.385,
longitude: 78.4867,
latitudeDelta: LATITUDE_DELTA,
longitudeDelta: LONGITUDE_DELTA,
}),
);
const [state, setState] = useState({
curLoc: {
latitude: 17.385,
longitude: 78.4867,
},
destinationCords: {
latitude: 18.5204,
longitude: 73.8567,
},
isLoading: false,
// coordinate: new AnimatedRegion({
// latitude: 17.385,
// longitude: 78.4867,
// latitudeDelta: LATITUDE_DELTA,
// longitudeDelta: LONGITUDE_DELTA,
// }),
});
const {curLoc, destinationCords, isLoading, coordinate} = state;
const getLiveLocation = async () => {
const locPermission = await locationPermission();
console.log('loaction Permisssom', locPermission);
if (locPermission) {
// const res = await getCurrentLocation();
// console.log('res....', res);
const {latitude, longitude} = await getCurrentLocation();
console.log('get live location after 4 second', latitude, longitude);
animate(latitude, longitude);
setState(prev => ({
...prev,
curLoc: {latitude, longitude},
// coordinate: new AnimatedRegion({
// latitude: latitude,
// longitude: longitude,
// latitudeDelta: LATITUDE_DELTA,
// longitudeDelta: LONGITUDE_DELTA,
// }),
}));
}
};
const animateToLiveLocation = async () => {
const locPermission = await locationPermission();
console.log('animateLiveLocation', locPermission);
if (locPermission) {
// const res = await getCurrentLocation();
// console.log('res....', res);
const {latitude, longitude} = await getCurrentLocation();
console.log(
'get live location after 4 second & animateLive Location',
latitude,
longitude,
);
animate(latitude, longitude);
setState(prev => ({
...prev,
curLoc: {latitude, longitude},
// coordinate: new AnimatedRegion({
// latitude: latitude,
// longitude: longitude,
// latitudeDelta: LATITUDE_DELTA,
// longitudeDelta: LONGITUDE_DELTA,
// }),
}));
}
};
useEffect(() => {
getLiveLocation();
const interval = setInterval(() => {
animateToLiveLocation();
}, 6000);
return () => clearInterval(interval);
}, []);
const animate = (latitude, longitude) => {
const newCoordinate = {latitude, longitude};
if (Platform.OS == 'android') {
if (markerRef.current) {
markerRef.current.animateMarkerToCoordinate(newCoordinate, 7000);
}
} else {
userLocationCoordinates.current.timing(newCoordinate).start();
}
mapRef.current.fitToCoordinates([newCoordinate], {
// edgePadding: {top: 50, right: 50, bottom: 400, left: 50},
});
};
const onCenter = () => {
mapRef.current.animateToRegion({
latitude: curLoc.latitude,
longitude: curLoc.longitude,
latitudeDelta: LATITUDE_DELTA,
longitudeDelta: LONGITUDE_DELTA,
});
};
const renderInner = () => (
<View style={styles.panel}>
<View
style={{
flexDirection: 'row',
paddingRight: 20,
alignItems: 'center',
}}>
<Image
style={{height: 40, width: 40}}
// source={{
// uri:
// 'data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNjQgNjQiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNjQgNjQiIHdpZHRoPSI1MTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGc+PHBhdGggZD0ibTUyIDMzaDR2NGgtNHoiIGZpbGw9IiNlN2U0ZGQiLz48cGF0aCBkPSJtMzAgMzNoNHY0aC00eiIgZmlsbD0iI2U3ZTRkZCIvPjxwYXRoIGQ9Im0yNiAxN2gzNHYxM2gtMzR6IiBmaWxsPSIjZjdkODgxIi8+PHBhdGggZD0ibTI2IDE3aDM0djNoLTM0eiIgZmlsbD0iIzdmNzg2YiIvPjxnPjxwYXRoIGQ9Im0yMSA0Nmg3djJoLTd6IiBmaWxsPSIjZTdlNGRkIi8+PC9nPjxnPjxwYXRoIGQ9Im0zMCA0Nmg2djJoLTZ6IiBmaWxsPSIjZTdlNGRkIi8+PC9nPjxwYXRoIGQ9Im0yOSA0OWMtMS4xMDUgMC0yLS44OTUtMi0ydi0yaDR2MmMwIDEuMTA1LS44OTUgMi0yIDJ6IiBmaWxsPSIjZjJjMzUxIi8+PHBhdGggZD0ibTQ4IDQ5IDEwLjAxOS0uMDFjMS4wOTctLjAxIDEuOTgxLS45MDMgMS45ODEtMnYtNS45OWgtNTB2NGgzNXYxLjk3MmgzeiIgZmlsbD0iIzllOTY4ZCIvPjxwYXRoIGQ9Im00IDM0LjAyOHYtMy43ODVjMC0uNzk2LjMxNi0xLjU1OS44NzktMi4xMjFsNi4yNDMtNi4yNDNjLjU2Mi0uNTYzIDEuMzI1LS44NzkgMi4xMjEtLjg3OWg2Ljc1N2MuNTUyIDAgMSAuNDQ4IDEgMXYxOWgtMTd2LTIuOTcyIiBmaWxsPSIjZjJjMzUxIi8+PHBhdGggZD0ibTE0IDQwLjk5OWMwLTIuMjA5IDEuNzkxLTQgNC00di0zaC0xNHY2Ljk3MmgxMHoiIGZpbGw9IiNmN2Q4ODEiLz48cGF0aCBkPSJtNCAzNC4wMjggMTQtLjAyOHYtMTBoLTlsLTQuMTIxIDQuMTIxYy0uNTYzLjU2My0uODc5IDEuMzI2LS44NzkgMi4xMjJ6IiBmaWxsPSIjYzdlMmZjIi8+PHBhdGggZD0ibTI5IDE3YzAtMS4zMTEuODQ2LTIuNDE0IDIuMDE4LTIuODIyLS4wMDQtLjA2LS4wMTgtLjExNy0uMDE4LS4xNzggMC0xLjY1NyAxLjM0My0zIDMtMyAuNTM3IDAgMS4wMzQuMTUzIDEuNDcuNC41MzItLjgzOSAxLjQ2My0xLjQgMi41My0xLjQuNzcyIDAgMS40NjguMyAyIC43NzkuNTMyLS40NzkgMS4yMjgtLjc3OSAyLS43NzkuNTQ5IDAgMS4wNTcuMTU4IDEuNS40MTYuNDQzLS4yNTguOTUxLS40MTYgMS41LS40MTZzMS4wNTcuMTU4IDEuNS40MTZjLjQ0My0uMjU4Ljk1MS0uNDE2IDEuNS0uNDE2IDEuMDY3IDAgMS45OTguNTYxIDIuNTMgMS40LjQzNi0uMjQ3LjkzMy0uNCAxLjQ3LS40IDEuNjU3IDAgMyAxLjM0MyAzIDMgMCAuMDYxLS4wMTQuMTE4LS4wMTguMTc4IDEuMTcyLjQwOCAyLjAxOCAxLjUxMSAyLjAxOCAyLjgyMnoiIGZpbGw9IiM5NzY5NDciLz48cGF0aCBkPSJtNiAzOC4wMjhoLTJjLTEuMTA1IDAtMi0uODk1LTItMiAwLTEuMTA1Ljg5NS0yIDItMmgyeiIgZmlsbD0iI2U3ZTRkZCIvPjxwYXRoIGQ9Im0xMCA0Ny4wMjhoLTNjLTEuNjU3IDAtMy0xLjM0My0zLTN2LTNoNnoiIGZpbGw9IiM3Zjc4NmIiLz48cGF0aCBkPSJtMjEgMzdoNDF2NGgtNDF6IiBmaWxsPSIjZjdkODgxIi8+PGcgZmlsbD0iIzUzNGY0NCI+PGNpcmNsZSBjeD0iMTgiIGN5PSI0OS4wMjgiIHI9IjUiLz48Y2lyY2xlIGN4PSIzOSIgY3k9IjQ5LjAyOCIgcj0iNSIvPjxjaXJjbGUgY3g9IjUyIiBjeT0iNDkuMDI4IiByPSI1Ii8+PC9nPjxnPjxwYXRoIGQ9Im0xOCA1MS4wMjdjLTEuMTAzIDAtMi0uODk3LTItMnMuODk3LTIgMi0yIDIgLjg5NyAyIDItLjg5NyAyLTIgMnoiIGZpbGw9IiNjYmMzYjYiLz48L2c+PGc+PHBhdGggZD0ibTM5IDUxLjAyN2MtMS4xMDMgMC0yLS44OTctMi0ycy44OTctMiAyLTIgMiAuODk3IDIgMi0uODk3IDItMiAyeiIgZmlsbD0iI2NiYzNiNiIvPjwvZz48Zz48cGF0aCBkPSJtNTIgNTEuMDI3Yy0xLjEwMyAwLTItLjg5Ny0yLTJzLjg5Ny0yIDItMiAyIC44OTcgMiAyLS44OTcgMi0yIDJ6IiBmaWxsPSIjY2JjM2I2Ii8+PC9nPjxnPjxwYXRoIGQ9Im05IDM2LjAyOGg0djJoLTR6IiBmaWxsPSIjOWU5NjhkIi8+PC9nPjxwYXRoIGQ9Im00IDQ0LjAyOGMwIC4zNDIuMDY5LjY2NS4xNzUuOTcxaDUuODI0di0yaC01Ljk5OXoiIGZpbGw9IiM1MzRmNDQiLz48cGF0aCBkPSJtNjIgMzNoLTM2bC0zLTE1aC03LjVjLS44MjggMC0xLjUtLjY3Mi0xLjUtMS41IDAtLjgyOC42NzItMS41IDEuNS0xLjVoOC44NGMuOTYyIDAgMS43ODguNjg1IDEuOTY2IDEuNjMxbDIuNjk0IDEzLjM2OWgzM3oiIGZpbGw9IiNmMmMzNTEiLz48Zz48cGF0aCBkPSJtNTUgMjBoMnYxMGgtMnoiIGZpbGw9IiNmMmMzNTEiLz48L2c+PGc+PHBhdGggZD0ibTUxIDIwaDJ2MTBoLTJ6IiBmaWxsPSIjZjJjMzUxIi8+PC9nPjxnPjxwYXRoIGQ9Im00NyAyMGgydjEwaC0yeiIgZmlsbD0iI2YyYzM1MSIvPjwvZz48Zz48cGF0aCBkPSJtNDMgMjBoMnYxMGgtMnoiIGZpbGw9IiNmMmMzNTEiLz48L2c+PGc+PHBhdGggZD0ibTM5IDIwaDJ2MTBoLTJ6IiBmaWxsPSIjZjJjMzUxIi8+PC9nPjxnPjxwYXRoIGQ9Im0zNSAyMGgydjEwaC0yeiIgZmlsbD0iI2YyYzM1MSIvPjwvZz48Zz48cGF0aCBkPSJtMzEgMjBoMnYxMGgtMnoiIGZpbGw9IiNmMmMzNTEiLz48L2c+PHBhdGggZD0ibTQuODc5IDI4LjEyMWMtLjU2My41NjMtLjg3OSAxLjMyNi0uODc5IDIuMTIydjMuNzg1bDYuNjItLjAxM2MyLjM4MS0yLjIxNiAzLjg4LTUuMzY4IDMuODgtOC44NzcgMC0uMzg0LS4wMjMtLjc2Mi0uMDU3LTEuMTM3aC01LjQ0M3oiIGZpbGw9IiNlYmY3ZmUiLz48cGF0aCBkPSJtNDUuMDMxIDEwLjAwMmMtLjAxMSAwLS4wMjEtLjAwMi0uMDMxLS4wMDItLjU0OSAwLTEuMDU3LjE1OC0xLjUuNDE2LS40NDMtLjI1OC0uOTUxLS40MTYtMS41LS40MTYtLjc3MiAwLTEuNDY4LjMtMiAuNzc5LS41MzItLjQ3OS0xLjIyOC0uNzc5LTItLjc3OS0xLjA2NyAwLTEuOTk4LjU2MS0yLjUzIDEuNC0uNDM2LS4yNDctLjkzMy0uNC0xLjQ3LS40LTEuNjU3IDAtMyAxLjM0My0zIDMgMCAuMDYxLjAxNC4xMTguMDE4LjE3OC0xLjE3Mi40MDgtMi4wMTggMS41MTEtMi4wMTggMi44MjJoMTAuODkyYzIuMzE3LTEuNzg1IDQuMTEzLTQuMjAyIDUuMTM5LTYuOTk4eiIgZmlsbD0iI2MxOGU1OSIvPjwvZz48L3N2Zz4=',
// }}
source={require('./../../assets/dump-truck.png')}
/>
<Text style={{fontSize: 15, color: 'black', marginLeft: 10}}>
City Tower, Mumbai Hwy, Judges Colony, New Malakpet, Hyderabad,
</Text>
</View>
<View
style={{
flexDirection: 'row',
paddingRight: 20,
alignItems: 'center',
}}>
<Image
style={{height: 40, width: 40}}
// source={{
// uri:
// 'data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNjQgNjQiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNjQgNjQiIHdpZHRoPSI1MTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGc+PHBhdGggZD0ibTUyIDMzaDR2NGgtNHoiIGZpbGw9IiNlN2U0ZGQiLz48cGF0aCBkPSJtMzAgMzNoNHY0aC00eiIgZmlsbD0iI2U3ZTRkZCIvPjxwYXRoIGQ9Im0yNiAxN2gzNHYxM2gtMzR6IiBmaWxsPSIjZjdkODgxIi8+PHBhdGggZD0ibTI2IDE3aDM0djNoLTM0eiIgZmlsbD0iIzdmNzg2YiIvPjxnPjxwYXRoIGQ9Im0yMSA0Nmg3djJoLTd6IiBmaWxsPSIjZTdlNGRkIi8+PC9nPjxnPjxwYXRoIGQ9Im0zMCA0Nmg2djJoLTZ6IiBmaWxsPSIjZTdlNGRkIi8+PC9nPjxwYXRoIGQ9Im0yOSA0OWMtMS4xMDUgMC0yLS44OTUtMi0ydi0yaDR2MmMwIDEuMTA1LS44OTUgMi0yIDJ6IiBmaWxsPSIjZjJjMzUxIi8+PHBhdGggZD0ibTQ4IDQ5IDEwLjAxOS0uMDFjMS4wOTctLjAxIDEuOTgxLS45MDMgMS45ODEtMnYtNS45OWgtNTB2NGgzNXYxLjk3MmgzeiIgZmlsbD0iIzllOTY4ZCIvPjxwYXRoIGQ9Im00IDM0LjAyOHYtMy43ODVjMC0uNzk2LjMxNi0xLjU1OS44NzktMi4xMjFsNi4yNDMtNi4yNDNjLjU2Mi0uNTYzIDEuMzI1LS44NzkgMi4xMjEtLjg3OWg2Ljc1N2MuNTUyIDAgMSAuNDQ4IDEgMXYxOWgtMTd2LTIuOTcyIiBmaWxsPSIjZjJjMzUxIi8+PHBhdGggZD0ibTE0IDQwLjk5OWMwLTIuMjA5IDEuNzkxLTQgNC00di0zaC0xNHY2Ljk3MmgxMHoiIGZpbGw9IiNmN2Q4ODEiLz48cGF0aCBkPSJtNCAzNC4wMjggMTQtLjAyOHYtMTBoLTlsLTQuMTIxIDQuMTIxYy0uNTYzLjU2My0uODc5IDEuMzI2LS44NzkgMi4xMjJ6IiBmaWxsPSIjYzdlMmZjIi8+PHBhdGggZD0ibTI5IDE3YzAtMS4zMTEuODQ2LTIuNDE0IDIuMDE4LTIuODIyLS4wMDQtLjA2LS4wMTgtLjExNy0uMDE4LS4xNzggMC0xLjY1NyAxLjM0My0zIDMtMyAuNTM3IDAgMS4wMzQuMTUzIDEuNDcuNC41MzItLjgzOSAxLjQ2My0xLjQgMi41My0xLjQuNzcyIDAgMS40NjguMyAyIC43NzkuNTMyLS40NzkgMS4yMjgtLjc3OSAyLS43NzkuNTQ5IDAgMS4wNTcuMTU4IDEuNS40MTYuNDQzLS4yNTguOTUxLS40MTYgMS41LS40MTZzMS4wNTcuMTU4IDEuNS40MTZjLjQ0My0uMjU4Ljk1MS0uNDE2IDEuNS0uNDE2IDEuMDY3IDAgMS45OTguNTYxIDIuNTMgMS40LjQzNi0uMjQ3LjkzMy0uNCAxLjQ3LS40IDEuNjU3IDAgMyAxLjM0MyAzIDMgMCAuMDYxLS4wMTQuMTE4LS4wMTguMTc4IDEuMTcyLjQwOCAyLjAxOCAxLjUxMSAyLjAxOCAyLjgyMnoiIGZpbGw9IiM5NzY5NDciLz48cGF0aCBkPSJtNiAzOC4wMjhoLTJjLTEuMTA1IDAtMi0uODk1LTItMiAwLTEuMTA1Ljg5NS0yIDItMmgyeiIgZmlsbD0iI2U3ZTRkZCIvPjxwYXRoIGQ9Im0xMCA0Ny4wMjhoLTNjLTEuNjU3IDAtMy0xLjM0My0zLTN2LTNoNnoiIGZpbGw9IiM3Zjc4NmIiLz48cGF0aCBkPSJtMjEgMzdoNDF2NGgtNDF6IiBmaWxsPSIjZjdkODgxIi8+PGcgZmlsbD0iIzUzNGY0NCI+PGNpcmNsZSBjeD0iMTgiIGN5PSI0OS4wMjgiIHI9IjUiLz48Y2lyY2xlIGN4PSIzOSIgY3k9IjQ5LjAyOCIgcj0iNSIvPjxjaXJjbGUgY3g9IjUyIiBjeT0iNDkuMDI4IiByPSI1Ii8+PC9nPjxnPjxwYXRoIGQ9Im0xOCA1MS4wMjdjLTEuMTAzIDAtMi0uODk3LTItMnMuODk3LTIgMi0yIDIgLjg5NyAyIDItLjg5NyAyLTIgMnoiIGZpbGw9IiNjYmMzYjYiLz48L2c+PGc+PHBhdGggZD0ibTM5IDUxLjAyN2MtMS4xMDMgMC0yLS44OTctMi0ycy44OTctMiAyLTIgMiAuODk3IDIgMi0uODk3IDItMiAyeiIgZmlsbD0iI2NiYzNiNiIvPjwvZz48Zz48cGF0aCBkPSJtNTIgNTEuMDI3Yy0xLjEwMyAwLTItLjg5Ny0yLTJzLjg5Ny0yIDItMiAyIC44OTcgMiAyLS44OTcgMi0yIDJ6IiBmaWxsPSIjY2JjM2I2Ii8+PC9nPjxnPjxwYXRoIGQ9Im05IDM2LjAyOGg0djJoLTR6IiBmaWxsPSIjOWU5NjhkIi8+PC9nPjxwYXRoIGQ9Im00IDQ0LjAyOGMwIC4zNDIuMDY5LjY2NS4xNzUuOTcxaDUuODI0di0yaC01Ljk5OXoiIGZpbGw9IiM1MzRmNDQiLz48cGF0aCBkPSJtNjIgMzNoLTM2bC0zLTE1aC03LjVjLS44MjggMC0xLjUtLjY3Mi0xLjUtMS41IDAtLjgyOC42NzItMS41IDEuNS0xLjVoOC44NGMuOTYyIDAgMS43ODguNjg1IDEuOTY2IDEuNjMxbDIuNjk0IDEzLjM2OWgzM3oiIGZpbGw9IiNmMmMzNTEiLz48Zz48cGF0aCBkPSJtNTUgMjBoMnYxMGgtMnoiIGZpbGw9IiNmMmMzNTEiLz48L2c+PGc+PHBhdGggZD0ibTUxIDIwaDJ2MTBoLTJ6IiBmaWxsPSIjZjJjMzUxIi8+PC9nPjxnPjxwYXRoIGQ9Im00NyAyMGgydjEwaC0yeiIgZmlsbD0iI2YyYzM1MSIvPjwvZz48Zz48cGF0aCBkPSJtNDMgMjBoMnYxMGgtMnoiIGZpbGw9IiNmMmMzNTEiLz48L2c+PGc+PHBhdGggZD0ibTM5IDIwaDJ2MTBoLTJ6IiBmaWxsPSIjZjJjMzUxIi8+PC9nPjxnPjxwYXRoIGQ9Im0zNSAyMGgydjEwaC0yeiIgZmlsbD0iI2YyYzM1MSIvPjwvZz48Zz48cGF0aCBkPSJtMzEgMjBoMnYxMGgtMnoiIGZpbGw9IiNmMmMzNTEiLz48L2c+PHBhdGggZD0ibTQuODc5IDI4LjEyMWMtLjU2My41NjMtLjg3OSAxLjMyNi0uODc5IDIuMTIydjMuNzg1bDYuNjItLjAxM2MyLjM4MS0yLjIxNiAzLjg4LTUuMzY4IDMuODgtOC44NzcgMC0uMzg0LS4wMjMtLjc2Mi0uMDU3LTEuMTM3aC01LjQ0M3oiIGZpbGw9IiNlYmY3ZmUiLz48cGF0aCBkPSJtNDUuMDMxIDEwLjAwMmMtLjAxMSAwLS4wMjEtLjAwMi0uMDMxLS4wMDItLjU0OSAwLTEuMDU3LjE1OC0xLjUuNDE2LS40NDMtLjI1OC0uOTUxLS40MTYtMS41LS40MTYtLjc3MiAwLTEuNDY4LjMtMiAuNzc5LS41MzItLjQ3OS0xLjIyOC0uNzc5LTItLjc3OS0xLjA2NyAwLTEuOTk4LjU2MS0yLjUzIDEuNC0uNDM2LS4yNDctLjkzMy0uNC0xLjQ3LS40LTEuNjU3IDAtMyAxLjM0My0zIDMgMCAuMDYxLjAxNC4xMTguMDE4LjE3OC0xLjE3Mi40MDgtMi4wMTggMS41MTEtMi4wMTggMi44MjJoMTAuODkyYzIuMzE3LTEuNzg1IDQuMTEzLTQuMjAyIDUuMTM5LTYuOTk4eiIgZmlsbD0iI2MxOGU1OSIvPjwvZz48L3N2Zz4=',
// }}
source={require('./../../assets/tipper.png')}
/>
<Text style={{fontSize: 15, color: 'black', marginLeft: 10}}>
Shivaji Marg, Vinayaka Hills, Vignanapuri Teachers Colony, B N Reddy
Nagar, Hyderabad
</Text>
</View>
<View style={{flexDirection: 'row', margin: 5}}>
{/* <Icon name="dot-single" style={{color: 'red'}} size={35} /> */}
<Text style={{fontSize: 15, color: 'black'}}>Commodity : </Text>
<Text style={{fontWeight: 'bold'}}> Black Dirt</Text>
</View>
<TouchableOpacity
style={styles.panelButton}
onPress={() => bs.current.snapTo(1)}>
<Text style={styles.panelButtonTitle}>Start</Text>
</TouchableOpacity>
</View>
);
const renderHeader = () => (
<View style={styles.header}>
<View style={styles.panelHeader}>
<View style={styles.panelHandle} />
</View>
</View>
);
const iosSnapPoints = [590, 430];
const bs = React.createRef();
const fall = new Animated.Value(1);
const mapRef = React.useRef();
return (
<View style={styles.container}>
<AnimatedMap
// provider={PROVIDER_GOOGLE} // remove if not using Google Maps
onRegionChange={console.log}
ref={mapRef}
style={styles.map}
initialRegion={{
...curLoc,
latitudeDelta: LATITUDE_DELTA,
longitudeDelta: LONGITUDE_DELTA,
}}>
{/* {Object.keys(curLoc).length > 0 && ( */}
<Marker.Animated
ref={markerRef}
coordinate={userLocationCoordinates.current}
image={mapIcons.currentLocation}
/>
{/* )} */}
{Object.keys(destinationCords).length > 0 && (
<Marker coordinate={destinationCords} image={mapIcons.destination} />
)}
{Object.keys(destinationCords).length > 0 && (
<MapViewDirections
origin={curLoc}
destination={destinationCords}
apikey={GOOGLE_MAPS_APIKEY}
strokeWidth={3}
strokeColor="#223664"
optimizeWaypoints={true}
onStart={params => {
console.log(
`Started routing between "${params.origin}" and "${params.destination}"`,
);
}}
onReady={result => {
console.log(`Distance: ${result.distance} km`);
console.log(`Duration: ${result.duration} min.`);
mapRef.current.fitToCoordinates(result.coordinates, {
edgePadding: {
// right: 50,
// left: 50,
// bottom: 300,
// top: 100,
},
});
}}
/>
)}
</AnimatedMap>
<TouchableOpacity
style={{
position: 'absolute',
// bottom: 0,
// right: 0,
left: 0,
top: 0,
}}
onPress={onCenter}>
<Image source={mapIcons.greenIndicator} />
</TouchableOpacity>
<BottomSheet
ref={bs}
snapPoints={Platform.OS === 'android' ? [500, 400] : iosSnapPoints}
renderContent={renderInner}
renderHeader={renderHeader}
initialSnap={0}
callbackNode={fall}
enabledGestureInteraction={true}
enabledHeaderGestureInteraction={true}
/>
</View>
);
}
const styles = StyleSheet.create({
panel: {
padding: 20,
backgroundColor: '#FFFFFF',
paddingTop: -20,
// borderTopLeftRadius: 20,
// borderTopRightRadius: 20,
// shadowColor: '#000000',
// shadowOffset: {width: 0, height: 0},
// shadowRadius: 5,
// shadowOpacity: 0.4,
// flex: 1,
// marginLeft: -400,
},
container: {
...StyleSheet.absoluteFillObject,
height: height,
width: width,
justifyContent: 'flex-end',
alignItems: 'center',
flex: 1,
},
map: {
...StyleSheet.absoluteFillObject,
},
panelButton: {
padding: 13,
borderRadius: 10,
backgroundColor: '#223664',
alignItems: 'center',
marginVertical: 7,
},
panelButtonTitle: {
fontSize: 17,
fontWeight: 'bold',
color: 'white',
},
header: {
backgroundColor: '#FFFFFF',
shadowColor: '#333333',
shadowOffset: {width: -1, height: -3},
shadowRadius: 2,
shadowOpacity: 0.4,
// elevation: 5,
paddingTop: 20,
borderTopLeftRadius: 20,
borderTopRightRadius: 20,
},
panelHeader: {
alignItems: 'center',
},
panelHandle: {
width: 40,
height: 8,
borderRadius: 4,
backgroundColor: '#00000040',
marginBottom: 10,
},
});
```