prasule/lib/api/category.dart

86 lines
2.1 KiB
Dart
Raw Normal View History

2024-06-30 20:25:36 +02:00
// SPDX-FileCopyrightText: (C) 2024 Matyáš Caras
//
// SPDX-License-Identifier: AGPL-3.0-only
2023-09-08 11:50:21 +02:00
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,
});
2023-09-08 11:50:21 +02:00
2024-07-17 16:44:02 +02:00
/// Generates a class instance from a Map
2023-09-08 11:50:21 +02:00
factory WalletCategory.fromJson(Map<String, dynamic> json) =>
_$WalletCategoryFromJson(json);
/// Default [WalletCategory] instance for json_serializable
factory WalletCategory.unknown() => WalletCategory(
name: "Unknown",
id: -1,
icon: Icons.question_mark,
color: Colors.green,
);
/// User-defined name
@JsonKey(defaultValue: "Unknown")
String name;
/// Unique identificator of the category
@JsonKey(required: true, disallowNullValue: true)
final int id;
/// Selected Icon for the category
@JsonKey(
fromJson: _iconDataFromJson,
toJson: _iconDataToJson,
defaultValue: _defaultIcon,
)
IconData icon;
/// The color that will be displayed with entry
@JsonKey(
fromJson: _colorFromJson,
toJson: _colorToJson,
defaultValue: _defaultColor,
)
Color color;
2024-07-17 16:44:02 +02:00
/// Converts the data in this instance into a Map
2023-09-08 11:50:21 +02:00
Map<String, dynamic> toJson() => _$WalletCategoryToJson(this);
2023-09-14 19:44:34 +02:00
@override
String toString() {
return name;
}
2023-09-08 11:50:21 +02:00
}
Map<String, dynamic> _iconDataToJson(IconData icon) =>
{'codepoint': icon.codePoint, 'family': icon.fontFamily};
2023-09-08 11:50:21 +02:00
IconData _iconDataFromJson(Map<String, dynamic> data) =>
IconData(data['codepoint'] as int, fontFamily: data['family'] as String?);
2023-09-08 11:50:21 +02:00
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
}
IconData _defaultIcon() => Icons.question_mark;
Color _defaultColor() => Colors.green;