fix: Fix hive type adapter for empty clases causing app to crash

This commit is contained in:
Anton Stubenbord
2023-10-06 21:37:24 +02:00
parent 5dcae3f0b3
commit 690e4558cb
13 changed files with 194 additions and 198 deletions

View File

@@ -39,9 +39,9 @@ class HiveTypeIds {
static const clientCertificate = 5; static const clientCertificate = 5;
static const localUserCredentials = 6; static const localUserCredentials = 6;
static const localUserAccount = 7; static const localUserAccount = 7;
static const localUserAppState = 8;
static const viewType = 9; static const viewType = 9;
static const fileDownloadType = 10; static const fileDownloadType = 10;
static const localUserAppState = 8;
} }
void registerHiveAdapters() { void registerHiveAdapters() {

View File

@@ -64,9 +64,9 @@ String get defaultPreferredLocaleSubtag {
} }
Map<String, Future<void> Function()> _migrations = { Map<String, Future<void> Function()> _migrations = {
'3.0.0': () { '3.0.1': () async {
// Remove all stored data due to updates in schema // Remove all stored data due to updates in schema
return Future.wait([ await Future.wait([
for (var box in HiveBoxes.all) Hive.deleteBoxFromDisk(box), for (var box in HiveBoxes.all) Hive.deleteBoxFromDisk(box),
]); ]);
}, },
@@ -96,10 +96,8 @@ Future<void> performMigrations() async {
Future<void> _initHive() async { Future<void> _initHive() async {
await Hive.initFlutter(); await Hive.initFlutter();
await performMigrations(); // await performMigrations();
registerHiveAdapters(); registerHiveAdapters();
// await getApplicationDocumentsDirectory().then((value) => value.deleteSync(recursive: true));
await Hive.openBox<LocalUserAccount>(HiveBoxes.localUserAccount); await Hive.openBox<LocalUserAccount>(HiveBoxes.localUserAccount);
await Hive.openBox<LocalUserAppState>(HiveBoxes.localUserAppState); await Hive.openBox<LocalUserAppState>(HiveBoxes.localUserAppState);
await Hive.openBox<String>(HiveBoxes.hosts); await Hive.openBox<String>(HiveBoxes.hosts);

View File

@@ -3,7 +3,7 @@ import 'package:paperless_api/paperless_api.dart';
class PaperlessApiHiveTypeIds { class PaperlessApiHiveTypeIds {
PaperlessApiHiveTypeIds._(); PaperlessApiHiveTypeIds._();
static const int documentFilter = 100;
static const int idQueryParameter = 101; static const int idQueryParameter = 101;
static const int tagsQuery = 102; static const int tagsQuery = 102;
static const int anyAssignedTagsQuery = 103; static const int anyAssignedTagsQuery = 103;
@@ -31,6 +31,7 @@ class PaperlessApiHiveTypeIds {
static const int permissions = 125; static const int permissions = 125;
static const int userModelv2 = 126; static const int userModelv2 = 126;
static const int usersAndGroupsPermissions = 127; static const int usersAndGroupsPermissions = 127;
static const int documentFilter = 128;
} }
void registerPaperlessApiHiveTypeAdapters() { void registerPaperlessApiHiveTypeAdapters() {

View File

@@ -1,2 +1 @@
export 'document_model_json_converter.dart'; export 'document_model_json_converter.dart';
export 'date_range_query_json_converter.dart';

View File

@@ -1,30 +0,0 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:paperless_api/src/models/models.dart';
class DateRangeQueryJsonConverter
extends JsonConverter<DateRangeQuery, Map<String, dynamic>> {
const DateRangeQueryJsonConverter();
@override
DateRangeQuery fromJson(Map<String, dynamic> json) {
final type = json['type'];
final data = json['data'];
switch (json['type'] as String) {
case 'UnsetDateRangeQuery':
return const UnsetDateRangeQuery();
case 'AbsoluteDateRangeQuery':
return AbsoluteDateRangeQuery.fromJson(data);
case 'RelativeDateRangeQuery':
return RelativeDateRangeQuery.fromJson(data);
default:
throw Exception('Error parsing DateRangeQuery: Unknown type $type');
}
}
@override
Map<String, dynamic> toJson(DateRangeQuery object) {
return {
'type': object.runtimeType.toString(),
'data': object.toJson(),
};
}
}

View File

@@ -1,14 +1,11 @@
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:paperless_api/paperless_api.dart'; import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_api/src/models/query_parameters/date_range_queries/date_range_query_field.dart'; import 'package:paperless_api/src/models/query_parameters/date_range_queries/date_range_query_field.dart';
part 'document_filter.g.dart'; part 'document_filter.g.dart';
@DateRangeQueryJsonConverter()
// @JsonSerializable(explicitToJson: true)
@HiveType(typeId: PaperlessApiHiveTypeIds.documentFilter) @HiveType(typeId: PaperlessApiHiveTypeIds.documentFilter)
class DocumentFilter extends Equatable { class DocumentFilter extends Equatable {
static const DocumentFilter initial = DocumentFilter(); static const DocumentFilter initial = DocumentFilter();

View File

@@ -11,34 +11,27 @@ import 'date_range_unit.dart';
part 'date_range_query.g.dart'; part 'date_range_query.g.dart';
sealed class DateRangeQuery extends Equatable { sealed class DateRangeQuery {
const DateRangeQuery(); const DateRangeQuery();
Map<String, String> toQueryParameter(DateRangeQueryField field); Map<String, String> toQueryParameter(DateRangeQueryField field);
Map<String, dynamic> toJson();
bool matches(DateTime dt); bool matches(DateTime dt);
} }
// @HiveType(typeId: PaperlessApiHiveTypeIds.unsetDateRangeQuery)
class UnsetDateRangeQuery extends DateRangeQuery { class UnsetDateRangeQuery extends DateRangeQuery {
const UnsetDateRangeQuery(); const UnsetDateRangeQuery();
@override
List<Object?> get props => [];
@override @override
Map<String, String> toQueryParameter(DateRangeQueryField field) => const {}; Map<String, String> toQueryParameter(DateRangeQueryField field) => const {};
@override
Map<String, dynamic> toJson() => const {};
@override @override
bool matches(DateTime dt) => true; bool matches(DateTime dt) => true;
} }
@JsonSerializable()
@HiveType(typeId: PaperlessApiHiveTypeIds.relativeDateRangeQuery) @HiveType(typeId: PaperlessApiHiveTypeIds.relativeDateRangeQuery)
class RelativeDateRangeQuery extends DateRangeQuery { class RelativeDateRangeQuery extends DateRangeQuery with EquatableMixin {
@HiveField(0) @HiveField(0)
final int offset; final int offset;
@HiveField(1) @HiveField(1)
@@ -83,12 +76,6 @@ class RelativeDateRangeQuery extends DateRangeQuery {
} }
} }
@override
Map<String, dynamic> toJson() => _$RelativeDateRangeQueryToJson(this);
factory RelativeDateRangeQuery.fromJson(Map<String, dynamic> json) =>
_$RelativeDateRangeQueryFromJson(json);
@override @override
bool matches(DateTime dt) { bool matches(DateTime dt) {
return dt.isAfter(dateTime) || dt == dateTime; return dt.isAfter(dateTime) || dt == dateTime;
@@ -97,7 +84,7 @@ class RelativeDateRangeQuery extends DateRangeQuery {
@JsonSerializable() @JsonSerializable()
@HiveType(typeId: PaperlessApiHiveTypeIds.absoluteDateRangeQuery) @HiveType(typeId: PaperlessApiHiveTypeIds.absoluteDateRangeQuery)
class AbsoluteDateRangeQuery extends DateRangeQuery { class AbsoluteDateRangeQuery extends DateRangeQuery with EquatableMixin {
@LocalDateTimeJsonConverter() @LocalDateTimeJsonConverter()
@HiveField(0) @HiveField(0)
final DateTime? after; final DateTime? after;
@@ -138,12 +125,6 @@ class AbsoluteDateRangeQuery extends DateRangeQuery {
); );
} }
factory AbsoluteDateRangeQuery.fromJson(json) =>
_$AbsoluteDateRangeQueryFromJson(json);
@override
Map<String, dynamic> toJson() => _$AbsoluteDateRangeQueryToJson(this);
@override @override
bool matches(DateTime dt) { bool matches(DateTime dt) {
//TODO: Check if after and before are inclusive or exclusive definitions. //TODO: Check if after and before are inclusive or exclusive definitions.

View File

@@ -1,11 +1,7 @@
import 'dart:isolate'; import 'package:equatable/equatable.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import 'package:paperless_api/config/hive/hive_type_ids.dart'; import 'package:paperless_api/config/hive/hive_type_ids.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'id_query_parameter.freezed.dart';
part 'id_query_parameter.g.dart'; part 'id_query_parameter.g.dart';
sealed class IdQueryParameter { sealed class IdQueryParameter {
@@ -19,12 +15,9 @@ sealed class IdQueryParameter {
bool get isOnlyAssigned => this is AnyAssignedIdQueryParameter; bool get isOnlyAssigned => this is AnyAssignedIdQueryParameter;
} }
@HiveType(typeId: PaperlessApiHiveTypeIds.unsetIdQueryParameter) // @HiveType(typeId: PaperlessApiHiveTypeIds.unsetIdQueryParameter)
@Freezed(toJson: false, fromJson: false) class UnsetIdQueryParameter extends IdQueryParameter {
class UnsetIdQueryParameter extends IdQueryParameter const UnsetIdQueryParameter();
with _$UnsetIdQueryParameter {
const UnsetIdQueryParameter._();
const factory UnsetIdQueryParameter() = _UnsetIdQueryParameter;
@override @override
Map<String, String> toQueryParameter(String field) => {}; Map<String, String> toQueryParameter(String field) => {};
@@ -32,12 +25,10 @@ class UnsetIdQueryParameter extends IdQueryParameter
bool matches(int? id) => true; bool matches(int? id) => true;
} }
@HiveType(typeId: PaperlessApiHiveTypeIds.notAssignedIdQueryParameter) // @HiveType(typeId: PaperlessApiHiveTypeIds.notAssignedIdQueryParameter)
@Freezed(toJson: false, fromJson: false) class NotAssignedIdQueryParameter extends IdQueryParameter {
class NotAssignedIdQueryParameter extends IdQueryParameter const NotAssignedIdQueryParameter();
with _$NotAssignedIdQueryParameter {
const NotAssignedIdQueryParameter._();
const factory NotAssignedIdQueryParameter() = _NotAssignedIdQueryParameter;
@override @override
Map<String, String> toQueryParameter(String field) { Map<String, String> toQueryParameter(String field) {
return {'${field}__isnull': '1'}; return {'${field}__isnull': '1'};
@@ -47,12 +38,9 @@ class NotAssignedIdQueryParameter extends IdQueryParameter
bool matches(int? id) => id == null; bool matches(int? id) => id == null;
} }
@HiveType(typeId: PaperlessApiHiveTypeIds.anyAssignedIdQueryParameter) // @HiveType(typeId: PaperlessApiHiveTypeIds.anyAssignedIdQueryParameter)
@Freezed(toJson: false, fromJson: false) class AnyAssignedIdQueryParameter extends IdQueryParameter {
class AnyAssignedIdQueryParameter extends IdQueryParameter const AnyAssignedIdQueryParameter();
with _$AnyAssignedIdQueryParameter {
const factory AnyAssignedIdQueryParameter() = _AnyAssignedIdQueryParameter;
const AnyAssignedIdQueryParameter._();
@override @override
Map<String, String> toQueryParameter(String field) { Map<String, String> toQueryParameter(String field) {
return {'${field}__isnull': '0'}; return {'${field}__isnull': '0'};
@@ -63,12 +51,12 @@ class AnyAssignedIdQueryParameter extends IdQueryParameter
} }
@HiveType(typeId: PaperlessApiHiveTypeIds.setIdQueryParameter) @HiveType(typeId: PaperlessApiHiveTypeIds.setIdQueryParameter)
@Freezed(toJson: false, fromJson: false) class SetIdQueryParameter extends IdQueryParameter with EquatableMixin {
class SetIdQueryParameter extends IdQueryParameter with _$SetIdQueryParameter { @HiveField(0)
const SetIdQueryParameter._(); final int id;
const factory SetIdQueryParameter({
@HiveField(0) required int id, const SetIdQueryParameter({required this.id});
}) = _SetIdQueryParameter;
@override @override
Map<String, String> toQueryParameter(String field) { Map<String, String> toQueryParameter(String field) {
return {'${field}__id': '$id'}; return {'${field}__id': '$id'};
@@ -76,4 +64,89 @@ class SetIdQueryParameter extends IdQueryParameter with _$SetIdQueryParameter {
@override @override
bool matches(int? id) => id == this.id; bool matches(int? id) => id == this.id;
@override
List<Object?> get props => [id];
}
/// Custom Adapters
class UnsetIdQueryParameterAdapter extends TypeAdapter<UnsetIdQueryParameter> {
@override
final int typeId = 116;
@override
UnsetIdQueryParameter read(BinaryReader reader) {
reader.readByte();
return const UnsetIdQueryParameter();
}
@override
void write(BinaryWriter writer, UnsetIdQueryParameter obj) {
writer.writeByte(0);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is UnsetIdQueryParameterAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}
class NotAssignedIdQueryParameterAdapter
extends TypeAdapter<NotAssignedIdQueryParameter> {
@override
final int typeId = 117;
@override
NotAssignedIdQueryParameter read(BinaryReader reader) {
reader.readByte();
return const NotAssignedIdQueryParameter();
}
@override
void write(BinaryWriter writer, NotAssignedIdQueryParameter obj) {
writer.writeByte(0);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is NotAssignedIdQueryParameterAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}
class AnyAssignedIdQueryParameterAdapter
extends TypeAdapter<AnyAssignedIdQueryParameter> {
@override
final int typeId = 118;
@override
AnyAssignedIdQueryParameter read(BinaryReader reader) {
reader.readByte();
return const AnyAssignedIdQueryParameter();
}
@override
void write(BinaryWriter writer, AnyAssignedIdQueryParameter obj) {
writer.writeByte(0);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is AnyAssignedIdQueryParameterAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
} }

View File

@@ -1,7 +1,7 @@
import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:equatable/equatable.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import 'package:paperless_api/config/hive/hive_type_ids.dart'; import 'package:paperless_api/config/hive/hive_type_ids.dart';
part 'tags_query.freezed.dart';
part 'tags_query.g.dart'; part 'tags_query.g.dart';
sealed class TagsQuery { sealed class TagsQuery {
@@ -10,11 +10,9 @@ sealed class TagsQuery {
bool matches(Iterable<int> ids); bool matches(Iterable<int> ids);
} }
@HiveType(typeId: PaperlessApiHiveTypeIds.notAssignedTagsQuery) // @HiveType(typeId: PaperlessApiHiveTypeIds.notAssignedTagsQuery)
@Freezed(toJson: false, fromJson: false) class NotAssignedTagsQuery extends TagsQuery {
class NotAssignedTagsQuery extends TagsQuery with _$NotAssignedTagsQuery { const NotAssignedTagsQuery();
const NotAssignedTagsQuery._();
const factory NotAssignedTagsQuery() = _NotAssignedTagsQuery;
@override @override
Map<String, String> toQueryParameter() { Map<String, String> toQueryParameter() {
return {'is_tagged': '0'}; return {'is_tagged': '0'};
@@ -25,12 +23,13 @@ class NotAssignedTagsQuery extends TagsQuery with _$NotAssignedTagsQuery {
} }
@HiveType(typeId: PaperlessApiHiveTypeIds.anyAssignedTagsQuery) @HiveType(typeId: PaperlessApiHiveTypeIds.anyAssignedTagsQuery)
@Freezed(toJson: false, fromJson: false) class AnyAssignedTagsQuery extends TagsQuery with EquatableMixin {
class AnyAssignedTagsQuery extends TagsQuery with _$AnyAssignedTagsQuery { @HiveField(0)
const AnyAssignedTagsQuery._(); final List<int> tagIds;
const factory AnyAssignedTagsQuery({ const AnyAssignedTagsQuery({
@HiveField(0) @Default([]) List<int> tagIds, this.tagIds = const [],
}) = _AnyAssignedTagsQuery; });
@override @override
Map<String, String> toQueryParameter() { Map<String, String> toQueryParameter() {
if (tagIds.isEmpty) { if (tagIds.isEmpty) {
@@ -41,16 +40,29 @@ class AnyAssignedTagsQuery extends TagsQuery with _$AnyAssignedTagsQuery {
@override @override
bool matches(Iterable<int> ids) => ids.isNotEmpty; bool matches(Iterable<int> ids) => ids.isNotEmpty;
AnyAssignedTagsQuery copyWith({
List<int>? tagIds,
}) {
return AnyAssignedTagsQuery(
tagIds: tagIds ?? this.tagIds,
);
}
@override
List<Object?> get props => [tagIds];
} }
@HiveType(typeId: PaperlessApiHiveTypeIds.idsTagsQuery) @HiveType(typeId: PaperlessApiHiveTypeIds.idsTagsQuery)
@Freezed(toJson: false, fromJson: false) class IdsTagsQuery extends TagsQuery with EquatableMixin {
class IdsTagsQuery extends TagsQuery with _$IdsTagsQuery { @HiveField(0)
const IdsTagsQuery._(); final List<int> include;
const factory IdsTagsQuery({ @HiveField(1)
@HiveField(0) @Default([]) List<int> include, final List<int> exclude;
@HiveField(1) @Default([]) List<int> exclude, const IdsTagsQuery({
}) = _IdsTagsQuery; this.include = const [],
this.exclude = const [],
});
@override @override
Map<String, String> toQueryParameter() { Map<String, String> toQueryParameter() {
final Map<String, String> params = {}; final Map<String, String> params = {};
@@ -68,4 +80,45 @@ class IdsTagsQuery extends TagsQuery with _$IdsTagsQuery {
return include.toSet().difference(ids.toSet()).isEmpty && return include.toSet().difference(ids.toSet()).isEmpty &&
exclude.toSet().intersection(ids.toSet()).isEmpty; exclude.toSet().intersection(ids.toSet()).isEmpty;
} }
IdsTagsQuery copyWith({
List<int>? include,
List<int>? exclude,
}) {
return IdsTagsQuery(
include: include ?? this.include,
exclude: exclude ?? this.exclude,
);
}
@override
List<Object?> get props => [include, exclude];
}
/// Custom adapters
class NotAssignedTagsQueryAdapter extends TypeAdapter<NotAssignedTagsQuery> {
@override
final int typeId = PaperlessApiHiveTypeIds.notAssignedTagsQuery;
@override
NotAssignedTagsQuery read(BinaryReader reader) {
reader.readByte();
return const NotAssignedTagsQuery();
}
@override
void write(BinaryWriter writer, NotAssignedTagsQuery obj) {
writer.writeByte(0);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is NotAssignedTagsQueryAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
} }

View File

@@ -1,5 +1,3 @@
import 'package:equatable/equatable.dart';
import 'package:flutter/widgets.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
import 'package:paperless_api/config/hive/hive_type_ids.dart'; import 'package:paperless_api/config/hive/hive_type_ids.dart';
@@ -8,9 +6,7 @@ import 'query_type.dart';
part 'text_query.g.dart'; part 'text_query.g.dart';
//TODO: Realize with freezed...
@HiveType(typeId: PaperlessApiHiveTypeIds.textQuery) @HiveType(typeId: PaperlessApiHiveTypeIds.textQuery)
@JsonSerializable()
class TextQuery { class TextQuery {
@HiveField(0) @HiveField(0)
final QueryType queryType; final QueryType queryType;
@@ -85,11 +81,6 @@ class TextQuery {
} }
} }
Map<String, dynamic> toJson() => _$TextQueryToJson(this);
factory TextQuery.fromJson(Map<String, dynamic> json) =>
_$TextQueryFromJson(json);
@override @override
bool operator ==(Object? other) { bool operator ==(Object? other) {
if (identical(this, other)) return true; if (identical(this, other)) return true;

View File

@@ -20,7 +20,7 @@ dependencies:
dio: ^5.0.0 dio: ^5.0.0
collection: ^1.17.0 collection: ^1.17.0
jiffy: ^5.0.0 jiffy: ^5.0.0
freezed_annotation: ^2.2.0 freezed_annotation: ^2.4.1
hive: ^2.2.3 hive: ^2.2.3
dev_dependencies: dev_dependencies:
@@ -28,9 +28,9 @@ dev_dependencies:
sdk: flutter sdk: flutter
flutter_lints: ^2.0.0 flutter_lints: ^2.0.0
json_serializable: ^6.5.4 json_serializable: ^6.5.4
build_runner: ^2.4.2 build_runner: ^2.4.6
freezed: ^2.3.3 freezed: ^2.4.1
hive_generator: ^2.0.0 hive_generator: ^2.0.1
# For information on the generic Dart part of this file, see the # For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec # following page: https://dart.dev/tools/pub/pubspec

View File

@@ -17,14 +17,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "5.13.0" version: "5.13.0"
analyzer_plugin:
dependency: transitive
description:
name: analyzer_plugin
sha256: c1d5f167683de03d5ab6c3b53fc9aeefc5d59476e7810ba7bbddff50c6f4392d
url: "https://pub.dev"
source: hosted
version: "0.11.2"
animations: animations:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -33,14 +25,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.8" version: "2.0.8"
ansicolor:
dependency: transitive
description:
name: ansicolor
sha256: "607f8fa9786f392043f169898923e6c59b4518242b68b8862eb8a8b7d9c30b4a"
url: "https://pub.dev"
source: hosted
version: "2.0.1"
archive: archive:
dependency: transitive dependency: transitive
description: description:
@@ -65,22 +49,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.11.0" version: "2.11.0"
auto_route:
dependency: transitive
description:
name: auto_route
sha256: "12047baeca0e01df93165ef33275b32119d72699ab9a49dc64c20e78f586f96d"
url: "https://pub.dev"
source: hosted
version: "5.0.4"
auto_route_generator:
dependency: "direct dev"
description:
name: auto_route_generator
sha256: de5bfbc02ae4eebb339dd90d325749ae7536e903f6513ef72b88954072d72b0e
url: "https://pub.dev"
source: hosted
version: "5.0.3"
badges: badges:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -313,22 +281,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.17.3" version: "0.17.3"
dart_code_metrics:
dependency: "direct dev"
description:
name: dart_code_metrics
sha256: "3dede3f7abc077a4181ec7445448a289a9ce08e2981e6a4d49a3fb5099d47e1f"
url: "https://pub.dev"
source: hosted
version: "5.7.6"
dart_code_metrics_presets:
dependency: transitive
description:
name: dart_code_metrics_presets
sha256: b71eadf02a3787ebd5c887623f83f6fdc204d45c75a081bd636c4104b3fd8b73
url: "https://pub.dev"
source: hosted
version: "1.8.0"
dart_style: dart_style:
dependency: transitive dependency: transitive
description: description:
@@ -1052,14 +1004,6 @@ packages:
relative: true relative: true
source: path source: path
version: "0.0.1" version: "0.0.1"
mockito:
dependency: "direct dev"
description:
name: mockito
sha256: "7d5b53bcd556c1bc7ffbe4e4d5a19c3e112b7e925e9e172dd7c6ad0630812616"
url: "https://pub.dev"
source: hosted
version: "5.4.2"
mocktail: mocktail:
dependency: transitive dependency: transitive
description: description:
@@ -1363,14 +1307,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.4" version: "2.1.4"
pub_updater:
dependency: transitive
description:
name: pub_updater
sha256: b06600619c8c219065a548f8f7c192b3e080beff95488ed692780f48f69c0625
url: "https://pub.dev"
source: hosted
version: "0.3.1"
pubspec_parse: pubspec_parse:
dependency: transitive dependency: transitive
description: description:

View File

@@ -82,7 +82,7 @@ dependencies:
flutter_displaymode: ^0.5.0 flutter_displaymode: ^0.5.0
dynamic_color: ^1.5.4 dynamic_color: ^1.5.4
flutter_html: ^3.0.0-alpha.6 flutter_html: ^3.0.0-alpha.6
freezed_annotation: ^2.2.0 freezed_annotation: ^2.4.1
animations: ^2.0.7 animations: ^2.0.7
hive_flutter: ^1.1.0 hive_flutter: ^1.1.0
flutter_secure_storage: ^8.0.0 flutter_secure_storage: ^8.0.0
@@ -108,16 +108,13 @@ dev_dependencies:
sdk: flutter sdk: flutter
flutter_test: flutter_test:
sdk: flutter sdk: flutter
build_runner: ^2.4.2 build_runner: ^2.4.6
mockito: ^5.3.2
bloc_test: ^9.1.0 bloc_test: ^9.1.0
dependency_validator: ^3.0.0 dependency_validator: ^3.0.0
flutter_lints: ^1.0.0 flutter_lints: ^1.0.0
json_serializable: ^6.5.4 json_serializable: ^6.5.4
dart_code_metrics: ^5.4.0 freezed: ^2.4.1
auto_route_generator: ^5.0.3 hive_generator: ^2.0.1
freezed: ^2.3.3
hive_generator: ^2.0.0
mock_server: mock_server:
path: packages/mock_server path: packages/mock_server
go_router_builder: ^2.2.4 go_router_builder: ^2.2.4