import 'package:flutter/material.dart'; import 'package:json_annotation/json_annotation.dart'; part 'category.g.dart'; @JsonSerializable() /// Represents a category in a user's wallet class WalletCategory { /// Represents a category in a user's wallet WalletCategory({ required this.name, required this.id, required this.icon, required this.color, }); /// Connects the generated fromJson method factory WalletCategory.fromJson(Map json) => _$WalletCategoryFromJson(json); /// User-defined name String name; /// Unique identificator of the category final int id; /// Selected Icon for the category @JsonKey(fromJson: _iconDataFromJson, toJson: _iconDataToJson) IconData icon; /// The color that will be displayed with entry @JsonKey(fromJson: _colorFromJson, toJson: _colorToJson) Color color; /// Connects the generated toJson method Map toJson() => _$WalletCategoryToJson(this); @override String toString() { return name; } } Map _iconDataToJson(IconData icon) => {'codepoint': icon.codePoint, 'family': icon.fontFamily}; IconData _iconDataFromJson(Map data) => IconData(data['codepoint'] as int, fontFamily: data['family'] as String?); int _colorToJson(Color color) => color.value; Color _colorFromJson(int input) => Color(input); /// Type of entry, either expense or income enum EntryType { /// Expense expense, /// Income income }