140 lines
3.8 KiB
Dart
140 lines
3.8 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:geolocator/geolocator.dart';
|
|
import 'package:geocoding/geocoding.dart';
|
|
|
|
void main() {
|
|
runApp(const MyApp());
|
|
}
|
|
|
|
class MyApp extends StatelessWidget {
|
|
const MyApp({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return MaterialApp(
|
|
title: 'Tugas 12 Geolocator & Geocoding',
|
|
theme: ThemeData(primarySwatch: Colors.blue),
|
|
home: const LocationScreen(),
|
|
);
|
|
}
|
|
}
|
|
|
|
class LocationScreen extends StatefulWidget {
|
|
const LocationScreen({super.key});
|
|
|
|
@override
|
|
State<LocationScreen> createState() => _LocationScreenState();
|
|
}
|
|
|
|
class _LocationScreenState extends State<LocationScreen> {
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
jalankanTugas12();
|
|
}
|
|
|
|
Future<void> jalankanTugas12() async {
|
|
print('=== MEMULAI TUGAS 12 ===');
|
|
await handleLocationPermission();
|
|
|
|
await ambilKoordinatSaatIni();
|
|
|
|
await cariKoordinatTelkomUniversity();
|
|
|
|
await konversiKoordinatKeAlamat();
|
|
|
|
print('=== SELESAI ===');
|
|
}
|
|
|
|
// Fungsi pembantu untuk meminta izin lokasi perangkat
|
|
Future<void> handleLocationPermission() async {
|
|
bool serviceEnabled;
|
|
LocationPermission permission;
|
|
|
|
serviceEnabled = await Geolocator.isLocationServiceEnabled();
|
|
if (!serviceEnabled) {
|
|
print('Layanan lokasi dinonaktifkan. Silakan aktifkan GPS Anda.');
|
|
return;
|
|
}
|
|
|
|
permission = await Geolocator.checkPermission();
|
|
if (permission == LocationPermission.denied) {
|
|
permission = await Geolocator.requestPermission();
|
|
if (permission == LocationPermission.denied) {
|
|
print('Izin lokasi ditolak.');
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (permission == LocationPermission.deniedForever) {
|
|
print('Izin lokasi ditolak secara permanen.');
|
|
return;
|
|
}
|
|
}
|
|
|
|
Future<void> ambilKoordinatSaatIni() async {
|
|
try {
|
|
Position position = await Geolocator.getCurrentPosition(
|
|
desiredAccuracy: LocationAccuracy.high,
|
|
);
|
|
print('\n[1] Koordinat Perangkat Saat Ini:');
|
|
print('Latitude: ${position.latitude}');
|
|
print('Longitude: ${position.longitude}');
|
|
} catch (e) {
|
|
print('Gagal mengambil lokasi saat ini: $e');
|
|
}
|
|
}
|
|
|
|
Future<void> cariKoordinatTelkomUniversity() async {
|
|
try {
|
|
String alamatKampus = "Telkom University, Bandung, Indonesia";
|
|
List<Location> locations = await locationFromAddress(alamatKampus);
|
|
|
|
if (locations.isNotEmpty) {
|
|
print('\n[2] Koordinat Telkom University:');
|
|
print('Latitude: ${locations.first.latitude}');
|
|
print('Longitude: ${locations.first.longitude}');
|
|
}
|
|
} catch (e) {
|
|
print('Gagal mencari koordinat Telkom University: $e');
|
|
}
|
|
}
|
|
|
|
Future<void> konversiKoordinatKeAlamat() async {
|
|
try {
|
|
double targetLat = 52.2165157;
|
|
double targetLng = 6.9437819;
|
|
|
|
List<Placemark> placemarks = await placemarkFromCoordinates(targetLat, targetLng);
|
|
|
|
if (placemarks.isNotEmpty) {
|
|
Placemark tempat = placemarks.first;
|
|
print('\n[3] Konversi Koordinat ($targetLat, $targetLng):');
|
|
print('Nama Jalan : ${tempat.street}');
|
|
print('Kota : ${tempat.locality}');
|
|
print('Negara : ${tempat.country}');
|
|
}
|
|
} catch (e) {
|
|
print('Gagal mengonversi koordinat menjadi alamat: $e');
|
|
}
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
title: const Text('Tugas 12 - Geolocator & Geocoding'),
|
|
),
|
|
body: const Center(
|
|
child: Padding(
|
|
padding: EdgeInsets.all(16.0),
|
|
child: Text(
|
|
'Proses sedang berjalan.\nSilakan cek Debug Console!',
|
|
textAlign: TextAlign.center,
|
|
style: TextStyle(fontSize: 16),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
} |