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.
95 lines
3.3 KiB
Dart
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,
|
|
);
|
|
}
|
|
}
|