62 lines
2.6 KiB
Dart
62 lines
2.6 KiB
Dart
import 'package:hive_ce/hive.dart';
|
|
import '../utils/id_generator.dart';
|
|
|
|
// Указываем Hive, что это модель для хранения в базе данных
|
|
// typeId: 3 - уникальный идентификатор типа для Hive (у нас уже есть 0,1,2)
|
|
part 'user.g.dart';
|
|
|
|
@HiveType(typeId: 1003)
|
|
/// Модель пользователя приложения
|
|
/// Содержит основную информацию для идентификации пользователя
|
|
class User {
|
|
/// Уникальный идентификатор пользователя
|
|
@HiveField(0) // Поле 0 в Hive - первое поле модели
|
|
final String id;
|
|
|
|
/// Имя пользователя для отображения в интерфейсе
|
|
@HiveField(1) // Поле 1 в Hive - второе поле модели
|
|
final String name;
|
|
|
|
/// Email пользователя (может использоваться для входа в будущем)
|
|
@HiveField(2) // Поле 2 в Hive - третье поле модели
|
|
final String email;
|
|
|
|
@HiveField(3) // Поле 3 в Hive - язык пользователя
|
|
final String language;
|
|
|
|
/// Конструктор пользователя
|
|
/// id генерируется автоматически, если не передан
|
|
User({
|
|
String? id, // Опциональный параметр - если null, сгенерируется автоматически
|
|
required this.name, // Обязательный параметр
|
|
required this.email, // Обязательный параметр
|
|
this.language = 'ru', // Язык по умолчанию - русский
|
|
}) : id = id ?? IdGenerator.generateId(); // Если id не передан, генерируем новый
|
|
|
|
/// Преобразование объекта в Map для сохранения в JSON или передачи по сети
|
|
Map<String, dynamic> toMap() {
|
|
return {
|
|
'id': id,
|
|
'name': name,
|
|
'email': email,
|
|
'language': language,
|
|
};
|
|
}
|
|
|
|
/// Создание объекта User из Map (например, при загрузке из JSON)
|
|
factory User.fromMap(Map<String, dynamic> map) {
|
|
return User(
|
|
id: map['id'],
|
|
name: map['name'],
|
|
email: map['email'],
|
|
language: map['language'] ?? 'ru', // Устанавливаем русский по умолчанию, если язык не указан
|
|
);
|
|
}
|
|
|
|
/// Переопределяем toString для удобного отображения в логах
|
|
@override
|
|
String toString() {
|
|
return 'User(id: $id, name: $name, email: $email)';
|
|
}
|
|
}
|