Untitled
unknown
plain_text
3 years ago
2.8 kB
6
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...