60 lines
1.9 KiB
Dart
60 lines
1.9 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:hive_ce/hive.dart';
|
|
|
|
part 'category.g.dart';
|
|
|
|
@HiveType(typeId: 0)
|
|
|
|
/// Модель категории для группировки транзакций
|
|
/// Содержит основные параметры для визуализации и классификации
|
|
class Category {
|
|
/// Уникальный идентификатор категории
|
|
@HiveField(0)
|
|
final String id;
|
|
|
|
/// Название категории (например: "Еда", "Транспорт")
|
|
final String name;
|
|
|
|
/// Цвет категории для визуального выделения
|
|
final Color color;
|
|
|
|
/// Иконка категории для быстрой визуальной идентификации
|
|
final IconData icon;
|
|
|
|
/// Флаг указывающий тип операции:
|
|
/// true - доход (например зарплата)
|
|
/// false - расход (например покупки)
|
|
final bool isIncome;
|
|
|
|
/// Конструктор с обязательными параметрами
|
|
const Category({
|
|
required this.id,
|
|
required this.name,
|
|
required this.color,
|
|
required this.icon,
|
|
required this.isIncome,
|
|
});
|
|
|
|
/// Метод для преобразования объекта в Map (полезно для работы с БД)
|
|
Map<String, dynamic> toMap() {
|
|
return {
|
|
'id': id,
|
|
'name': name,
|
|
'color': color.value, // Сохраняем только значение цвета
|
|
'icon': icon.codePoint,
|
|
'isIncome': isIncome,
|
|
};
|
|
}
|
|
|
|
/// Фабричный метод для создания объекта из 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'],
|
|
);
|
|
}
|
|
}
|