import 'package:flutter/material.dart'; import 'package:firebase_database/firebase_database.dart'; import 'package:flutter/services.dart'; import 'package:url_launcher/url_launcher.dart'; import 'snr_rssi_delay_view.dart'; import 'package:intl/intl.dart'; // Tambahkan import ini untuk memparsing tanggal class HomeView extends StatelessWidget { final DatabaseReference _databaseReference = FirebaseDatabase.instance.ref('location'); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( elevation: 0, title: Text('Posisi Pendaki'), ), body: Padding( padding: EdgeInsets.all(16), child: StreamBuilder( stream: _databaseReference.onValue, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return Center(child: CircularProgressIndicator()); } if (snapshot.hasError) { return Center(child: Text("Error: ${snapshot.error}")); } if (snapshot.hasData && snapshot.data!.snapshot.value != null) { Map data = Map.from( snapshot.data!.snapshot.value as Map); List rows = data.entries.map((entry) { var key = entry.key; var value = Map.from(entry.value as Map); String time = value['time']; String latitude = value['latitude']; String longitude = value['longitude']; String snr = value['snr'].toString(); String rssi = value['rssi'].toString(); String delay = value['delay'].toString(); String mapUrl = 'https://www.google.com/maps/search/?api=1&query=$latitude,$longitude'; return DataRow(cells: [ DataCell( Text(time), onTap: () { Clipboard.setData(ClipboardData(text: time)); ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text('Waktu disalin ke clipboard'), )); }, ), DataCell( Text('$latitude, $longitude'), onTap: () { Clipboard.setData( ClipboardData(text: '$latitude, $longitude')); ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text('Latitude dan Longitude disalin ke clipboard'), )); }, ), DataCell( InkWell( child: Text( 'Lihat Peta', style: TextStyle( color: Colors.green[700], decoration: TextDecoration.underline, ), ), onTap: () async { Uri url = Uri.parse(mapUrl); if (await canLaunchUrl(url)) { await launchUrl(url); } else { ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text('Tidak dapat membuka peta'), )); } }, ), ), DataCell( InkWell( child: Text( 'Detail', style: TextStyle( color: Colors.green[700], decoration: TextDecoration.underline, ), ), onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => SnrRssiDelayView( time: time, snr: snr, rssi: rssi, delay: delay, ), ), ); }, ), ), ]); }).toList(); // Urutkan baris berdasarkan nilai waktu dalam urutan dari lama ke baru rows.sort((a, b) { String timeA = (a.cells[0].child as Text).data!; String timeB = (b.cells[0].child as Text).data!; DateFormat format = DateFormat("dd-MM-yyyy HH:mm:ss"); // Sesuaikan format DateTime dateTimeA = format.parse(timeA); DateTime dateTimeB = format.parse(timeB); return dateTimeA .compareTo(dateTimeB); // Urutan dari lama ke baru }); // Balik urutan baris sehingga yang terbaru di atas rows = rows.reversed.toList(); return LayoutBuilder( builder: (context, constraints) { double columnWidth = (constraints.maxWidth - 32) / 4; return SingleChildScrollView( scrollDirection: Axis.horizontal, child: SingleChildScrollView( child: DataTable( columnSpacing: columnWidth * 0.1, columns: [ DataColumn( label: Container( width: columnWidth, child: Text('Waktu'))), DataColumn( label: Container( width: columnWidth, child: Text('Lokasi'))), DataColumn( label: Container( width: columnWidth, child: Text('Peta'))), DataColumn( label: Container( width: columnWidth, child: Text('Detail'))), ], rows: rows, ), ), ); }, ); } return Center(child: Text("Tidak ada data yang tersedia")); }, ), ), ); } }