73 lines
2.6 KiB
Dart
73 lines
2.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:hive_ce/hive.dart';
|
|
import '../../utils/id_generator.dart';
|
|
|
|
part 'category.g.dart';
|
|
|
|
@HiveType(typeId: 0)
|
|
|
|
/// Модель категории для группировки транзакций
|
|
/// Содержит основные параметры для визуализации и классификации
|
|
class Category {
|
|
/// Уникальный идентификатор категории
|
|
@HiveField(0)
|
|
final String id;
|
|
|
|
@HiveField(1)
|
|
/// Название категории (например: "Еда", "Транспорт")
|
|
final String name;
|
|
|
|
@HiveField(2)
|
|
/// Цвет категории для визуального выделения
|
|
final Color color;
|
|
|
|
@HiveField(3)
|
|
/// Иконка категории для быстрой визуальной идентификации
|
|
final IconData icon;
|
|
|
|
@HiveField(4)
|
|
/// Флаг указывающий тип операции:
|
|
/// true - доход (например зарплата)
|
|
/// false - расход (например покупки)
|
|
final bool isIncome;
|
|
|
|
@HiveField(5)
|
|
/// Идентификатор пользователя, которому принадлежит эта категория
|
|
/// Это позволяет разделять категории между разными пользователями
|
|
final String userId;
|
|
|
|
/// Конструктор с обязательными параметрами
|
|
Category({
|
|
String? id,
|
|
required this.name,
|
|
required this.color,
|
|
required this.icon,
|
|
required this.isIncome,
|
|
required this.userId, // Теперь userId обязательный параметр
|
|
}) : id = id ?? IdGenerator.generateId();
|
|
|
|
/// Метод для преобразования объекта в Map (полезно для работы с БД)
|
|
Map<String, dynamic> toMap() {
|
|
return {
|
|
'id': id,
|
|
'name': name,
|
|
'color': color.value, // Сохраняем только значение цвета
|
|
'icon': icon.codePoint,
|
|
'isIncome': isIncome,
|
|
'userId': userId, // Добавляем userId в Map
|
|
};
|
|
}
|
|
|
|
/// Фабричный метод для создания объекта из Map (например из БД)
|
|
factory Category.fromMap(Map<String, dynamic> map) {
|
|
return Category(
|
|
id: map['id'],
|
|
name: map['name'],
|
|
color: Color(map['color']),
|
|
icon: IconData(map['icon'], fontFamily: 'MaterialIcons'),
|
|
isIncome: map['isIncome'],
|
|
userId: map['userId'], // Добавляем userId при создании из Map
|
|
);
|
|
}
|
|
}
|