Small fix

This commit is contained in:
2025-06-10 23:33:27 +03:00
parent fbefda5042
commit 70851b65dc
9 changed files with 78 additions and 266 deletions
-22
View File
@@ -1,22 +0,0 @@
import 'package:flutter/material.dart';
import 'package:hive_ce/hive.dart';
/// Кастомный адаптер для сериализации Color в Hive
/// Преобразует Color в int и обратно для хранения в базе данных
class ColorAdapter extends TypeAdapter<Color> {
@override
final int typeId = 100; // Уникальный ID для этого адаптера
@override
Color read(BinaryReader reader) {
// Читаем int значение и создаем Color
final colorValue = reader.readInt();
return Color(colorValue);
}
@override
void write(BinaryWriter writer, Color obj) {
// Записываем значение цвета как int
writer.writeInt(obj.value);
}
}
-22
View File
@@ -1,22 +0,0 @@
import 'package:flutter/material.dart';
import 'package:hive_ce/hive.dart';
/// Кастомный адаптер для сериализации IconData в Hive
/// Преобразует IconData в int (codePoint) и обратно
class IconDataAdapter extends TypeAdapter<IconData> {
@override
final int typeId = 101; // Уникальный ID для этого адаптера
@override
IconData read(BinaryReader reader) {
// Читаем codePoint и создаем IconData
final codePoint = reader.readInt();
return IconData(codePoint, fontFamily: 'MaterialIcons');
}
@override
void write(BinaryWriter writer, IconData obj) {
// Записываем codePoint иконки
writer.writeInt(obj.codePoint);
}
}
+4 -22
View File
@@ -1,3 +1,4 @@
import 'package:budget_app/hive/hive_registrar.g.dart';
import 'package:hive_ce_flutter/hive_flutter.dart';
import 'package:logger/logger.dart';
import '/models/category.dart';
@@ -7,8 +8,6 @@ import '/models/user.dart';
import '/utils/category_utils.dart';
import '/utils/tag_utils.dart';
import '/utils/transaction_utils.dart';
import '/adapters/color_adapter.dart';
import '/adapters/icon_data_adapter.dart';
final _logger = Logger();
@@ -25,26 +24,9 @@ class HiveService {
static Future<void> init() async {
_logger.i('Initializing Hive database');
await Hive.initFlutter();
// Регистрация адаптеров
if (!Hive.isAdapterRegistered(ColorAdapter().typeId)) {
Hive.registerAdapter(ColorAdapter());
}
if (!Hive.isAdapterRegistered(IconDataAdapter().typeId)) {
Hive.registerAdapter(IconDataAdapter());
}
if (!Hive.isAdapterRegistered(CategoryAdapter().typeId)) {
Hive.registerAdapter(CategoryAdapter());
}
if (!Hive.isAdapterRegistered(TagAdapter().typeId)) {
Hive.registerAdapter(TagAdapter());
}
if (!Hive.isAdapterRegistered(TransactionRecordAdapter().typeId)) {
Hive.registerAdapter(TransactionRecordAdapter());
}
if (!Hive.isAdapterRegistered(UserAdapter().typeId)) {
Hive.registerAdapter(UserAdapter());
}
//zfinal path = Directory.current.path;
Hive.registerAdapters();
// Открытие всех Box'ов
await Future.wait([
+4 -3
View File
@@ -6,9 +6,10 @@ import 'package:budget_app/models/category.dart';
import 'package:budget_app/models/tag.dart';
import 'package:budget_app/models/transaction_record.dart';
import '../models/user.dart';
@GenerateAdapters([
AdapterSpec<Category>(),
AdapterSpec<Tag>(),
AdapterSpec<TransactionRecord>(),
AdapterSpec<Color>(),
AdapterSpec<IconData>(),
])
part 'hive_adapters.g.dart';
+48 -105
View File
@@ -6,128 +6,71 @@ part of 'hive_adapters.dart';
// AdaptersGenerator
// **************************************************************************
class CategoryAdapter extends TypeAdapter<Category> {
class ColorAdapter extends TypeAdapter<Color> {
@override
final typeId = 0;
final typeId = 3;
@override
Category read(BinaryReader reader) {
Color read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return Category(
id: fields[0] as String?,
name: fields[1] as String,
color: fields[2] as Color,
icon: fields[3] as IconData,
isIncome: fields[4] as bool,
userId: fields[5] as String,
return Color((fields[0] as num).toInt());
}
@override
void write(BinaryWriter writer, Color obj) {
writer
..writeByte(1)
..writeByte(0)
..write(obj.value);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is ColorAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}
class IconDataAdapter extends TypeAdapter<IconData> {
@override
final typeId = 4;
@override
IconData read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return IconData(
(fields[0] as num).toInt(),
fontFamily: fields[1] as String?,
fontPackage: fields[2] as String?,
matchTextDirection: fields[3] == null ? false : fields[3] as bool,
fontFamilyFallback: (fields[4] as List?)?.cast<String>(),
);
}
@override
void write(BinaryWriter writer, Category obj) {
void write(BinaryWriter writer, IconData obj) {
writer
..writeByte(6)
..writeByte(0)
..write(obj.id)
..writeByte(1)
..write(obj.name)
..writeByte(2)
..write(obj.color)
..writeByte(3)
..write(obj.icon)
..writeByte(4)
..write(obj.isIncome)
..writeByte(5)
..write(obj.userId);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is CategoryAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}
class TagAdapter extends TypeAdapter<Tag> {
@override
final typeId = 1;
@override
Tag read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return Tag(id: fields[0] as String?, name: fields[1] as String);
}
@override
void write(BinaryWriter writer, Tag obj) {
writer
..writeByte(2)
..writeByte(0)
..write(obj.id)
..write(obj.codePoint)
..writeByte(1)
..write(obj.name);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is TagAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}
class TransactionRecordAdapter extends TypeAdapter<TransactionRecord> {
@override
final typeId = 2;
@override
TransactionRecord read(BinaryReader reader) {
final numOfFields = reader.readByte();
final fields = <int, dynamic>{
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
};
return TransactionRecord(
id: fields[0] as String?,
category: fields[1] as Category,
tag: fields[2] as Tag?,
amount: (fields[3] as num).toDouble(),
dateTime: fields[4] as DateTime,
vendor: fields[5] as String,
currency: fields[6] as String,
);
}
@override
void write(BinaryWriter writer, TransactionRecord obj) {
writer
..writeByte(7)
..writeByte(0)
..write(obj.id)
..writeByte(1)
..write(obj.category)
..write(obj.fontFamily)
..writeByte(2)
..write(obj.tag)
..write(obj.fontPackage)
..writeByte(3)
..write(obj.amount)
..write(obj.matchTextDirection)
..writeByte(4)
..write(obj.dateTime)
..writeByte(5)
..write(obj.vendor)
..writeByte(6)
..write(obj.currency);
..write(obj.fontFamilyFallback);
}
@override
@@ -136,7 +79,7 @@ class TransactionRecordAdapter extends TypeAdapter<TransactionRecord> {
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is TransactionRecordAdapter &&
other is IconDataAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}
+15 -37
View File
@@ -1,47 +1,25 @@
# Generated by Hive CE
# Manual modifications may be necessary for certain migrations
# Check in to version control
nextTypeId: 3
nextTypeId: 6
types:
Category:
typeId: 0
nextIndex: 6
Color:
typeId: 3
nextIndex: 1
fields:
id:
value:
index: 0
name:
IconData:
typeId: 4
nextIndex: 5
fields:
codePoint:
index: 0
fontFamily:
index: 1
color:
fontPackage:
index: 2
icon:
matchTextDirection:
index: 3
isIncome:
fontFamilyFallback:
index: 4
userId:
index: 5
Tag:
typeId: 1
nextIndex: 2
fields:
id:
index: 0
name:
index: 1
TransactionRecord:
typeId: 2
nextIndex: 7
fields:
id:
index: 0
category:
index: 1
tag:
index: 2
amount:
index: 3
dateTime:
index: 4
vendor:
index: 5
currency:
index: 6
+7 -9
View File
@@ -4,18 +4,17 @@
import 'package:hive_ce/hive.dart';
import 'package:budget_app/hive/hive_adapters.dart';
import 'package:budget_app/models/category.dart' hide CategoryAdapter;
import 'package:budget_app/models/tag.dart' hide TagAdapter;
import 'package:budget_app/models/transaction_record.dart' hide TransactionRecordAdapter;
import 'package:budget_app/models/category.dart';
import 'package:budget_app/models/tag.dart';
import 'package:budget_app/models/transaction_record.dart';
import 'package:budget_app/models/user.dart';
extension HiveRegistrar on HiveInterface {
void registerAdapters() {
registerAdapter(CategoryAdapter());
registerAdapter(CategoryAdapter());
registerAdapter(ColorAdapter());
registerAdapter(IconDataAdapter());
registerAdapter(TagAdapter());
registerAdapter(TagAdapter());
registerAdapter(TransactionRecordAdapter());
registerAdapter(TransactionRecordAdapter());
registerAdapter(UserAdapter());
}
@@ -24,10 +23,9 @@ extension HiveRegistrar on HiveInterface {
extension IsolatedHiveRegistrar on IsolatedHiveInterface {
void registerAdapters() {
registerAdapter(CategoryAdapter());
registerAdapter(CategoryAdapter());
registerAdapter(ColorAdapter());
registerAdapter(IconDataAdapter());
registerAdapter(TagAdapter());
registerAdapter(TagAdapter());
registerAdapter(TransactionRecordAdapter());
registerAdapter(TransactionRecordAdapter());
registerAdapter(UserAdapter());
}
-24
View File
@@ -1,24 +0,0 @@
// Generated by Hive CE
// Do not modify
// Check in to version control
import 'package:hive_ce/hive.dart';
import 'package:budget_app/models/category.dart';
import 'package:budget_app/models/tag.dart';
import 'package:budget_app/models/transaction_record.dart';
extension HiveRegistrar on HiveInterface {
void registerAdapters() {
registerAdapter(CategoryAdapter());
registerAdapter(TagAdapter());
registerAdapter(TransactionRecordAdapter());
}
}
extension IsolatedHiveRegistrar on IsolatedHiveInterface {
void registerAdapters() {
registerAdapter(CategoryAdapter());
registerAdapter(TagAdapter());
registerAdapter(TransactionRecordAdapter());
}
}
-22
View File
@@ -1,22 +0,0 @@
import 'package:flutter/material.dart';
import 'package:hive_ce/hive.dart';
class IconDataAdapter extends TypeAdapter<IconData> {
@override
final typeId = 4; // Уникальный ID, не пересекающийся с другими адаптерами
@override
IconData read(BinaryReader reader) {
return IconData(
reader.readInt(), // codePoint
fontFamily: reader.readString(), // fontFamily
);
}
@override
void write(BinaryWriter writer, IconData obj) {
writer
..writeInt(obj.codePoint)
..writeString(obj.fontFamily ?? 'MaterialIcons');
}
}