Some visual updates, bugfixes, finished major refactoring!

This commit is contained in:
Anton Stubenbord
2022-12-13 01:17:53 +01:00
parent 2f31d9c053
commit 64c431286e
17 changed files with 256 additions and 126 deletions

View File

@@ -17,7 +17,7 @@ class DocumentUploadCubit extends Cubit<DocumentUploadState> {
final LabelRepository<Correspondent> _correspondentRepository; final LabelRepository<Correspondent> _correspondentRepository;
final LabelRepository<DocumentType> _documentTypeRepository; final LabelRepository<DocumentType> _documentTypeRepository;
final List<StreamSubscription> _subs = const []; final List<StreamSubscription> _subs = [];
DocumentUploadCubit({ DocumentUploadCubit({
required LocalVault localVault, required LocalVault localVault,

View File

@@ -13,7 +13,11 @@ class DocumentUploadState extends Equatable {
}); });
@override @override
List<Object> get props => []; List<Object> get props => [
tags,
correspondents,
documentTypes,
];
DocumentUploadState copyWith({ DocumentUploadState copyWith({
Map<int, Tag>? tags, Map<int, Tag>? tags,

View File

@@ -156,7 +156,7 @@ class _DocumentsPageState extends State<DocumentsPage> {
pagingController: _pagingController, pagingController: _pagingController,
hasInternetConnection: hasInternetConnection:
connectivityState == ConnectivityState.connected, connectivityState == ConnectivityState.connected,
onTagSelected: (int tagId) => _addTagToFilter, onTagSelected: _addTagToFilter,
); );
break; break;
} }

View File

@@ -1,10 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:paperless_api/paperless_api.dart'; import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/widgets/empty_state.dart'; import 'package:paperless_mobile/core/widgets/empty_state.dart';
import 'package:paperless_mobile/extensions/flutter_extensions.dart'; import 'package:paperless_mobile/extensions/flutter_extensions.dart';
import 'package:paperless_mobile/features/documents/bloc/documents_cubit.dart'; import 'package:paperless_mobile/features/documents/bloc/documents_cubit.dart';
import 'package:paperless_mobile/features/saved_view/cubit/saved_view_cubit.dart';
import 'package:paperless_mobile/generated/l10n.dart'; import 'package:paperless_mobile/generated/l10n.dart';
class DocumentsEmptyState extends StatelessWidget { class DocumentsEmptyState extends StatelessWidget {
@@ -26,7 +24,7 @@ class DocumentsEmptyState extends StatelessWidget {
? TextButton( ? TextButton(
onPressed: onReset, onPressed: onReset,
child: Text( child: Text(
S.of(context).documentsFilterPageResetFilterLabel, S.of(context).documentsEmptyStateResetFilterLabel,
), ),
).padded() ).padded()
: null, : null,

View File

@@ -56,7 +56,9 @@ class _DocumentFilterPanelState extends State<DocumentFilterPanel> {
topLeft: radius, topLeft: radius,
topRight: radius, topRight: radius,
), ),
child: FormBuilder( child: Scaffold(
resizeToAvoidBottomInset: true,
body: FormBuilder(
key: _formKey, key: _formKey,
child: Column( child: Column(
children: [ children: [
@@ -65,13 +67,12 @@ class _DocumentFilterPanelState extends State<DocumentFilterPanel> {
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Text( Text(
S.of(context).documentsFilterPageTitle, S.of(context).documentFilterTitle,
style: Theme.of(context).textTheme.titleLarge, style: Theme.of(context).textTheme.titleLarge,
), ),
TextButton( TextButton(
onPressed: _onApplyFilter, onPressed: _onApplyFilter,
child: child: Text(S.of(context).documentFilterApplyFilterLabel),
Text(S.of(context).documentsFilterPageApplyFilterLabel),
), ),
], ],
).padded(), ).padded(),
@@ -81,17 +82,19 @@ class _DocumentFilterPanelState extends State<DocumentFilterPanel> {
topLeft: Radius.circular(16.0), topLeft: Radius.circular(16.0),
topRight: Radius.circular(16.0), topRight: Radius.circular(16.0),
), ),
child: ListView( child: SingleChildScrollView(
child: Column(
children: [ children: [
Align( Align(
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
child: Text(S.of(context).documentsFilterPageSearchLabel), child: Text(S.of(context).documentFilterSearchLabel),
).paddedOnly(left: 8.0), ).paddedOnly(left: 8.0),
_buildQueryFormField().padded(), _buildQueryFormField().padded(),
Align( Align(
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
child: child: Text(
Text(S.of(context).documentsFilterPageAdvancedLabel), S.of(context).documentFilterAdvancedLabel,
),
).padded(), ).padded(),
_buildCreatedDateRangePickerFormField(), _buildCreatedDateRangePickerFormField(),
_buildAddedDateRangePickerFormField(), _buildAddedDateRangePickerFormField(),
@@ -100,17 +103,15 @@ class _DocumentFilterPanelState extends State<DocumentFilterPanel> {
_buildStoragePathFormField().padded(), _buildStoragePathFormField().padded(),
_buildTagsFormField() _buildTagsFormField()
.paddedSymmetrically(horizontal: 8, vertical: 4.0), .paddedSymmetrically(horizontal: 8, vertical: 4.0),
// Required in order for the storage path field to be visible when typing
const SizedBox(
height: 150,
),
], ],
).paddedOnly(bottom: 16),
), ),
), ),
), ),
], ],
), ),
), ),
),
); );
} }
@@ -136,7 +137,7 @@ class _DocumentFilterPanelState extends State<DocumentFilterPanel> {
alignment: Alignment.topRight, alignment: Alignment.topRight,
child: TextButton.icon( child: TextButton.icon(
icon: const Icon(Icons.refresh), icon: const Icon(Icons.refresh),
label: Text(S.of(context).documentsFilterPageResetFilterLabel), label: Text(S.of(context).documentFilterResetLabel),
onPressed: () => _resetFilter(context), onPressed: () => _resetFilter(context),
), ),
), ),
@@ -208,14 +209,13 @@ class _DocumentFilterPanelState extends State<DocumentFilterPanel> {
late String label; late String label;
switch (queryType) { switch (queryType) {
case QueryType.title: case QueryType.title:
label = S.of(context).documentsFilterPageQueryOptionsTitleLabel; label = S.of(context).documentFilterQueryOptionsTitleLabel;
break; break;
case QueryType.titleAndContent: case QueryType.titleAndContent:
label = label = S.of(context).documentFilterQueryOptionsTitleAndContentLabel;
S.of(context).documentsFilterPageQueryOptionsTitleAndContentLabel;
break; break;
case QueryType.extended: case QueryType.extended:
label = S.of(context).documentsFilterPageQueryOptionsExtendedLabel; label = S.of(context).documentFilterQueryOptionsExtendedLabel;
break; break;
} }
@@ -244,7 +244,7 @@ class _DocumentFilterPanelState extends State<DocumentFilterPanel> {
spacer, spacer,
ActionChip( ActionChip(
label: Text( label: Text(
S.of(context).documentsFilterPageDateRangeLastSevenDaysLabel, S.of(context).documentFilterDateRangeLastSevenDaysLabel,
), ),
onPressed: () { onPressed: () {
_formKey.currentState?.fields[formFieldKey]?.didChange( _formKey.currentState?.fields[formFieldKey]?.didChange(
@@ -258,7 +258,7 @@ class _DocumentFilterPanelState extends State<DocumentFilterPanel> {
spacer, spacer,
ActionChip( ActionChip(
label: Text( label: Text(
S.of(context).documentsFilterPageDateRangeLastMonthLabel, S.of(context).documentFilterDateRangeLastMonthLabel,
), ),
onPressed: () { onPressed: () {
final now = DateTime.now(); final now = DateTime.now();
@@ -276,7 +276,7 @@ class _DocumentFilterPanelState extends State<DocumentFilterPanel> {
spacer, spacer,
ActionChip( ActionChip(
label: Text( label: Text(
S.of(context).documentsFilterPageDateRangeLastThreeMonthsLabel, S.of(context).documentFilterDateRangeLastThreeMonthsLabel,
), ),
onPressed: () { onPressed: () {
final now = DateTime.now(); final now = DateTime.now();
@@ -297,7 +297,7 @@ class _DocumentFilterPanelState extends State<DocumentFilterPanel> {
spacer, spacer,
ActionChip( ActionChip(
label: Text( label: Text(
S.of(context).documentsFilterPageDateRangeLastYearLabel, S.of(context).documentFilterDateRangeLastYearLabel,
), ),
onPressed: () { onPressed: () {
final now = DateTime.now(); final now = DateTime.now();
@@ -347,9 +347,8 @@ class _DocumentFilterPanelState extends State<DocumentFilterPanel> {
), ),
format: DateFormat.yMMMd(Localizations.localeOf(context).toString()), format: DateFormat.yMMMd(Localizations.localeOf(context).toString()),
fieldStartLabelText: fieldStartLabelText:
S.of(context).documentsFilterPageDateRangeFieldStartLabel, S.of(context).documentFilterDateRangeFieldStartLabel,
fieldEndLabelText: fieldEndLabelText: S.of(context).documentFilterDateRangeFieldEndLabel,
S.of(context).documentsFilterPageDateRangeFieldEndLabel,
firstDate: DateTime.fromMicrosecondsSinceEpoch(0), firstDate: DateTime.fromMicrosecondsSinceEpoch(0),
lastDate: DateTime.now(), lastDate: DateTime.now(),
name: fkCreatedAt, name: fkCreatedAt,
@@ -395,9 +394,8 @@ class _DocumentFilterPanelState extends State<DocumentFilterPanel> {
), ),
format: DateFormat.yMMMd(), format: DateFormat.yMMMd(),
fieldStartLabelText: fieldStartLabelText:
S.of(context).documentsFilterPageDateRangeFieldStartLabel, S.of(context).documentFilterDateRangeFieldStartLabel,
fieldEndLabelText: fieldEndLabelText: S.of(context).documentFilterDateRangeFieldEndLabel,
S.of(context).documentsFilterPageDateRangeFieldEndLabel,
firstDate: DateTime.fromMicrosecondsSinceEpoch(0), firstDate: DateTime.fromMicrosecondsSinceEpoch(0),
lastDate: DateTime.now(), lastDate: DateTime.now(),
name: fkAddedAt, name: fkAddedAt,

View File

@@ -20,23 +20,21 @@ class QueryTypeFormField extends StatelessWidget {
itemBuilder: (context) => [ itemBuilder: (context) => [
PopupMenuItem( PopupMenuItem(
child: ListTile( child: ListTile(
title: Text(S title: Text(
.of(context) S.of(context).documentFilterQueryOptionsTitleAndContentLabel),
.documentsFilterPageQueryOptionsTitleAndContentLabel),
), ),
value: QueryType.titleAndContent, value: QueryType.titleAndContent,
), ),
PopupMenuItem( PopupMenuItem(
child: ListTile( child: ListTile(
title: title: Text(S.of(context).documentFilterQueryOptionsTitleLabel),
Text(S.of(context).documentsFilterPageQueryOptionsTitleLabel),
), ),
value: QueryType.title, value: QueryType.title,
), ),
PopupMenuItem( PopupMenuItem(
child: ListTile( child: ListTile(
title: Text( title:
S.of(context).documentsFilterPageQueryOptionsExtendedLabel), Text(S.of(context).documentFilterQueryOptionsExtendedLabel),
), ),
value: QueryType.extended, value: QueryType.extended,
), ),

View File

@@ -51,7 +51,7 @@ class _SortFieldSelectionBottomSheetState
textAlign: TextAlign.start, textAlign: TextAlign.start,
), ),
TextButton( TextButton(
child: Text(S.of(context).documentsFilterPageApplyFilterLabel), child: Text(S.of(context).documentFilterApplyFilterLabel),
onPressed: () { onPressed: () {
widget.onSubmit( widget.onSubmit(
_currentSortField, _currentSortField,

View File

@@ -1,3 +1,5 @@
import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart'; import 'package:flutter_form_builder/flutter_form_builder.dart';
@@ -30,7 +32,8 @@ class AddTagPage extends StatelessWidget {
label: Text(S.of(context).tagColorPropertyLabel), label: Text(S.of(context).tagColorPropertyLabel),
), ),
colorPickerType: ColorPickerType.materialPicker, colorPickerType: ColorPickerType.materialPicker,
initialValue: null, initialValue: Color((Random().nextDouble() * 0xFFFFFF).toInt())
.withOpacity(1.0),
), ),
FormBuilderCheckbox( FormBuilderCheckbox(
name: Tag.isInboxTagKey, name: Tag.isInboxTagKey,

View File

@@ -6,6 +6,7 @@ import 'package:paperless_mobile/core/bloc/paperless_server_information_state.da
import 'package:paperless_mobile/core/repository/label_repository.dart'; import 'package:paperless_mobile/core/repository/label_repository.dart';
import 'package:paperless_mobile/core/repository/provider/label_repositories_provider.dart'; import 'package:paperless_mobile/core/repository/provider/label_repositories_provider.dart';
import 'package:paperless_mobile/core/repository/saved_view_repository.dart'; import 'package:paperless_mobile/core/repository/saved_view_repository.dart';
import 'package:paperless_mobile/core/store/local_vault.dart';
import 'package:paperless_mobile/di_initializer.dart'; import 'package:paperless_mobile/di_initializer.dart';
import 'package:paperless_mobile/extensions/flutter_extensions.dart'; import 'package:paperless_mobile/extensions/flutter_extensions.dart';
import 'package:paperless_mobile/features/inbox/bloc/inbox_cubit.dart'; import 'package:paperless_mobile/features/inbox/bloc/inbox_cubit.dart';
@@ -185,6 +186,8 @@ class InfoDrawer extends StatelessWidget {
onTap: () { onTap: () {
try { try {
BlocProvider.of<AuthenticationCubit>(context).logout(); BlocProvider.of<AuthenticationCubit>(context).logout();
getIt<LocalVault>().clear();
BlocProvider.of<ApplicationSettingsCubit>(context).clear();
RepositoryProvider.of<LabelRepository<Tag>>(context).clear(); RepositoryProvider.of<LabelRepository<Tag>>(context).clear();
RepositoryProvider.of<LabelRepository<Correspondent>>(context) RepositoryProvider.of<LabelRepository<Correspondent>>(context)
.clear(); .clear();

View File

@@ -54,8 +54,9 @@ class _TagFormFieldState extends State<TagFormField> {
.isEmpty || .isEmpty ||
_textEditingController.text.isEmpty; _textEditingController.text.isEmpty;
}); });
setState(() => setState(
_showClearSuffixIcon = _textEditingController.text.isNotEmpty); () => _showClearSuffixIcon = _textEditingController.text.isNotEmpty,
);
}); });
} }
@@ -86,6 +87,15 @@ class _TagFormFieldState extends State<TagFormField> {
), ),
controller: _textEditingController, controller: _textEditingController,
), ),
suggestionsBoxDecoration: SuggestionsBoxDecoration(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16),
side: BorderSide(
color: Theme.of(context).colorScheme.primary,
width: 2.0,
),
),
),
suggestionsCallback: (query) { suggestionsCallback: (query) {
final suggestions = widget.selectableOptions.entries final suggestions = widget.selectableOptions.entries
.where( .where(

View File

@@ -1,10 +1,9 @@
import 'dart:developer';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart'; import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:form_builder_extra_fields/form_builder_extra_fields.dart';
import 'package:paperless_api/paperless_api.dart'; import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/generated/l10n.dart'; import 'package:paperless_mobile/generated/l10n.dart';
import 'package:form_builder_extra_fields/form_builder_extra_fields.dart';
/// ///
/// Form field allowing to select labels (i.e. correspondent, documentType) /// Form field allowing to select labels (i.e. correspondent, documentType)
@@ -83,7 +82,7 @@ class _LabelFormFieldState<T extends Label, R extends IdQueryParameter>
return FormBuilderTypeAhead<IdQueryParameter>( return FormBuilderTypeAhead<IdQueryParameter>(
enabled: isEnabled, enabled: isEnabled,
noItemsFoundBuilder: (context) => Padding( noItemsFoundBuilder: (context) => Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0), padding: const EdgeInsets.symmetric(vertical: 8),
child: Text( child: Text(
S.of(context).labelFormFieldNoItemsFoundText, S.of(context).labelFormFieldNoItemsFoundText,
textAlign: TextAlign.center, textAlign: TextAlign.center,
@@ -93,9 +92,24 @@ class _LabelFormFieldState<T extends Label, R extends IdQueryParameter>
), ),
initialValue: widget.initialValue ?? widget.queryParameterIdBuilder(null), initialValue: widget.initialValue ?? widget.queryParameterIdBuilder(null),
name: widget.name, name: widget.name,
suggestionsBoxDecoration: SuggestionsBoxDecoration(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16),
side: BorderSide(
color: Theme.of(context).colorScheme.primary,
width: 2.0,
),
),
),
itemBuilder: (context, suggestion) => ListTile( itemBuilder: (context, suggestion) => ListTile(
title: Text(widget.state[suggestion.id]?.name ?? title: Text(
S.of(context).labelNotAssignedText), widget.state[suggestion.id]?.name ??
S.of(context).labelNotAssignedText,
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
dense: true,
style: ListTileStyle.list,
), ),
suggestionsCallback: (pattern) { suggestionsCallback: (pattern) {
final List<IdQueryParameter> suggestions = widget.state.entries final List<IdQueryParameter> suggestions = widget.state.entries

View File

@@ -66,7 +66,8 @@ class LabelTabView<T extends Label> extends StatelessWidget {
onRefresh: BlocProvider.of<LabelCubit<T>>(context).reload, onRefresh: BlocProvider.of<LabelCubit<T>>(context).reload,
child: ListView( child: ListView(
children: labels children: labels
.map((l) => LabelItem<T>( .map(
(l) => LabelItem<T>(
name: l.name, name: l.name,
content: content:
contentBuilder?.call(l) ?? Text(l.match ?? '-'), contentBuilder?.call(l) ?? Text(l.match ?? '-'),
@@ -74,7 +75,8 @@ class LabelTabView<T extends Label> extends StatelessWidget {
filterBuilder: filterBuilder, filterBuilder: filterBuilder,
leading: leadingBuilder?.call(l), leading: leadingBuilder?.call(l),
label: l, label: l,
)) ),
)
.toList(), .toList(),
), ),
); );

View File

@@ -45,4 +45,8 @@ class ApplicationSettingsCubit extends Cubit<ApplicationSettingsState> {
await localVault.storeApplicationSettings(settings); await localVault.storeApplicationSettings(settings);
emit(settings); emit(settings);
} }
void clear() {
emit(ApplicationSettingsState.defaultSettings);
}
} }

View File

@@ -70,10 +70,40 @@
"@documentDetailsPageTabOverviewLabel": {}, "@documentDetailsPageTabOverviewLabel": {},
"documentDocumentTypePropertyLabel": "Typ dokumentu", "documentDocumentTypePropertyLabel": "Typ dokumentu",
"@documentDocumentTypePropertyLabel": {}, "@documentDocumentTypePropertyLabel": {},
"documentDownloadSuccessMessage": "Document successfully downloaded.", "documentDownloadSuccessMessage": "Dokument úspěšně stažen.",
"@documentDownloadSuccessMessage": {}, "@documentDownloadSuccessMessage": {},
"documentEditPageTitle": "Upravit dokument", "documentEditPageTitle": "Upravit dokument",
"@documentEditPageTitle": {}, "@documentEditPageTitle": {},
"documentFilterAdvancedLabel": "Rozšířené",
"@documentFilterAdvancedLabel": {},
"documentFilterApplyFilterLabel": "Použít",
"@documentFilterApplyFilterLabel": {},
"documentFilterDateRangeFieldEndLabel": "Do",
"@documentFilterDateRangeFieldEndLabel": {},
"documentFilterDateRangeFieldStartLabel": "Od",
"@documentFilterDateRangeFieldStartLabel": {},
"documentFilterDateRangeLastMonthLabel": "Minulý měsíc",
"@documentFilterDateRangeLastMonthLabel": {},
"documentFilterDateRangeLastSevenDaysLabel": "Posledních 7 dní",
"@documentFilterDateRangeLastSevenDaysLabel": {},
"documentFilterDateRangeLastThreeMonthsLabel": "Poslední 3 měsíce",
"@documentFilterDateRangeLastThreeMonthsLabel": {},
"documentFilterDateRangeLastYearLabel": "Minulý rok",
"@documentFilterDateRangeLastYearLabel": {},
"documentFilterQueryOptionsAsnLabel": "ASČ",
"@documentFilterQueryOptionsAsnLabel": {},
"documentFilterQueryOptionsExtendedLabel": "Prodloužené",
"@documentFilterQueryOptionsExtendedLabel": {},
"documentFilterQueryOptionsTitleAndContentLabel": "Název & Obsah",
"@documentFilterQueryOptionsTitleAndContentLabel": {},
"documentFilterQueryOptionsTitleLabel": "Název",
"@documentFilterQueryOptionsTitleLabel": {},
"documentFilterResetLabel": "Zrušit",
"@documentFilterResetLabel": {},
"documentFilterSearchLabel": "Hledat",
"@documentFilterSearchLabel": {},
"documentFilterTitle": "Filtrovat dokumenty",
"@documentFilterTitle": {},
"documentMetaDataChecksumLabel": "MD5 součet originálu", "documentMetaDataChecksumLabel": "MD5 součet originálu",
"@documentMetaDataChecksumLabel": {}, "@documentMetaDataChecksumLabel": {},
"documentMetaDataMediaFilenamePropertyLabel": "Jméno souboru média", "documentMetaDataMediaFilenamePropertyLabel": "Jméno souboru média",
@@ -100,6 +130,8 @@
"@documentScannerPageUploadButtonTooltip": {}, "@documentScannerPageUploadButtonTooltip": {},
"documentScannerPageUploadFromThisDeviceButtonLabel": "Nahrát jeden dokument z tohoto zařízení", "documentScannerPageUploadFromThisDeviceButtonLabel": "Nahrát jeden dokument z tohoto zařízení",
"@documentScannerPageUploadFromThisDeviceButtonLabel": {}, "@documentScannerPageUploadFromThisDeviceButtonLabel": {},
"documentsEmptyStateResetFilterLabel": "Zrušit",
"@documentsEmptyStateResetFilterLabel": {},
"documentsFilterPageAdvancedLabel": "Rozšířené", "documentsFilterPageAdvancedLabel": "Rozšířené",
"@documentsFilterPageAdvancedLabel": {}, "@documentsFilterPageAdvancedLabel": {},
"documentsFilterPageApplyFilterLabel": "Použít", "documentsFilterPageApplyFilterLabel": "Použít",
@@ -124,8 +156,6 @@
"@documentsFilterPageQueryOptionsTitleAndContentLabel": {}, "@documentsFilterPageQueryOptionsTitleAndContentLabel": {},
"documentsFilterPageQueryOptionsTitleLabel": "Název", "documentsFilterPageQueryOptionsTitleLabel": "Název",
"@documentsFilterPageQueryOptionsTitleLabel": {}, "@documentsFilterPageQueryOptionsTitleLabel": {},
"documentsFilterPageResetFilterLabel": "Zrušit",
"@documentsFilterPageResetFilterLabel": {},
"documentsFilterPageSearchLabel": "Hledat", "documentsFilterPageSearchLabel": "Hledat",
"@documentsFilterPageSearchLabel": {}, "@documentsFilterPageSearchLabel": {},
"documentsFilterPageTitle": "Filtrovat dokumenty", "documentsFilterPageTitle": "Filtrovat dokumenty",
@@ -216,7 +246,7 @@
"@errorMessageInvalidClientCertificateConfiguration": {}, "@errorMessageInvalidClientCertificateConfiguration": {},
"errorMessageLoadSavedViewsError": "Nezdařilo se načíst uložené náhledy.", "errorMessageLoadSavedViewsError": "Nezdařilo se načíst uložené náhledy.",
"@errorMessageLoadSavedViewsError": {}, "@errorMessageLoadSavedViewsError": {},
"errorMessageMissingClientCertificate": "Byl očekáván certifikát klienta, ale nebyl zaslán. Dodejte prosím platný certifikát klienta.", "errorMessageMissingClientCertificate": "Byl očekáván certifikát klienta, který ale nebyl zaslán. Dodejte prosím platný certifikát klienta.",
"@errorMessageMissingClientCertificate": {}, "@errorMessageMissingClientCertificate": {},
"errorMessageNotAuthenticated": "Uživatel není přihlášen.", "errorMessageNotAuthenticated": "Uživatel není přihlášen.",
"@errorMessageNotAuthenticated": {}, "@errorMessageNotAuthenticated": {},
@@ -272,9 +302,9 @@
"@inboxPageMarkAllAsSeenLabel": {}, "@inboxPageMarkAllAsSeenLabel": {},
"inboxPageMarkAsSeenText": "Označit jako shlédnuté", "inboxPageMarkAsSeenText": "Označit jako shlédnuté",
"@inboxPageMarkAsSeenText": {}, "@inboxPageMarkAsSeenText": {},
"inboxPageNoNewDocumentsRefreshLabel": "Refresh", "inboxPageNoNewDocumentsRefreshLabel": "Obnovit",
"@inboxPageNoNewDocumentsRefreshLabel": {}, "@inboxPageNoNewDocumentsRefreshLabel": {},
"inboxPageNoNewDocumentsText": "You do not have unseen documents.", "inboxPageNoNewDocumentsText": "Nemáte neshlédnuté dokumenty.",
"@inboxPageNoNewDocumentsText": {}, "@inboxPageNoNewDocumentsText": {},
"inboxPageTodayText": "Dnes", "inboxPageTodayText": "Dnes",
"@inboxPageTodayText": {}, "@inboxPageTodayText": {},
@@ -314,7 +344,7 @@
"@labelsPageDocumentTypesTitleText": {}, "@labelsPageDocumentTypesTitleText": {},
"labelsPageStoragePathEmptyStateAddNewLabel": "Vytvořit novou cestu k úložišti", "labelsPageStoragePathEmptyStateAddNewLabel": "Vytvořit novou cestu k úložišti",
"@labelsPageStoragePathEmptyStateAddNewLabel": {}, "@labelsPageStoragePathEmptyStateAddNewLabel": {},
"labelsPageStoragePathEmptyStateDescriptionText": "Zdá se že zatím nebyla vytvořena žádné cesty k úložišti.", "labelsPageStoragePathEmptyStateDescriptionText": "Zdá se že zatím nebyly vytvořeny žádné cesty k úložištím.",
"@labelsPageStoragePathEmptyStateDescriptionText": {}, "@labelsPageStoragePathEmptyStateDescriptionText": {},
"labelsPageStoragePathTitleText": "Cesty k úložišti", "labelsPageStoragePathTitleText": "Cesty k úložišti",
"@labelsPageStoragePathTitleText": {}, "@labelsPageStoragePathTitleText": {},

View File

@@ -74,6 +74,36 @@
"@documentDownloadSuccessMessage": {}, "@documentDownloadSuccessMessage": {},
"documentEditPageTitle": "Dokument Bearbeiten", "documentEditPageTitle": "Dokument Bearbeiten",
"@documentEditPageTitle": {}, "@documentEditPageTitle": {},
"documentFilterAdvancedLabel": "Erweitert",
"@documentFilterAdvancedLabel": {},
"documentFilterApplyFilterLabel": "Anwenden",
"@documentFilterApplyFilterLabel": {},
"documentFilterDateRangeFieldEndLabel": "Bis",
"@documentFilterDateRangeFieldEndLabel": {},
"documentFilterDateRangeFieldStartLabel": "Von",
"@documentFilterDateRangeFieldStartLabel": {},
"documentFilterDateRangeLastMonthLabel": "Letzter Monat",
"@documentFilterDateRangeLastMonthLabel": {},
"documentFilterDateRangeLastSevenDaysLabel": "Letzte 7 Tage",
"@documentFilterDateRangeLastSevenDaysLabel": {},
"documentFilterDateRangeLastThreeMonthsLabel": "Letzte 3 Monate",
"@documentFilterDateRangeLastThreeMonthsLabel": {},
"documentFilterDateRangeLastYearLabel": "Letztes Jahr",
"@documentFilterDateRangeLastYearLabel": {},
"documentFilterQueryOptionsAsnLabel": "ASN",
"@documentFilterQueryOptionsAsnLabel": {},
"documentFilterQueryOptionsExtendedLabel": "Erweitert",
"@documentFilterQueryOptionsExtendedLabel": {},
"documentFilterQueryOptionsTitleAndContentLabel": "Titel & Inhalt",
"@documentFilterQueryOptionsTitleAndContentLabel": {},
"documentFilterQueryOptionsTitleLabel": "Titel",
"@documentFilterQueryOptionsTitleLabel": {},
"documentFilterResetLabel": "Zurücksetzen",
"@documentFilterResetLabel": {},
"documentFilterSearchLabel": "Suche",
"@documentFilterSearchLabel": {},
"documentFilterTitle": "Dokumente filtern",
"@documentFilterTitle": {},
"documentMetaDataChecksumLabel": "MD5-Prüfsumme Original", "documentMetaDataChecksumLabel": "MD5-Prüfsumme Original",
"@documentMetaDataChecksumLabel": {}, "@documentMetaDataChecksumLabel": {},
"documentMetaDataMediaFilenamePropertyLabel": "Media-Dateiname", "documentMetaDataMediaFilenamePropertyLabel": "Media-Dateiname",
@@ -100,6 +130,8 @@
"@documentScannerPageUploadButtonTooltip": {}, "@documentScannerPageUploadButtonTooltip": {},
"documentScannerPageUploadFromThisDeviceButtonLabel": "Lade ein Dokument von diesem Gerät hoch", "documentScannerPageUploadFromThisDeviceButtonLabel": "Lade ein Dokument von diesem Gerät hoch",
"@documentScannerPageUploadFromThisDeviceButtonLabel": {}, "@documentScannerPageUploadFromThisDeviceButtonLabel": {},
"documentsEmptyStateResetFilterLabel": "Filter zurücksetzen",
"@documentsEmptyStateResetFilterLabel": {},
"documentsFilterPageAdvancedLabel": "Erweitert", "documentsFilterPageAdvancedLabel": "Erweitert",
"@documentsFilterPageAdvancedLabel": {}, "@documentsFilterPageAdvancedLabel": {},
"documentsFilterPageApplyFilterLabel": "Anwenden", "documentsFilterPageApplyFilterLabel": "Anwenden",
@@ -124,11 +156,9 @@
"@documentsFilterPageQueryOptionsTitleAndContentLabel": {}, "@documentsFilterPageQueryOptionsTitleAndContentLabel": {},
"documentsFilterPageQueryOptionsTitleLabel": "Titel", "documentsFilterPageQueryOptionsTitleLabel": "Titel",
"@documentsFilterPageQueryOptionsTitleLabel": {}, "@documentsFilterPageQueryOptionsTitleLabel": {},
"documentsFilterPageResetFilterLabel": "Zurücksetzen",
"@documentsFilterPageResetFilterLabel": {},
"documentsFilterPageSearchLabel": "Suche", "documentsFilterPageSearchLabel": "Suche",
"@documentsFilterPageSearchLabel": {}, "@documentsFilterPageSearchLabel": {},
"documentsFilterPageTitle": "Dokumente Filtern", "documentsFilterPageTitle": "Dokumente filtern",
"@documentsFilterPageTitle": {}, "@documentsFilterPageTitle": {},
"documentsPageBulkDeleteSuccessfulText": "Das massenhafte Löschen der Dokumente war erfolgreich.", "documentsPageBulkDeleteSuccessfulText": "Das massenhafte Löschen der Dokumente war erfolgreich.",
"@documentsPageBulkDeleteSuccessfulText": {}, "@documentsPageBulkDeleteSuccessfulText": {},
@@ -256,7 +286,7 @@
"@genericActionSaveLabel": {}, "@genericActionSaveLabel": {},
"genericActionSelectText": "Auswählen", "genericActionSelectText": "Auswählen",
"@genericActionSelectText": {}, "@genericActionSelectText": {},
"genericActionUpdateLabel": "Aktualisieren", "genericActionUpdateLabel": "Änderungen speichern",
"@genericActionUpdateLabel": {}, "@genericActionUpdateLabel": {},
"genericActionUploadLabel": "Hochladen", "genericActionUploadLabel": "Hochladen",
"@genericActionUploadLabel": {}, "@genericActionUploadLabel": {},
@@ -266,9 +296,9 @@
"@inboxPageDocumentRemovedMessageText": {}, "@inboxPageDocumentRemovedMessageText": {},
"inboxPageMarkAllAsSeenConfirmationDialogText": "Bist Du sicher, dass Du alle Dokumente als gesehen markieren möchtest? Dadurch wird eine Massenbearbeitung durchgeführt, bei der alle Posteingangs-Tags von den Dokumenten entfernt werden.\\nDiese Aktion kann nicht rückgängig gemacht werden! Möchtest Du trotzdem fortfahren?", "inboxPageMarkAllAsSeenConfirmationDialogText": "Bist Du sicher, dass Du alle Dokumente als gesehen markieren möchtest? Dadurch wird eine Massenbearbeitung durchgeführt, bei der alle Posteingangs-Tags von den Dokumenten entfernt werden.\\nDiese Aktion kann nicht rückgängig gemacht werden! Möchtest Du trotzdem fortfahren?",
"@inboxPageMarkAllAsSeenConfirmationDialogText": {}, "@inboxPageMarkAllAsSeenConfirmationDialogText": {},
"inboxPageMarkAllAsSeenConfirmationDialogTitleText": "Alle als gelesen markieren?", "inboxPageMarkAllAsSeenConfirmationDialogTitleText": "Alle als gesehen markieren?",
"@inboxPageMarkAllAsSeenConfirmationDialogTitleText": {}, "@inboxPageMarkAllAsSeenConfirmationDialogTitleText": {},
"inboxPageMarkAllAsSeenLabel": "Alle als gelesen markieren", "inboxPageMarkAllAsSeenLabel": "Alle gesehen",
"@inboxPageMarkAllAsSeenLabel": {}, "@inboxPageMarkAllAsSeenLabel": {},
"inboxPageMarkAsSeenText": "Als gelesen markieren", "inboxPageMarkAsSeenText": "Als gelesen markieren",
"@inboxPageMarkAsSeenText": {}, "@inboxPageMarkAsSeenText": {},

View File

@@ -74,6 +74,36 @@
"@documentDownloadSuccessMessage": {}, "@documentDownloadSuccessMessage": {},
"documentEditPageTitle": "Edit Document", "documentEditPageTitle": "Edit Document",
"@documentEditPageTitle": {}, "@documentEditPageTitle": {},
"documentFilterAdvancedLabel": "Advanced",
"@documentFilterAdvancedLabel": {},
"documentFilterApplyFilterLabel": "Apply",
"@documentFilterApplyFilterLabel": {},
"documentFilterDateRangeFieldEndLabel": "To",
"@documentFilterDateRangeFieldEndLabel": {},
"documentFilterDateRangeFieldStartLabel": "From",
"@documentFilterDateRangeFieldStartLabel": {},
"documentFilterDateRangeLastMonthLabel": "Last Month",
"@documentFilterDateRangeLastMonthLabel": {},
"documentFilterDateRangeLastSevenDaysLabel": "Last 7 Days",
"@documentFilterDateRangeLastSevenDaysLabel": {},
"documentFilterDateRangeLastThreeMonthsLabel": "Last 3 Months",
"@documentFilterDateRangeLastThreeMonthsLabel": {},
"documentFilterDateRangeLastYearLabel": "Last Year",
"@documentFilterDateRangeLastYearLabel": {},
"documentFilterQueryOptionsAsnLabel": "ASN",
"@documentFilterQueryOptionsAsnLabel": {},
"documentFilterQueryOptionsExtendedLabel": "Extended",
"@documentFilterQueryOptionsExtendedLabel": {},
"documentFilterQueryOptionsTitleAndContentLabel": "Title & Content",
"@documentFilterQueryOptionsTitleAndContentLabel": {},
"documentFilterQueryOptionsTitleLabel": "Title",
"@documentFilterQueryOptionsTitleLabel": {},
"documentFilterResetLabel": "Reset",
"@documentFilterResetLabel": {},
"documentFilterSearchLabel": "Search",
"@documentFilterSearchLabel": {},
"documentFilterTitle": "Filter Documents",
"@documentFilterTitle": {},
"documentMetaDataChecksumLabel": "Original MD5-Checksum", "documentMetaDataChecksumLabel": "Original MD5-Checksum",
"@documentMetaDataChecksumLabel": {}, "@documentMetaDataChecksumLabel": {},
"documentMetaDataMediaFilenamePropertyLabel": "Media Filename", "documentMetaDataMediaFilenamePropertyLabel": "Media Filename",
@@ -100,6 +130,8 @@
"@documentScannerPageUploadButtonTooltip": {}, "@documentScannerPageUploadButtonTooltip": {},
"documentScannerPageUploadFromThisDeviceButtonLabel": "Upload a document from this device", "documentScannerPageUploadFromThisDeviceButtonLabel": "Upload a document from this device",
"@documentScannerPageUploadFromThisDeviceButtonLabel": {}, "@documentScannerPageUploadFromThisDeviceButtonLabel": {},
"documentsEmptyStateResetFilterLabel": "Reset filter",
"@documentsEmptyStateResetFilterLabel": {},
"documentsFilterPageAdvancedLabel": "Advanced", "documentsFilterPageAdvancedLabel": "Advanced",
"@documentsFilterPageAdvancedLabel": {}, "@documentsFilterPageAdvancedLabel": {},
"documentsFilterPageApplyFilterLabel": "Apply", "documentsFilterPageApplyFilterLabel": "Apply",
@@ -124,8 +156,6 @@
"@documentsFilterPageQueryOptionsTitleAndContentLabel": {}, "@documentsFilterPageQueryOptionsTitleAndContentLabel": {},
"documentsFilterPageQueryOptionsTitleLabel": "Title", "documentsFilterPageQueryOptionsTitleLabel": "Title",
"@documentsFilterPageQueryOptionsTitleLabel": {}, "@documentsFilterPageQueryOptionsTitleLabel": {},
"documentsFilterPageResetFilterLabel": "Reset",
"@documentsFilterPageResetFilterLabel": {},
"documentsFilterPageSearchLabel": "Search", "documentsFilterPageSearchLabel": "Search",
"@documentsFilterPageSearchLabel": {}, "@documentsFilterPageSearchLabel": {},
"documentsFilterPageTitle": "Filter Documents", "documentsFilterPageTitle": "Filter Documents",
@@ -256,7 +286,7 @@
"@genericActionSaveLabel": {}, "@genericActionSaveLabel": {},
"genericActionSelectText": "Select", "genericActionSelectText": "Select",
"@genericActionSelectText": {}, "@genericActionSelectText": {},
"genericActionUpdateLabel": "Update", "genericActionUpdateLabel": "Save changes",
"@genericActionUpdateLabel": {}, "@genericActionUpdateLabel": {},
"genericActionUploadLabel": "Upload", "genericActionUploadLabel": "Upload",
"@genericActionUploadLabel": {}, "@genericActionUploadLabel": {},
@@ -268,7 +298,7 @@
"@inboxPageMarkAllAsSeenConfirmationDialogText": {}, "@inboxPageMarkAllAsSeenConfirmationDialogText": {},
"inboxPageMarkAllAsSeenConfirmationDialogTitleText": "Mark all as seen?", "inboxPageMarkAllAsSeenConfirmationDialogTitleText": "Mark all as seen?",
"@inboxPageMarkAllAsSeenConfirmationDialogTitleText": {}, "@inboxPageMarkAllAsSeenConfirmationDialogTitleText": {},
"inboxPageMarkAllAsSeenLabel": "Mark all as seen", "inboxPageMarkAllAsSeenLabel": "All seen",
"@inboxPageMarkAllAsSeenLabel": {}, "@inboxPageMarkAllAsSeenLabel": {},
"inboxPageMarkAsSeenText": "Mark as seen", "inboxPageMarkAsSeenText": "Mark as seen",
"@inboxPageMarkAsSeenText": {}, "@inboxPageMarkAsSeenText": {},

View File

@@ -114,12 +114,15 @@ class _PaperlessMobileEntrypointState extends State<PaperlessMobileEntrypoint> {
theme: ThemeData( theme: ThemeData(
brightness: Brightness.light, brightness: Brightness.light,
useMaterial3: true, useMaterial3: true,
colorSchemeSeed: Colors.lightGreen, colorScheme:
ColorScheme.fromSeed(seedColor: Colors.lightGreen).copyWith(),
appBarTheme: const AppBarTheme( appBarTheme: const AppBarTheme(
scrolledUnderElevation: 0.0, scrolledUnderElevation: 0.0,
), ),
inputDecorationTheme: const InputDecorationTheme( inputDecorationTheme: InputDecorationTheme(
border: OutlineInputBorder(), border: OutlineInputBorder(
borderRadius: BorderRadius.circular(16),
),
contentPadding: EdgeInsets.symmetric( contentPadding: EdgeInsets.symmetric(
horizontal: 16.0, horizontal: 16.0,
vertical: 16.0, vertical: 16.0,
@@ -133,16 +136,18 @@ class _PaperlessMobileEntrypointState extends State<PaperlessMobileEntrypoint> {
brightness: Brightness.dark, brightness: Brightness.dark,
useMaterial3: true, useMaterial3: true,
colorSchemeSeed: Colors.lightGreen, colorSchemeSeed: Colors.lightGreen,
//primarySwatch: Colors.green,
appBarTheme: const AppBarTheme( appBarTheme: const AppBarTheme(
scrolledUnderElevation: 0.0, scrolledUnderElevation: 0.0,
), ),
inputDecorationTheme: const InputDecorationTheme( inputDecorationTheme: InputDecorationTheme(
border: OutlineInputBorder(), border: OutlineInputBorder(
borderRadius: BorderRadius.circular(16),
),
contentPadding: EdgeInsets.symmetric( contentPadding: EdgeInsets.symmetric(
horizontal: 16.0, horizontal: 16.0,
vertical: 16.0, vertical: 16.0,
)), ),
),
chipTheme: ChipThemeData( chipTheme: ChipThemeData(
backgroundColor: Colors.green[900], backgroundColor: Colors.green[900],
), ),
@@ -150,7 +155,8 @@ class _PaperlessMobileEntrypointState extends State<PaperlessMobileEntrypoint> {
themeMode: settings.preferredThemeMode, themeMode: settings.preferredThemeMode,
supportedLocales: S.delegate.supportedLocales, supportedLocales: S.delegate.supportedLocales,
locale: Locale.fromSubtags( locale: Locale.fromSubtags(
languageCode: settings.preferredLocaleSubtag), languageCode: settings.preferredLocaleSubtag,
),
localizationsDelegates: const [ localizationsDelegates: const [
S.delegate, S.delegate,
GlobalMaterialLocalizations.delegate, GlobalMaterialLocalizations.delegate,