Untitled
unknown
plain_text
2 years ago
2.8 kB
3
Indexable
import 'dart:async'; import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'package:geolocator/geolocator.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; class MapScreen extends StatefulWidget { @override _MapScreenState createState() => _MapScreenState(); } class _MapScreenState extends State<MapScreen> { static const LatLng _initialLocation = const LatLng(0.0, 0.0); GoogleMapController _mapController; Set<Marker> _markers = {}; LatLngBounds _bounds; // Inisialisasi lokasi pengguna sebagai lokasi di luar batas titik koordinat API LatLng _userLocation = const LatLng(0.0, 0.0); @override void initState() { super.initState(); _fetchMarkers(); _getCurrentLocation(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Peta'), ), body: GoogleMap( onMapCreated: _onMapCreated, initialCameraPosition: CameraPosition( target: _initialLocation, zoom: 15.0, ), markers: _markers, ), ); } void _onMapCreated(GoogleMapController controller) { _mapController = controller; } Future<void> _fetchMarkers() async { final response = await http.get( Uri.parse('https://api.example.com/markers'), ); if (response.statusCode == 200) { final data = jsonDecode(response.body); final latLngList = List<LatLng>.from( data.map((item) => LatLng(item['lat'], item['lng'])), ); // Set _bounds dengan batas titik koordinat dari API _bounds = LatLngBounds( southwest: latLngList.first, northeast: latLngList.last, ); // Tambahkan penanda ke _markers for (final latLng in latLngList) { _markers.add( Marker( markerId: MarkerId(latLng.toString()), position: latLng, ), ); } } } Future<void> _getCurrentLocation() async { final currentPosition = await Geolocator.getCurrentPosition(); // Jika pengguna berada di dalam batas titik koordinat, update _userLocation dengan lokasi saat ini if (_bounds.contains(LatLng( currentPosition.latitude, currentPosition.longitude, ))) { setState(() { _userLocation = LatLng( currentPosition.latitude, currentPosition.longitude, ); }); } else { // Jika pengguna berada di luar batas titik koordinat, kembalikan tampilan kamera ke dalam batas _mapController.animateCamera( CameraUpdate.newLatLngBounds(_bounds, 0), ); } } }
Editor is loading...