Невозможно активировать навигацию React с собственных карт React - PullRequest
0 голосов
/ 28 апреля 2019

Я создаю собственное приложение реагирования с использованием зависимости реакции-нативных карт, но не могу перейти на другие экраны с помощью реакции-навигатора onPress из MapView.

Я хотел бы передать {communityId: ${community._id}} объект для просмотра уникального экрана сообщества.

код:

import React, { Component } from 'react';
import { View, Image, StyleSheet, Vibration, TouchableOpacity, Text } from 'react-native';
import MapView, { Callout } from 'react-native-maps';
import { Marker } from 'react-native-maps';

class LogoTitle extends React.Component {
    render() {
        return (
            <Image
                source={require("./logo.png")}
                style={{ width: 60, height: 30 }}
            />
        );
    }
}

class MapScreen extends Component {
    constructor(props) {
        super(props);

        this.state = {
            latitude: null,
            longitude: null,
            error: null,
            communities: ""
        };
    }

    componentDidMount() {
        fetch("http://localhost:4000/community")
            .then(res => res.json())
            .then(res => {
                this.setState({ communities: res });
            });
        Vibration.vibrate();
        navigator.geolocation.getCurrentPosition(
            (position) => {
                this.setState({
                    latitude: position.coords.latitude,
                    longitude: position.coords.longitude,
                    error: null,
                });
            },
            (error) => this.setState({ error: error.message }),
            { enableHighAccuracy: true, timeout: 20000, maximumAge: 1000 },
        );
    }

    static navigationOptions = {
        headerTitle: <LogoTitle />
    };

    navigateToView(viewName, { param: value }) {
        console.log(viewName);
        const { navigate } = this.props.navigation;
        navigate(viewName, { param: value });
    }

    render() {
        const LatLng = {
            latitude: this.state.latitude,
            longitude: this.state.longitude
        }

        let commcoords;
        this.state.communities &&
            (commcoords = this.state.communities.map((community, id) => {
                let commlatlong;
                commlatlong = {
                    latitude: community.location.lat,
                    longitude: community.location.long
                };
                return (
                    <Marker
                        key={id}
                        coordinate={commlatlong}
                        title={community.name}>
                        <Callout>
                            <TouchableOpacity
                                onPress={() => this.navigateToView("Community", { communityId: `${community._id}` })}
                                style={styles.communityButton}>
                                <Text style={styles.communityButtonText}>{community.name}</Text>
                                <Text style={styles.descButtonText}>{community.description}</Text>
                            </TouchableOpacity>
                        </Callout>
                    </Marker>
                )
            }))
        return (
            <View style={styles.container}>
                {this.state.latitude &&
                    <MapView
                        style={styles.map}
                        initialRegion={{
                            latitude: this.state.latitude,
                            longitude: this.state.longitude,
                            latitudeDelta: 0.1011,
                            longitudeDelta: 0.1011,
                        }}>
                        <Marker
                            coordinate={LatLng}
                            title={`Latitude: ${this.state.latitude}`}
                            description={`Longitude: ${this.state.longitude}`}
                            pinColor='#000000'>
                        </Marker>
                        {commcoords}
                    </MapView>}
            </View>

        );
    }
}

Я уже попытался:

1) Использование обычного метода навигации.

onPress={() => this.props.navigation.navigate("Community", { communityId: `${community._id}` })}

2) Использование альтернативных методов касания, кнопок, осязаемых бликов и т. Д.

3) Попытка console.log запустить метод касания с помощью удаленного отладчика.Console.log никогда не запускался в консоли.

 navigateToView(viewName, { param: value }) {
        console.log(viewName);
        const { navigate } = this.props.navigation;
        navigate(viewName, { param: value });
    }

4) Изученные и предпринятые решения оказались безрезультатными по следующим ссылкам stackoverflow:

React Native - Как использоватьРеагировать на навигацию с помощью React Native Maps?

Реагировать на собственные карты, щелкнуть булавкой, чтобы перейти на другой экран

Я хотел бы решить эту проблему с навигацией по картам, чтобы увеличитьфункциональность в этом родном приложении.Если есть альтернативный метод, я открыт для любых предложений.Спасибо.

1 Ответ

0 голосов
/ 28 апреля 2019

Я выяснил, как вызвать событие onpress, используя onCalloutPress в маркере:

<Marker
                        key={id}
                        coordinate={commlatlong}
                        title={community.name}
                        onCalloutPress={() => this.props.navigation.navigate("Community", { communityId: `${community._id}` })}>
                        <Callout>
                            <TouchableOpacity
                                style={styles.communityButton}>
                                <Text style={styles.communityButtonText}>{community.name}</Text>
                                <Text style={styles.descButtonText}>{community.description}</Text>
                            </TouchableOpacity>
                        </Callout>
                    </Marker>

Теперь я могу перемещаться, чтобы показывать экраны с карты. Благодаря этому сообщению:

Событие щелчка маркером на собственных картах реагирования, не работающих в реагирующих ios

Дополнительный источник:

onCalloutPress Callback, который вызывается, когда пользователь нажимает на вызов.

https://github.com/react-native-community/react-native-maps/blob/master/docs/mapview.md

...