Files
BudgetApp/lib/models/user.dart
T
Sanders 9bae137d08 Refactors user management to use UserCubit
This commit refactors the user management system to utilize UserCubit, improving state management and separation of concerns.

- Replaces UserService with UserCubit for managing user state.
- Introduces AppSettings and GlobalSettings models and repositories for managing app-level settings and configurations.
- Modifies dependency injection to register the new repositories and cubits.
- Updates UI components (LoginPage, SettingsPage, HomePage, AddTransactionDialog, CategoryListPage, TagListPage) to interact with UserCubit and SettingsCubit.
- Removes direct dependency on UserRepository in favor of UserCubit for accessing user information.
- Streamlines the authentication process by using UserCubit to handle user creation and login.
- Improves settings management by using dedicated repositories and cubits for app settings.
2025-07-07 00:29:15 +03:00

95 lines
3.3 KiB
Dart

import 'package:equatable/equatable.dart';
import 'package:hive_ce/hive.dart';
import '../utils/id_generator.dart';
// Указываем Hive, что это модель для хранения в базе данных
// typeId: 1003 - уникальный идентификатор типа для Hive
part 'user.g.dart';
@HiveType(typeId: 1003)
/// Модель пользователя приложения
/// Содержит основную информацию для идентификации пользователя
class User extends Equatable {
/// Уникальный идентификатор пользователя
@HiveField(0)
final String id;
/// Имя пользователя для отображения в интерфейсе
@HiveField(1)
final String name;
/// Email пользователя (может использоваться для входа в будущем)
@HiveField(2)
final String email;
@HiveField(3)
/// Дата и время последнего обновления объекта
final DateTime updatedAt;
// Комментарий: Добавлено поле для хранения времени последней синхронизации SMS.
@HiveField(4)
final DateTime lastSmsSyncTime;
/// Конструктор пользователя
/// id генерируется автоматически, если не передан
User({
String? id,
required this.name,
required this.email,
DateTime? updatedAt,
DateTime? lastSmsSyncTime,
}) : id = id ?? IdGenerator.generateId(),
updatedAt = updatedAt ?? DateTime.now(),
lastSmsSyncTime = lastSmsSyncTime ??
DateTime(DateTime.now().year, DateTime.now().month - 1, 1);
/// Преобразование объекта в Map для сохранения в JSON или передачи по сети
Map<String, dynamic> toMap() {
return {
'id': id,
'name': name,
'email': email,
'updatedAt': updatedAt.toIso8601String(),
'lastSmsSyncTime': lastSmsSyncTime.toIso8601String(),
};
}
/// Создание объекта User из Map (например, при загрузке из JSON)
factory User.fromMap(Map<String, dynamic> map) {
return User(
id: map['id'],
name: map['name'],
email: map['email'],
updatedAt: DateTime.parse(map['updatedAt']),
lastSmsSyncTime: map['lastSmsSyncTime'] != null
? DateTime.parse(map['lastSmsSyncTime'])
: DateTime(DateTime.now().year, DateTime.now().month - 1, 1),
);
}
/// Переопределяем toString для удобного отображения в логах
@override
String toString() {
return 'User(id: $id, name: $name, email: $email, lastSmsSyncTime: $lastSmsSyncTime)';
}
// Используем Equatable для сравнения объектов по их свойствам.
@override
List<Object?> get props => [id];
User copyWith({
String? id,
String? name,
String? email,
DateTime? lastSmsSyncTime,
}) {
return User(
id: id ?? this.id,
name: name ?? this.name,
email: email ?? this.email,
updatedAt: DateTime.now(),
lastSmsSyncTime: lastSmsSyncTime ?? this.lastSmsSyncTime,
);
}
}