import 'dart:async'; import 'package:telephony/telephony.dart' as tel; import '../models/sms_message.dart'; class SmsReaderService { final _telephony = tel.Telephony.instance; Future> queryAllSms() async { final messages = []; final inbox = await _telephony.getInboxSms( columns: [tel.SmsColumn.ADDRESS, tel.SmsColumn.BODY, tel.SmsColumn.DATE], ); for (final s in inbox) { messages.add(SmsMessage( phoneNumber: s.address ?? '', contactName: s.address, content: s.body ?? '', type: 'received', smsDate: s.date != null ? DateTime.fromMillisecondsSinceEpoch(s.date!).toUtc().toIso8601String() : DateTime.now().toUtc().toIso8601String(), )); } final sent = await _telephony.getSentSms( columns: [tel.SmsColumn.ADDRESS, tel.SmsColumn.BODY, tel.SmsColumn.DATE], ); for (final s in sent) { messages.add(SmsMessage( phoneNumber: s.address ?? '', contactName: s.address, content: s.body ?? '', type: 'sent', smsDate: s.date != null ? DateTime.fromMillisecondsSinceEpoch(s.date!).toUtc().toIso8601String() : DateTime.now().toUtc().toIso8601String(), )); } return messages; } Stream listenToIncoming() { final controller = StreamController.broadcast(); _telephony.listenIncomingSms( onNewMessage: (tel.SmsMessage sms) { controller.add(SmsMessage( phoneNumber: sms.address ?? '', contactName: sms.address, content: sms.body ?? '', type: 'received', smsDate: DateTime.now().toUtc().toIso8601String(), )); }, listenInBackground: false, ); return controller.stream; } }