Files
BudgetApp/lib/models/tag.dart
T
Sanders 42f8e20bf0 Improves: Internationalization and data models
- Adds new localization keys for transaction details.
- Deletes obsolete localization files, switching to a single ARB file per language.
- Adds `Equatable` to data models (`Category`, `Tag`, `TransactionRecord`, `User`) for improved state management and change detection.
- Introduces the transaction creation dialog.
- Adds development note to GEMINI.md

Improves internationalization and data models

- Adds new localization keys for transaction details, supporting enhanced user experience.
- Migrates to single ARB file for each language, streamlining the localization process.
- Implements Equatable in data models (Category, Tag, TransactionRecord, User) for improved state management and simplified change detection.
- Introduces transaction creation dialog, simplifying the transaction creation process.
- Adds development note to GEMINI.md
2025-06-29 23:03:17 +03:00

81 lines
3.5 KiB
Dart

import 'package:equatable/equatable.dart';
import 'package:hive_ce/hive.dart';
import '../../utils/id_generator.dart';
part 'tag.g.dart';
@HiveType(typeId: 1001)
class Tag extends Equatable {
@HiveField(0)
/// Уникальный идентификатор тега
final String id;
@HiveField(1)
/// Название тега (например: "Важное", "Работа")
final String name;
// Комментарий: Добавляем новое поле для хранения идентификатора пользователя.
// Это позволит нам связать каждый тег с конкретным пользователем.
// Мы используем аннотацию @HiveField(2), чтобы указать Hive, как сохранять это поле.
@HiveField(2)
final String userId;
@HiveField(3)
/// Дата и время последнего обновления объекта
final DateTime updatedAt;
/// Конструктор с обязательными параметрами
Tag({
String? id,
required this.name,
// Комментарий: Добавляем userId в конструктор как обязательный параметр.
// Теперь при создании тега необходимо будет указать, какому пользователю он принадлежит.
required this.userId,
DateTime? updatedAt, // Добавлено поле updatedAt, теперь необязательное
}) : id = id ?? IdGenerator.generateId(),
updatedAt = updatedAt ?? DateTime.now(); // Устанавливаем текущее время по умолчанию
/// Преобразование объекта в Map
Map<String, dynamic> toMap() {
return {
'id': id,
'name': name,
// Комментарий: Добавляем userId в Map. Это нужно для сохранения
// данных в форматах, которые не работают напрямую с объектами Dart (например, при отправке на сервер).
'userId': userId,
'updatedAt': updatedAt.toIso8601String(), // Добавлено updatedAt в Map
};
}
/// Создание объекта из Map
factory Tag.fromMap(Map<String, dynamic> map) {
return Tag(
id: map['id'],
name: map['name'],
// Комментарий: Извлекаем userId из Map при создании объекта.
// Это позволит восстановить полный объект Tag из данных, например, из базы данных.
userId: map['userId'],
updatedAt: DateTime.parse(map['updatedAt']), // Добавлено updatedAt при создании из Map
);
}
/// Метод для создания копии объекта с возможностью изменения полей
Tag copyWith({
String? id,
String? name,
String? userId,
}) {
return Tag(
id: id ?? this.id,
name: name ?? this.name,
userId: userId ?? this.userId,
updatedAt: DateTime.now(), // Обновляем updatedAt при каждом копировании
);
}
// Используем Equatable для сравнения объектов по их свойствам.
// В данном случае, мы считаем теги уникальными по их 'id'.
@override
List<Object?> get props => [id];
}