آموزش استفاده از maps و carousel برای یافتن مکان مورد نظر
سلام به همه ی شما همراهان همیشگی ایزی بیلد 🙂
امروز قصد داریم تا یک آموزش کاربردی و مفید داشته باشیم که ب احتمال زیاد توی پروژه هاتون خیلی به کار میاد. همونطور که از عنوان مقالمون مشخصه میخوایم با استفاده از maps و carousel یه پروژه بسازیم. خب بریم سراغ شروع کار.
اولین قدم ساخت پروژه react native خودمون با استفاده از دستور زیره
npx react-native init YourProjectName
بعد از اینکه پروژه خودمون رو ساختیم میریم که کتابخونه های مورد نیاز رو هم اضافه کنیم.
به سراغ مستندات react native maps میریم و دستور زیر رو برای نصب توی ترمینال پروژه تایپ میکنیم
npm install react-native-maps --save-exact
برای انجام کانفیگ مربوط به کتابخونه هم میتونید به این لینک مراجعه کنید.
خب مرحله بعدی نصب کتابخونه react native snap carousel با دستور زیر هست
npm install --save react-native-snap-carousel
بعد از اینکه کتابخونه های مورد نظرمونو نصب کردیم میریم سراغ کد هامون
state = {
markers : [],
coordinates: [
{name: 'شهروند',
latitude: 37.8025259,
longitude: -122.4351431,
img: require('../../assets/images/banner1.jpg'),
text: 'فروشگاه شهروند',
loc: 'تهران - ایران',
des: 'خوراک و اغذیه',
},
{name: 'افق کوروش', latitude: 37.7896386, longitude: -122.421646,img: require('../../assets/images/banner1.jpg'),
text: 'فروشگاه افق کوروش',
loc: 'تهران - ایران',
des: 'خوراک و اغذیه',},
{name: 'جانبازان', latitude: 37.7665248, longitude: -122.4161628,img: require('../../assets/images/banner1.jpg'),
text: 'فروشگاه جانبازان',
loc: 'تهران - ایران',
des: 'خوراک و اغذیه',},
{name: 'رفاه', latitude: 37.7734153, longitude: -122.4577787,img: require('../../assets/images/banner1.jpg'),
text: 'فروشگاه رفاه',
loc: 'تهران - ایران',
des: 'خوراک و اغذیه',},
{name: 'جانبو', latitude: 37.7948605, longitude: -122.4596065,img: require('../../assets/images/banner1.jpg'),
text: 'فروشگاه جانبو',
loc: 'تهران - ایران',
des: 'خوراک و اغذیه',},
]
}
خب ما بطور مثال اطلاعات مکانی، نام،و دسته بندی چند تا فروشگاه رو داخل state تعریف کردیم
مرحله بعد میریم تا کامپوننت map و carousel رو داخل return قرار بدیم
با استفاده از marker , callout که داخل mapview تعریف کردیم میتونیم که یک موقعیت مکانی رو نشون بدیم که این موقعیت مکانی میتونه موقعیت خود کاربر هم باشه.
دستور .map به ما اجازه میده تا مشخصات فروشگاه هایی که داخل state تعریف کردیم همگی نمایش داده شن.
import MapView, {Callout, Marker, Polygon, PROVIDER_GOOGLE} from "react-native-maps";
this._map = map}
style={styles.map}
provider={PROVIDER_GOOGLE}
region={{
latitude: 37.78825,
longitude: -122.4324,
latitudeDelta: 0.09,
longitudeDelta: 0.035,
}}
>
hiiiiiiiiiiii
{this.state.coordinates.map((marker,index) => (
this._onMarkerPressed(marker , index)}
ref = {ref => this.state.markers[index] = ref}
coordinate={{latitude: marker.latitude, longitude: marker.longitude}}
title={marker.name}>
{marker.name}
)
)}
this.carousel = ref}
data={this.state.coordinates}
sliderWidth={wp(100)}
itemWidth={wp(83)}
renderItem={this._renderItem}
onSnapToItem={(index) => this._onCarouselItemChange(index)}
removeClippedSubviews = {false}
/>
خب حالا میریم سراغ متد های carousel
renderItem : آیتم هایی که قصد داریم به شکل carousel نمایش داده شوند را رندر میکند
onSnapItem : این متدی هستش که باعث میشه با تغییر آیتم هامون چه اتفاقی رخ بده که کد هاشو در پایین قرار دادم که بعد از متد render مون قرار داده میشن
_renderItem({item, index}) {
return (
{item.text}
{item.des}
{item.loc}
)
}
_onCarouselItemChange = (index) => {
let location = this.state.coordinates[index]
this._map.animateToRegion({
latitude : location.latitude,
longitude : location.longitude,
latitudeDelta : 0.09,
longitudeDelta : 0.035
})
this.state.markers[index].showCallout()
}
_onMarkerPressed = (location , index) => {
this._map.animateToRegion({
latitude : location.latitude,
longitude : location.longitude,
latitudeDelta : 0.09,
longitudeDelta : 0.035
})
this.carousel.snapToItem(index)
}
onMarkedPress هم رابطه مستقیم با carousel مون داره و با فشردن هر کدوم از نقاطی که مشخص کردیم باعث میشه آیتم هامون هم جابجا شن 🙂
نتیجه کار :