Files
BudgetApp/lib/services/sms_service.dart
T
Sanders 8b75299d41 Refactors data repositories for single-user mode
This commit refactors the data repositories to remove user-specific filtering. It simplifies the data access logic by retrieving all data from the Hive boxes and removing the need to filter by `userId` in the repository methods.

This change makes the app function in single-user mode and removes the need to manage multiple user contexts within the data layer.

Specifically:
- Removes `userId` parameter from repository methods.
- Updates the setting repository to use fixed keys.
- Removes user ID filtering from queries.
- Removes user ID parameters from Cubits and Blocs
- Updates initial data creation
2025-07-12 21:54:00 +03:00

65 lines
3.2 KiB
Dart

import 'package:another_telephony/telephony.dart' as telephony_package;
import 'package:budget_app/models/sms_message.dart';
/// Сервис для работы с SMS сообщениями.
///
/// Использует пакет [telephony] для доступа к SMS на устройстве.
/// Предоставляет методы для запроса разрешений и получения
/// последних SMS сообщений.
class SmsService {
final telephony_package.Telephony _telephony = telephony_package.Telephony.instance;
/// Запрашивает разрешения на чтение и отправку SMS.
///
/// Возвращает [true], если разрешения были предоставлены,
/// иначе [false].
Future<bool> requestPermissions() async {
return await _telephony.requestPhoneAndSmsPermissions ?? false;
}
/// Возвращает список последних SMS сообщений.
///
/// [count] - количество сообщений для получения.
///
/// Возвращает список объектов [SmsMessage].
/// В случае ошибки или отсутствия разрешений, возвращает пустой список.
Future<List<SmsMessage>> getLastSmsMessages(int count) async {
final bool? permissionsGranted =
await _telephony.requestPhoneAndSmsPermissions;
if (permissionsGranted ?? false) {
final List<telephony_package.SmsMessage> messages = await _telephony.getInboxSms(
columns: [telephony_package.SmsColumn.BODY, telephony_package.SmsColumn.ADDRESS, telephony_package.SmsColumn.DATE],
sortOrder: [telephony_package.OrderBy(telephony_package.SmsColumn.DATE, sort: telephony_package.Sort.DESC)],
);
// Комментарий: Преобразуем сообщения из пакета telephony в нашу модель SmsMessage.
return messages.take(count).map((msg) => SmsMessage(
body: msg.body,
sender: msg.address,
date: DateTime.fromMillisecondsSinceEpoch(msg.date ?? 0),
)).toList();
}
return [];
}
// Комментарий: Метод для получения SMS-сообщений с определенной даты.
Future<List<SmsMessage>> getSmsMessagesSince(DateTime sinceDate) async {
final bool? permissionsGranted = await _telephony.requestPhoneAndSmsPermissions;
if (permissionsGranted ?? false) {
final List<telephony_package.SmsMessage> messages = await _telephony.getInboxSms(
columns: [telephony_package.SmsColumn.BODY, telephony_package.SmsColumn.ADDRESS, telephony_package.SmsColumn.DATE],
sortOrder: [telephony_package.OrderBy(telephony_package.SmsColumn.DATE, sort: telephony_package.Sort.ASC)],
);
// Комментарий: Фильтруем сообщения по дате и преобразуем их в нашу модель.
return messages
.where((msg) => (msg.date ?? 0) >= sinceDate.millisecondsSinceEpoch)
.map((msg) => SmsMessage(
body: msg.body,
sender: msg.address,
date: DateTime.fromMillisecondsSinceEpoch(msg.date ?? 0),
))
.toList();
}
return [];
}
}