Small fix
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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([
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user