import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; // Import library Firestore class AlertScreen extends StatefulWidget { @override _AlertScreenState createState() => _AlertScreenState(); } class _AlertScreenState extends State { String? selectedPhoneNumber; // Menggunakan tipe data String? TextEditingController messageController = TextEditingController(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("Communication Form"), ), body: Padding( padding: EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ StreamBuilder( stream: FirebaseFirestore.instance.collection('Penghuni').snapshots(), builder: (context, AsyncSnapshot snapshot) { if (!snapshot.hasData) { return CircularProgressIndicator(); } else { List phoneNumbers = snapshot.data!.docs.map((doc) => doc['nomortelepon'] as String).toSet().toList(); // Tambahkan nilai default jika dropdown kosong if (selectedPhoneNumber == null || selectedPhoneNumber!.isEmpty) { selectedPhoneNumber = phoneNumbers.isNotEmpty ? phoneNumbers.first : null; } return DropdownButtonFormField( value: selectedPhoneNumber, items: phoneNumbers.map((phoneNumber) { return DropdownMenuItem( value: phoneNumber, child: Text(phoneNumber), ); }).toList(), onChanged: (value) { setState(() { selectedPhoneNumber = value as String?; }); }, decoration: InputDecoration( labelText: 'Select Phone Number', ), ); } }, ), SizedBox(height: 16.0), TextFormField( controller: messageController, decoration: InputDecoration( labelText: 'Enter Message', ), ), SizedBox(height: 16.0), ElevatedButton( onPressed: () { _sendMessage(); }, child: Text('Send Message'), ), SizedBox(height: 8.0), ElevatedButton( onPressed: () { _makePhoneCall(); }, child: Text('Make Phone Call'), ), ], ), ), ); } void _sendMessage() async { if (selectedPhoneNumber != null && selectedPhoneNumber!.isNotEmpty) { // Pengecekan null String message = messageController.text.isNotEmpty ? messageController.text : "Contoh pesan yang ingin Anda kirim"; String smsUrl = 'sms:$selectedPhoneNumber?body=$message'; try { await launch(smsUrl); ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Pesan terkirim ke $selectedPhoneNumber')), ); } catch (e) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Gagal mengirim pesan')), ); } } else { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Pilih nomor telepon terlebih dahulu')), ); } } void _makePhoneCall() { if (selectedPhoneNumber != null && selectedPhoneNumber!.isNotEmpty) { // Pengecekan null String telUrl = 'tel:$selectedPhoneNumber'; launch(telUrl); ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Menelepon $selectedPhoneNumber')), ); } else { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Pilih nomor telepon terlebih dahulu')), ); } } } void main() { runApp(MaterialApp( home: AlertScreen(), )); }