127 lines
4.2 KiB
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(),
|
|
));
|
|
}
|