import React from 'react'; import { ScrollView, StyleSheet, Switch, Text, View } from 'react-native'; import MapView from 'react-native-maps'; import ListButton from '../components/ListButton'; import Layout from '../constants/Layout'; const REGION = { latitude: 37.78825, longitude: -122.4324, latitudeDelta: 0.0922, longitudeDelta: 0.0421, }; const getRandomFloat = (min: number, max: number) => { return Math.random() * (max - min) + min; }; interface State { isGoogleMap: boolean; } // See: https://github.com/expo/expo/pull/10229#discussion_r490961694 // eslint-disable-next-line @typescript-eslint/ban-types export default class MapsScreen extends React.Component<{}, State> { static navigationOptions = { title: '', }; readonly state: State = { isGoogleMap: false, }; _mapView?: MapView | null; render() { const provider: 'google' | undefined = this.state.isGoogleMap ? 'google' : undefined; return ( { this._mapView = ref; }} style={{ width: Layout.window.width, height: 300 }} initialRegion={REGION} provider={provider} /> {this._renderGoogleMapsSwitch()} {this._renderJumpToCoordButton()} ); } _renderGoogleMapsSwitch = () => { return ( { this.setState({ isGoogleMap }); }} value={this.state.isGoogleMap} /> Use Google maps ); }; _renderJumpToCoordButton = () => { return ( ); }; _animateToRandomViewingAngle = () => { if (this._mapView) { this._mapView.animateCamera({ pitch: getRandomFloat(0, 90), }); } }; _animateToRandomCoord = () => { if (this._mapView) { this._mapView.animateCamera({ center: { latitude: REGION.latitude + (Math.random() - 0.5) * (REGION.latitudeDelta / 2), longitude: REGION.longitude + (Math.random() - 0.5) * (REGION.longitudeDelta / 2), }, }); } }; }