TKK_E32210095/lib/pages/alert_screen.dart

127 lines
4.2 KiB
Dart

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<AlertScreen> {
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<QuerySnapshot> snapshot) {
if (!snapshot.hasData) {
return CircularProgressIndicator();
} else {
List<String> 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(),
));
}