fix: Add labels to each cubit using repositories and state properties, remove label cubits

This commit is contained in:
Anton Stubenbord
2023-04-04 20:30:25 +02:00
parent 78fbd042a6
commit a2388b014b
95 changed files with 4790 additions and 1823 deletions

View File

@@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/repository/label_repository.dart';
import 'package:paperless_mobile/core/repository/state/indexed_repository_state.dart';
import 'package:paperless_mobile/features/edit_label/cubit/edit_label_cubit.dart';
import 'package:paperless_mobile/features/edit_label/view/label_form.dart';
import 'package:paperless_mobile/generated/l10n/app_localizations.dart';
@@ -12,6 +11,7 @@ class AddLabelPage<T extends Label> extends StatelessWidget {
final Widget pageTitle;
final T Function(Map<String, dynamic> json) fromJsonT;
final List<Widget> additionalFields;
final Future<T> Function(BuildContext context, T label) onSubmit;
const AddLabelPage({
super.key,
@@ -19,19 +19,21 @@ class AddLabelPage<T extends Label> extends StatelessWidget {
required this.pageTitle,
required this.fromJsonT,
this.additionalFields = const [],
required this.onSubmit,
});
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => EditLabelCubit(
context.read<LabelRepository<T>>(),
context.read<LabelRepository>(),
),
child: AddLabelFormWidget(
pageTitle: pageTitle,
label: initialName != null ? fromJsonT({'name': initialName}) : null,
additionalFields: additionalFields,
fromJsonT: fromJsonT,
onSubmit: onSubmit,
),
);
}
@@ -41,6 +43,7 @@ class AddLabelFormWidget<T extends Label> extends StatelessWidget {
final T? label;
final T Function(Map<String, dynamic> json) fromJsonT;
final List<Widget> additionalFields;
final Future<T> Function(BuildContext context, T label) onSubmit;
final Widget pageTitle;
const AddLabelFormWidget({
@@ -49,6 +52,7 @@ class AddLabelFormWidget<T extends Label> extends StatelessWidget {
required this.fromJsonT,
required this.additionalFields,
required this.pageTitle,
required this.onSubmit,
});
@override
@@ -63,7 +67,7 @@ class AddLabelFormWidget<T extends Label> extends StatelessWidget {
submitButtonConfig: SubmitButtonConfig<T>(
icon: const Icon(Icons.add),
label: Text(S.of(context)!.create),
onSubmit: context.read<EditLabelCubit<T>>().create,
onSubmit: (label) => onSubmit(context, label),
),
additionalFields: additionalFields,
),

View File

@@ -1,40 +1,43 @@
import 'dart:developer';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/repository/label_repository.dart';
import 'package:paperless_mobile/core/repository/state/indexed_repository_state.dart';
import 'package:paperless_mobile/features/edit_label/cubit/edit_label_cubit.dart';
import 'package:paperless_mobile/features/edit_label/view/label_form.dart';
import 'package:paperless_mobile/generated/l10n/app_localizations.dart';
import 'package:paperless_mobile/helpers/message_helpers.dart';
import 'package:paperless_mobile/constants.dart';
class EditLabelPage<T extends Label> extends StatelessWidget {
final T label;
final T Function(Map<String, dynamic> json) fromJsonT;
final List<Widget> additionalFields;
final Future<T> Function(BuildContext context, T label) onSubmit;
final Future<void> Function(BuildContext context, T label) onDelete;
const EditLabelPage({
super.key,
required this.label,
required this.fromJsonT,
this.additionalFields = const [],
required this.onSubmit,
required this.onDelete,
});
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => EditLabelCubit(
context.read<LabelRepository<T>>(),
context.read<LabelRepository>(),
),
child: EditLabelForm(
label: label,
additionalFields: additionalFields,
fromJsonT: fromJsonT,
onSubmit: onSubmit,
onDelete: onDelete,
),
);
}
@@ -44,12 +47,16 @@ class EditLabelForm<T extends Label> extends StatelessWidget {
final T label;
final T Function(Map<String, dynamic> json) fromJsonT;
final List<Widget> additionalFields;
final Future<T> Function(BuildContext context, T label) onSubmit;
final Future<void> Function(BuildContext context, T label) onDelete;
const EditLabelForm({
super.key,
required this.label,
required this.fromJsonT,
required this.additionalFields,
required this.onSubmit,
required this.onDelete,
});
@override
@@ -70,7 +77,7 @@ class EditLabelForm<T extends Label> extends StatelessWidget {
submitButtonConfig: SubmitButtonConfig<T>(
icon: const Icon(Icons.save),
label: Text(S.of(context)!.saveChanges),
onSubmit: context.read<EditLabelCubit<T>>().update,
onSubmit: (label) => onSubmit(context, label),
),
additionalFields: additionalFields,
),
@@ -107,7 +114,7 @@ class EditLabelForm<T extends Label> extends StatelessWidget {
false;
if (shouldDelete) {
try {
context.read<EditLabelCubit<T>>().delete(label);
onDelete(context, label);
} on PaperlessServerException catch (error) {
showErrorMessage(context, error);
} catch (error, stackTrace) {
@@ -116,7 +123,7 @@ class EditLabelForm<T extends Label> extends StatelessWidget {
Navigator.pop(context);
}
} else {
context.read<EditLabelCubit<T>>().delete(label);
onDelete(context, label);
Navigator.pop(context);
}
}

View File

@@ -1,8 +1,6 @@
import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/repository/label_repository.dart';
import 'package:paperless_mobile/core/repository/state/impl/correspondent_repository_state.dart';
import 'package:paperless_mobile/features/edit_label/cubit/edit_label_cubit.dart';
import 'package:paperless_mobile/features/edit_label/view/add_label_page.dart';
import 'package:paperless_mobile/generated/l10n/app_localizations.dart';
@@ -14,13 +12,15 @@ class AddCorrespondentPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => EditLabelCubit<Correspondent>(
context.read<LabelRepository<Correspondent>>(),
create: (context) => EditLabelCubit(
context.read(),
),
child: AddLabelPage<Correspondent>(
pageTitle: Text(S.of(context)!.addCorrespondent),
fromJsonT: Correspondent.fromJson,
initialName: initialName,
onSubmit: (context, label) =>
context.read<EditLabelCubit>().addCorrespondent(label),
),
);
}

View File

@@ -1,8 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/repository/label_repository.dart';
import 'package:paperless_mobile/core/repository/state/impl/document_type_repository_state.dart';
import 'package:paperless_mobile/features/edit_label/cubit/edit_label_cubit.dart';
import 'package:paperless_mobile/features/edit_label/view/add_label_page.dart';
import 'package:paperless_mobile/generated/l10n/app_localizations.dart';
@@ -17,13 +15,15 @@ class AddDocumentTypePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => EditLabelCubit<DocumentType>(
context.read<LabelRepository<DocumentType>>(),
create: (context) => EditLabelCubit(
context.read(),
),
child: AddLabelPage<DocumentType>(
pageTitle: Text(S.of(context)!.addDocumentType),
fromJsonT: DocumentType.fromJson,
initialName: initialName,
onSubmit: (context, label) =>
context.read<EditLabelCubit>().addDocumentType(label),
),
);
}

View File

@@ -1,8 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/repository/label_repository.dart';
import 'package:paperless_mobile/core/repository/state/impl/storage_path_repository_state.dart';
import 'package:paperless_mobile/features/edit_label/cubit/edit_label_cubit.dart';
import 'package:paperless_mobile/features/edit_label/view/add_label_page.dart';
import 'package:paperless_mobile/features/labels/storage_path/view/widgets/storage_path_autofill_form_builder_field.dart';
@@ -15,13 +13,15 @@ class AddStoragePathPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => EditLabelCubit<StoragePath>(
context.read<LabelRepository<StoragePath>>(),
create: (context) => EditLabelCubit(
context.read(),
),
child: AddLabelPage<StoragePath>(
pageTitle: Text(S.of(context)!.addStoragePath),
fromJsonT: StoragePath.fromJson,
initialName: initalName,
onSubmit: (context, label) =>
context.read<EditLabelCubit>().addStoragePath(label),
additionalFields: const [
StoragePathAutofillFormBuilderField(name: StoragePath.pathKey),
SizedBox(height: 120.0),

View File

@@ -4,8 +4,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/repository/label_repository.dart';
import 'package:paperless_mobile/core/repository/state/impl/tag_repository_state.dart';
import 'package:paperless_mobile/core/widgets/form_builder_fields/form_builder_color_picker.dart';
import 'package:paperless_mobile/features/edit_label/cubit/edit_label_cubit.dart';
import 'package:paperless_mobile/features/edit_label/view/add_label_page.dart';
@@ -18,13 +16,15 @@ class AddTagPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => EditLabelCubit<Tag>(
context.read<LabelRepository<Tag>>(),
create: (context) => EditLabelCubit(
context.read(),
),
child: AddLabelPage<Tag>(
pageTitle: Text(S.of(context)!.addTag),
fromJsonT: Tag.fromJson,
initialName: initialValue,
onSubmit: (context, label) =>
context.read<EditLabelCubit>().addTag(label),
additionalFields: [
FormBuilderColorPickerField(
name: Tag.colorKey,

View File

@@ -1,8 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/repository/label_repository.dart';
import 'package:paperless_mobile/core/repository/state/impl/correspondent_repository_state.dart';
import 'package:paperless_mobile/features/edit_label/cubit/edit_label_cubit.dart';
import 'package:paperless_mobile/features/edit_label/view/edit_label_page.dart';
@@ -13,12 +11,16 @@ class EditCorrespondentPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => EditLabelCubit<Correspondent>(
context.read<LabelRepository<Correspondent>>(),
create: (context) => EditLabelCubit(
context.read(),
),
child: EditLabelPage<Correspondent>(
label: correspondent,
fromJsonT: Correspondent.fromJson,
onSubmit: (context, label) =>
context.read<EditLabelCubit>().addCorrespondent(label),
onDelete: (context, label) =>
context.read<EditLabelCubit>().removeCorrespondent(label),
),
);
}

View File

@@ -2,7 +2,6 @@ import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/repository/label_repository.dart';
import 'package:paperless_mobile/core/repository/state/impl/document_type_repository_state.dart';
import 'package:paperless_mobile/features/edit_label/cubit/edit_label_cubit.dart';
import 'package:paperless_mobile/features/edit_label/view/edit_label_page.dart';
@@ -13,12 +12,16 @@ class EditDocumentTypePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => EditLabelCubit<DocumentType>(
context.read<LabelRepository<DocumentType>>(),
create: (context) => EditLabelCubit(
context.read(),
),
child: EditLabelPage<DocumentType>(
label: documentType,
fromJsonT: DocumentType.fromJson,
onSubmit: (context, label) =>
context.read<EditLabelCubit>().addDocumentType(label),
onDelete: (context, label) =>
context.read<EditLabelCubit>().removeDocumentType(label),
),
);
}

View File

@@ -1,8 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/repository/label_repository.dart';
import 'package:paperless_mobile/core/repository/state/impl/storage_path_repository_state.dart';
import 'package:paperless_mobile/features/edit_label/cubit/edit_label_cubit.dart';
import 'package:paperless_mobile/features/edit_label/view/edit_label_page.dart';
import 'package:paperless_mobile/features/labels/storage_path/view/widgets/storage_path_autofill_form_builder_field.dart';
@@ -14,12 +12,16 @@ class EditStoragePathPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => EditLabelCubit<StoragePath>(
context.read<LabelRepository<StoragePath>>(),
create: (context) => EditLabelCubit(
context.read(),
),
child: EditLabelPage<StoragePath>(
label: storagePath,
fromJsonT: StoragePath.fromJson,
onSubmit: (context, label) =>
context.read<EditLabelCubit>().addStoragePath(label),
onDelete: (context, label) =>
context.read<EditLabelCubit>().removeStoragePath(label),
additionalFields: [
StoragePathAutofillFormBuilderField(
name: StoragePath.pathKey,

View File

@@ -2,8 +2,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/repository/label_repository.dart';
import 'package:paperless_mobile/core/repository/state/impl/tag_repository_state.dart';
import 'package:paperless_mobile/core/widgets/form_builder_fields/form_builder_color_picker.dart';
import 'package:paperless_mobile/features/edit_label/cubit/edit_label_cubit.dart';
import 'package:paperless_mobile/features/edit_label/view/edit_label_page.dart';
@@ -17,12 +15,16 @@ class EditTagPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => EditLabelCubit<Tag>(
context.read<LabelRepository<Tag>>(),
create: (context) => EditLabelCubit(
context.read(),
),
child: EditLabelPage<Tag>(
label: tag,
fromJsonT: Tag.fromJson,
onSubmit: (context, label) =>
context.read<EditLabelCubit>().addTag(label),
onDelete: (context, label) =>
context.read<EditLabelCubit>().removeTag(label),
additionalFields: [
FormBuilderColorPickerField(
initialValue: tag.color,