mirror of
https://github.com/Xevion/paperless-mobile.git
synced 2026-01-31 08:25:00 -06:00
Fixed saved view model, slightly changed sorting dialog, fixed open document in system viewer not working because file has folder-like structure.
This commit is contained in:
@@ -0,0 +1,22 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:paperless_api/paperless_api.dart';
|
||||||
|
import 'package:paperless_mobile/generated/l10n.dart';
|
||||||
|
|
||||||
|
String translateSortField(BuildContext context, SortField sortField) {
|
||||||
|
switch (sortField) {
|
||||||
|
case SortField.archiveSerialNumber:
|
||||||
|
return S.of(context).documentArchiveSerialNumberPropertyShortLabel;
|
||||||
|
case SortField.correspondentName:
|
||||||
|
return S.of(context).documentCorrespondentPropertyLabel;
|
||||||
|
case SortField.title:
|
||||||
|
return S.of(context).documentTitlePropertyLabel;
|
||||||
|
case SortField.documentType:
|
||||||
|
return S.of(context).documentDocumentTypePropertyLabel;
|
||||||
|
case SortField.created:
|
||||||
|
return S.of(context).documentCreatedPropertyLabel;
|
||||||
|
case SortField.added:
|
||||||
|
return S.of(context).documentAddedPropertyLabel;
|
||||||
|
case SortField.modified:
|
||||||
|
return S.of(context).documentModifiedPropertyLabel;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -53,7 +53,8 @@ class DocumentDetailsCubit extends Cubit<DocumentDetailsState> {
|
|||||||
final metaData = await _api.getMetaData(state.document);
|
final metaData = await _api.getMetaData(state.document);
|
||||||
final docBytes = await _api.download(state.document);
|
final docBytes = await _api.download(state.document);
|
||||||
File f = File('${downloadDir.path}/${metaData.mediaFilename}');
|
File f = File('${downloadDir.path}/${metaData.mediaFilename}');
|
||||||
f.writeAsBytes(docBytes);
|
f.createSync(recursive: true);
|
||||||
|
f.writeAsBytesSync(docBytes);
|
||||||
return OpenFilex.open(f.path, type: "application/pdf")
|
return OpenFilex.open(f.path, type: "application/pdf")
|
||||||
.then((value) => value.type);
|
.then((value) => value.type);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
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:font_awesome_flutter/font_awesome_flutter.dart';
|
||||||
import 'package:paperless_api/paperless_api.dart';
|
import 'package:paperless_api/paperless_api.dart';
|
||||||
|
import 'package:paperless_mobile/core/translation/sort_field_localization_mapper.dart';
|
||||||
import 'package:paperless_mobile/extensions/flutter_extensions.dart';
|
import 'package:paperless_mobile/extensions/flutter_extensions.dart';
|
||||||
import 'package:paperless_mobile/features/labels/bloc/label_cubit.dart';
|
import 'package:paperless_mobile/features/labels/bloc/label_cubit.dart';
|
||||||
import 'package:paperless_mobile/features/labels/bloc/label_state.dart';
|
import 'package:paperless_mobile/features/labels/bloc/label_state.dart';
|
||||||
@@ -8,9 +10,9 @@ import 'package:paperless_mobile/generated/l10n.dart';
|
|||||||
|
|
||||||
class SortFieldSelectionBottomSheet extends StatefulWidget {
|
class SortFieldSelectionBottomSheet extends StatefulWidget {
|
||||||
final SortOrder initialSortOrder;
|
final SortOrder initialSortOrder;
|
||||||
final SortField initialSortField;
|
final SortField? initialSortField;
|
||||||
|
|
||||||
final Future Function(SortField field, SortOrder order) onSubmit;
|
final Future Function(SortField? field, SortOrder order) onSubmit;
|
||||||
|
|
||||||
const SortFieldSelectionBottomSheet({
|
const SortFieldSelectionBottomSheet({
|
||||||
super.key,
|
super.key,
|
||||||
@@ -26,7 +28,7 @@ class SortFieldSelectionBottomSheet extends StatefulWidget {
|
|||||||
|
|
||||||
class _SortFieldSelectionBottomSheetState
|
class _SortFieldSelectionBottomSheetState
|
||||||
extends State<SortFieldSelectionBottomSheet> {
|
extends State<SortFieldSelectionBottomSheet> {
|
||||||
late SortField _currentSortField;
|
late SortField? _currentSortField;
|
||||||
late SortOrder _currentSortOrder;
|
late SortOrder _currentSortOrder;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -39,61 +41,90 @@ class _SortFieldSelectionBottomSheetState
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return ClipRRect(
|
return ClipRRect(
|
||||||
child: Column(
|
child: SingleChildScrollView(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
child: Column(
|
||||||
children: [
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
Row(
|
children: [
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
Row(
|
||||||
children: [
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
Text(
|
children: [
|
||||||
S.of(context).documentsPageOrderByLabel,
|
Text(
|
||||||
style: Theme.of(context).textTheme.bodySmall,
|
S.of(context).documentsPageOrderByLabel,
|
||||||
textAlign: TextAlign.start,
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
),
|
textAlign: TextAlign.start,
|
||||||
TextButton(
|
),
|
||||||
child: Text(S.of(context).documentFilterApplyFilterLabel),
|
TextButton(
|
||||||
onPressed: () {
|
child: Text(S.of(context).documentFilterApplyFilterLabel),
|
||||||
widget.onSubmit(
|
onPressed: () {
|
||||||
_currentSortField,
|
widget.onSubmit(
|
||||||
_currentSortOrder,
|
_currentSortField,
|
||||||
);
|
_currentSortOrder,
|
||||||
Navigator.pop(context);
|
);
|
||||||
},
|
Navigator.pop(context);
|
||||||
),
|
},
|
||||||
],
|
),
|
||||||
).paddedSymmetrically(horizontal: 16, vertical: 8.0),
|
],
|
||||||
Column(
|
).paddedOnly(left: 16, right: 16, top: 8),
|
||||||
children: [
|
Column(
|
||||||
_buildSortOption(SortField.archiveSerialNumber),
|
children: [
|
||||||
BlocBuilder<LabelCubit<Correspondent>, LabelState<Correspondent>>(
|
_buildSortOption(SortField.archiveSerialNumber),
|
||||||
builder: (context, state) {
|
BlocBuilder<LabelCubit<Correspondent>,
|
||||||
return _buildSortOption(
|
LabelState<Correspondent>>(
|
||||||
SortField.correspondentName,
|
builder: (context, state) {
|
||||||
enabled: state.labels.values.fold<bool>(
|
return _buildSortOption(
|
||||||
false,
|
SortField.correspondentName,
|
||||||
(previousValue, element) =>
|
enabled: state.labels.values.fold<bool>(
|
||||||
previousValue || (element.documentCount ?? 0) > 0),
|
false,
|
||||||
);
|
(previousValue, element) =>
|
||||||
},
|
previousValue ||
|
||||||
),
|
(element.documentCount ?? 0) > 0),
|
||||||
_buildSortOption(SortField.title),
|
);
|
||||||
BlocBuilder<LabelCubit<DocumentType>, LabelState<DocumentType>>(
|
},
|
||||||
builder: (context, state) {
|
),
|
||||||
return _buildSortOption(
|
_buildSortOption(SortField.title),
|
||||||
SortField.documentType,
|
BlocBuilder<LabelCubit<DocumentType>, LabelState<DocumentType>>(
|
||||||
enabled: state.labels.values.fold<bool>(
|
builder: (context, state) {
|
||||||
false,
|
return _buildSortOption(
|
||||||
(previousValue, element) =>
|
SortField.documentType,
|
||||||
previousValue || (element.documentCount ?? 0) > 0),
|
enabled: state.labels.values.fold<bool>(
|
||||||
);
|
false,
|
||||||
},
|
(previousValue, element) =>
|
||||||
),
|
previousValue ||
|
||||||
_buildSortOption(SortField.created),
|
(element.documentCount ?? 0) > 0),
|
||||||
_buildSortOption(SortField.added),
|
);
|
||||||
_buildSortOption(SortField.modified),
|
},
|
||||||
],
|
),
|
||||||
),
|
_buildSortOption(SortField.created),
|
||||||
],
|
_buildSortOption(SortField.added),
|
||||||
|
_buildSortOption(SortField.modified),
|
||||||
|
const SizedBox(height: 16),
|
||||||
|
Center(
|
||||||
|
child: SegmentedButton(
|
||||||
|
multiSelectionEnabled: false,
|
||||||
|
showSelectedIcon: false,
|
||||||
|
segments: [
|
||||||
|
ButtonSegment(
|
||||||
|
icon: const FaIcon(FontAwesomeIcons.arrowDownAZ),
|
||||||
|
value: SortOrder.descending,
|
||||||
|
label: Text(S.of(context).sortDocumentDescending),
|
||||||
|
),
|
||||||
|
ButtonSegment(
|
||||||
|
icon: const FaIcon(FontAwesomeIcons.arrowUpZA),
|
||||||
|
value: SortOrder.ascending,
|
||||||
|
label: Text(S.of(context).sortDocumentAscending),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
emptySelectionAllowed: false,
|
||||||
|
selected: {_currentSortOrder},
|
||||||
|
onSelectionChanged: (selection) {
|
||||||
|
setState(() => _currentSortOrder = selection.first);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
).paddedOnly(bottom: 16),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -101,47 +132,10 @@ class _SortFieldSelectionBottomSheetState
|
|||||||
Widget _buildSortOption(SortField field, {bool enabled = true}) {
|
Widget _buildSortOption(SortField field, {bool enabled = true}) {
|
||||||
return ListTile(
|
return ListTile(
|
||||||
enabled: enabled,
|
enabled: enabled,
|
||||||
contentPadding: const EdgeInsets.symmetric(horizontal: 32),
|
contentPadding: const EdgeInsets.only(left: 32, right: 16),
|
||||||
title: Text(
|
title: Text(translateSortField(context, field)),
|
||||||
_localizedSortField(field),
|
trailing: _currentSortField == field ? const Icon(Icons.done) : null,
|
||||||
),
|
onTap: () => setState(() => _currentSortField = field),
|
||||||
trailing: _currentSortField == field
|
|
||||||
? _buildOrderIcon(_currentSortOrder)
|
|
||||||
: null,
|
|
||||||
onTap: () {
|
|
||||||
setState(() {
|
|
||||||
_currentSortOrder = (_currentSortField == field
|
|
||||||
? _currentSortOrder.toggle()
|
|
||||||
: SortOrder.descending);
|
|
||||||
_currentSortField = field;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildOrderIcon(SortOrder order) {
|
|
||||||
if (order == SortOrder.ascending) {
|
|
||||||
return const Icon(Icons.arrow_upward);
|
|
||||||
}
|
|
||||||
return const Icon(Icons.arrow_downward);
|
|
||||||
}
|
|
||||||
|
|
||||||
String _localizedSortField(SortField sortField) {
|
|
||||||
switch (sortField) {
|
|
||||||
case SortField.archiveSerialNumber:
|
|
||||||
return S.of(context).documentArchiveSerialNumberPropertyShortLabel;
|
|
||||||
case SortField.correspondentName:
|
|
||||||
return S.of(context).documentCorrespondentPropertyLabel;
|
|
||||||
case SortField.title:
|
|
||||||
return S.of(context).documentTitlePropertyLabel;
|
|
||||||
case SortField.documentType:
|
|
||||||
return S.of(context).documentDocumentTypePropertyLabel;
|
|
||||||
case SortField.created:
|
|
||||||
return S.of(context).documentCreatedPropertyLabel;
|
|
||||||
case SortField.added:
|
|
||||||
return S.of(context).documentAddedPropertyLabel;
|
|
||||||
case SortField.modified:
|
|
||||||
return S.of(context).documentModifiedPropertyLabel;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,60 +16,55 @@ class SortDocumentsButton extends StatelessWidget {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return IconButton(
|
return IconButton(
|
||||||
icon: const Icon(Icons.sort),
|
icon: const Icon(Icons.sort),
|
||||||
onPressed: () => _onOpenSortBottomSheet(context),
|
onPressed: () {
|
||||||
);
|
showModalBottomSheet(
|
||||||
}
|
elevation: 2,
|
||||||
|
context: context,
|
||||||
void _onOpenSortBottomSheet(BuildContext context) {
|
isScrollControlled: true,
|
||||||
showModalBottomSheet(
|
shape: const RoundedRectangleBorder(
|
||||||
elevation: 2,
|
borderRadius: BorderRadius.only(
|
||||||
context: context,
|
topLeft: Radius.circular(16),
|
||||||
isScrollControlled: true,
|
topRight: Radius.circular(16),
|
||||||
shape: const RoundedRectangleBorder(
|
|
||||||
borderRadius: BorderRadius.only(
|
|
||||||
topLeft: Radius.circular(16),
|
|
||||||
topRight: Radius.circular(16),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
builder: (_) => BlocProvider<DocumentsCubit>.value(
|
|
||||||
value: context.read<DocumentsCubit>(),
|
|
||||||
child: FractionallySizedBox(
|
|
||||||
heightFactor: .6,
|
|
||||||
child: MultiBlocProvider(
|
|
||||||
providers: [
|
|
||||||
BlocProvider(
|
|
||||||
create: (context) => LabelCubit<DocumentType>(
|
|
||||||
context.read<
|
|
||||||
LabelRepository<DocumentType,
|
|
||||||
DocumentTypeRepositoryState>>(),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
BlocProvider(
|
|
||||||
create: (context) => LabelCubit<Correspondent>(
|
|
||||||
context.read<
|
|
||||||
LabelRepository<Correspondent,
|
|
||||||
CorrespondentRepositoryState>>(),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
child: BlocBuilder<DocumentsCubit, DocumentsState>(
|
|
||||||
builder: (context, state) {
|
|
||||||
return SortFieldSelectionBottomSheet(
|
|
||||||
initialSortField: state.filter.sortField,
|
|
||||||
initialSortOrder: state.filter.sortOrder,
|
|
||||||
onSubmit: (field, order) =>
|
|
||||||
context.read<DocumentsCubit>().updateCurrentFilter(
|
|
||||||
(filter) => filter.copyWith(
|
|
||||||
sortField: field,
|
|
||||||
sortOrder: order,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
builder: (_) => BlocProvider<DocumentsCubit>.value(
|
||||||
),
|
value: context.read<DocumentsCubit>(),
|
||||||
|
child: MultiBlocProvider(
|
||||||
|
providers: [
|
||||||
|
BlocProvider(
|
||||||
|
create: (context) => LabelCubit<DocumentType>(
|
||||||
|
context.read<
|
||||||
|
LabelRepository<DocumentType,
|
||||||
|
DocumentTypeRepositoryState>>(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
BlocProvider(
|
||||||
|
create: (context) => LabelCubit<Correspondent>(
|
||||||
|
context.read<
|
||||||
|
LabelRepository<Correspondent,
|
||||||
|
CorrespondentRepositoryState>>(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
child: BlocBuilder<DocumentsCubit, DocumentsState>(
|
||||||
|
builder: (context, state) {
|
||||||
|
return SortFieldSelectionBottomSheet(
|
||||||
|
initialSortField: state.filter.sortField,
|
||||||
|
initialSortOrder: state.filter.sortOrder,
|
||||||
|
onSubmit: (field, order) =>
|
||||||
|
context.read<DocumentsCubit>().updateCurrentFilter(
|
||||||
|
(filter) => filter.copyWith(
|
||||||
|
sortField: field,
|
||||||
|
sortOrder: order,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,19 +8,18 @@ import 'package:paperless_api/paperless_api.dart';
|
|||||||
import 'package:paperless_mobile/core/bloc/connectivity_cubit.dart';
|
import 'package:paperless_mobile/core/bloc/connectivity_cubit.dart';
|
||||||
import 'package:paperless_mobile/core/bloc/paperless_server_information_cubit.dart';
|
import 'package:paperless_mobile/core/bloc/paperless_server_information_cubit.dart';
|
||||||
import 'package:paperless_mobile/core/global/constants.dart';
|
import 'package:paperless_mobile/core/global/constants.dart';
|
||||||
import 'package:paperless_mobile/core/translation/error_code_localization_mapper.dart';
|
|
||||||
import 'package:paperless_mobile/core/repository/label_repository.dart';
|
import 'package:paperless_mobile/core/repository/label_repository.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/repository/state/impl/correspondent_repository_state.dart';
|
import 'package:paperless_mobile/core/repository/state/impl/correspondent_repository_state.dart';
|
||||||
import 'package:paperless_mobile/core/repository/state/impl/document_type_repository_state.dart';
|
import 'package:paperless_mobile/core/repository/state/impl/document_type_repository_state.dart';
|
||||||
import 'package:paperless_mobile/core/repository/state/impl/storage_path_repository_state.dart';
|
import 'package:paperless_mobile/core/repository/state/impl/storage_path_repository_state.dart';
|
||||||
import 'package:paperless_mobile/core/repository/state/impl/tag_repository_state.dart';
|
import 'package:paperless_mobile/core/repository/state/impl/tag_repository_state.dart';
|
||||||
|
import 'package:paperless_mobile/core/translation/error_code_localization_mapper.dart';
|
||||||
import 'package:paperless_mobile/features/document_upload/cubit/document_upload_cubit.dart';
|
import 'package:paperless_mobile/features/document_upload/cubit/document_upload_cubit.dart';
|
||||||
import 'package:paperless_mobile/features/document_upload/view/document_upload_preparation_page.dart';
|
import 'package:paperless_mobile/features/document_upload/view/document_upload_preparation_page.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/documents/view/pages/documents_page.dart';
|
import 'package:paperless_mobile/features/documents/view/pages/documents_page.dart';
|
||||||
import 'package:paperless_mobile/features/home/view/route_description.dart';
|
import 'package:paperless_mobile/features/home/view/route_description.dart';
|
||||||
import 'package:paperless_mobile/features/home/view/widget/bottom_navigation_bar.dart';
|
|
||||||
import 'package:paperless_mobile/features/home/view/widget/app_drawer.dart';
|
import 'package:paperless_mobile/features/home/view/widget/app_drawer.dart';
|
||||||
import 'package:paperless_mobile/features/labels/view/pages/labels_page.dart';
|
import 'package:paperless_mobile/features/labels/view/pages/labels_page.dart';
|
||||||
import 'package:paperless_mobile/features/notifications/services/local_notification_service.dart';
|
import 'package:paperless_mobile/features/notifications/services/local_notification_service.dart';
|
||||||
@@ -31,8 +30,8 @@ import 'package:paperless_mobile/features/sharing/share_intent_queue.dart';
|
|||||||
import 'package:paperless_mobile/features/tasks/cubit/task_status_cubit.dart';
|
import 'package:paperless_mobile/features/tasks/cubit/task_status_cubit.dart';
|
||||||
import 'package:paperless_mobile/generated/l10n.dart';
|
import 'package:paperless_mobile/generated/l10n.dart';
|
||||||
import 'package:paperless_mobile/util.dart';
|
import 'package:paperless_mobile/util.dart';
|
||||||
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
|
|
||||||
import 'package:path/path.dart' as p;
|
import 'package:path/path.dart' as p;
|
||||||
|
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
|
||||||
import 'package:responsive_builder/responsive_builder.dart';
|
import 'package:responsive_builder/responsive_builder.dart';
|
||||||
|
|
||||||
class HomePage extends StatefulWidget {
|
class HomePage extends StatefulWidget {
|
||||||
|
|||||||
@@ -1,64 +0,0 @@
|
|||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:paperless_mobile/generated/l10n.dart';
|
|
||||||
|
|
||||||
class BottomNavBar extends StatelessWidget {
|
|
||||||
final int selectedIndex;
|
|
||||||
final void Function(int) onNavigationChanged;
|
|
||||||
|
|
||||||
const BottomNavBar(
|
|
||||||
{Key? key,
|
|
||||||
required this.selectedIndex,
|
|
||||||
required this.onNavigationChanged})
|
|
||||||
: super(key: key);
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return NavigationBar(
|
|
||||||
elevation: 4.0,
|
|
||||||
onDestinationSelected: onNavigationChanged,
|
|
||||||
selectedIndex: selectedIndex,
|
|
||||||
destinations: [
|
|
||||||
NavigationDestination(
|
|
||||||
icon: const Icon(Icons.description_outlined),
|
|
||||||
selectedIcon: Icon(
|
|
||||||
Icons.description,
|
|
||||||
color: Theme.of(context).colorScheme.primary,
|
|
||||||
),
|
|
||||||
label: S.of(context).bottomNavDocumentsPageLabel,
|
|
||||||
),
|
|
||||||
NavigationDestination(
|
|
||||||
icon: const Icon(Icons.document_scanner_outlined),
|
|
||||||
selectedIcon: Icon(
|
|
||||||
Icons.document_scanner,
|
|
||||||
color: Theme.of(context).colorScheme.primary,
|
|
||||||
),
|
|
||||||
label: S.of(context).bottomNavScannerPageLabel,
|
|
||||||
),
|
|
||||||
NavigationDestination(
|
|
||||||
icon: const Icon(Icons.sell_outlined),
|
|
||||||
selectedIcon: Icon(
|
|
||||||
Icons.sell,
|
|
||||||
color: Theme.of(context).colorScheme.primary,
|
|
||||||
),
|
|
||||||
label: S.of(context).bottomNavLabelsPageLabel,
|
|
||||||
),
|
|
||||||
NavigationDestination(
|
|
||||||
icon: const Icon(Icons.inbox_outlined),
|
|
||||||
selectedIcon: Icon(
|
|
||||||
Icons.inbox,
|
|
||||||
color: Theme.of(context).colorScheme.primary,
|
|
||||||
),
|
|
||||||
label: S.of(context).bottomNavInboxPageLabel,
|
|
||||||
),
|
|
||||||
NavigationDestination(
|
|
||||||
icon: const Icon(Icons.settings_outlined),
|
|
||||||
selectedIcon: Icon(
|
|
||||||
Icons.settings,
|
|
||||||
color: Theme.of(context).colorScheme.primary,
|
|
||||||
),
|
|
||||||
label: S.of(context).appDrawerSettingsLabel,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -584,6 +584,10 @@
|
|||||||
"@settingsThemeModeLightLabel": {},
|
"@settingsThemeModeLightLabel": {},
|
||||||
"settingsThemeModeSystemLabel": "Systémový",
|
"settingsThemeModeSystemLabel": "Systémový",
|
||||||
"@settingsThemeModeSystemLabel": {},
|
"@settingsThemeModeSystemLabel": {},
|
||||||
|
"sortDocumentAscending": "Ascending",
|
||||||
|
"@sortDocumentAscending": {},
|
||||||
|
"sortDocumentDescending": "Descending",
|
||||||
|
"@sortDocumentDescending": {},
|
||||||
"storagePathParameterDayLabel": "den",
|
"storagePathParameterDayLabel": "den",
|
||||||
"@storagePathParameterDayLabel": {},
|
"@storagePathParameterDayLabel": {},
|
||||||
"storagePathParameterMonthLabel": "měsíc",
|
"storagePathParameterMonthLabel": "měsíc",
|
||||||
|
|||||||
@@ -584,6 +584,10 @@
|
|||||||
"@settingsThemeModeLightLabel": {},
|
"@settingsThemeModeLightLabel": {},
|
||||||
"settingsThemeModeSystemLabel": "System",
|
"settingsThemeModeSystemLabel": "System",
|
||||||
"@settingsThemeModeSystemLabel": {},
|
"@settingsThemeModeSystemLabel": {},
|
||||||
|
"sortDocumentAscending": "Aufsteigend",
|
||||||
|
"@sortDocumentAscending": {},
|
||||||
|
"sortDocumentDescending": "Absteigend",
|
||||||
|
"@sortDocumentDescending": {},
|
||||||
"storagePathParameterDayLabel": "Tag",
|
"storagePathParameterDayLabel": "Tag",
|
||||||
"@storagePathParameterDayLabel": {},
|
"@storagePathParameterDayLabel": {},
|
||||||
"storagePathParameterMonthLabel": "Monat",
|
"storagePathParameterMonthLabel": "Monat",
|
||||||
|
|||||||
@@ -584,6 +584,10 @@
|
|||||||
"@settingsThemeModeLightLabel": {},
|
"@settingsThemeModeLightLabel": {},
|
||||||
"settingsThemeModeSystemLabel": "System",
|
"settingsThemeModeSystemLabel": "System",
|
||||||
"@settingsThemeModeSystemLabel": {},
|
"@settingsThemeModeSystemLabel": {},
|
||||||
|
"sortDocumentAscending": "Ascending",
|
||||||
|
"@sortDocumentAscending": {},
|
||||||
|
"sortDocumentDescending": "Descending",
|
||||||
|
"@sortDocumentDescending": {},
|
||||||
"storagePathParameterDayLabel": "day",
|
"storagePathParameterDayLabel": "day",
|
||||||
"@storagePathParameterDayLabel": {},
|
"@storagePathParameterDayLabel": {},
|
||||||
"storagePathParameterMonthLabel": "month",
|
"storagePathParameterMonthLabel": "month",
|
||||||
|
|||||||
@@ -584,6 +584,10 @@
|
|||||||
"@settingsThemeModeLightLabel": {},
|
"@settingsThemeModeLightLabel": {},
|
||||||
"settingsThemeModeSystemLabel": "Sistem",
|
"settingsThemeModeSystemLabel": "Sistem",
|
||||||
"@settingsThemeModeSystemLabel": {},
|
"@settingsThemeModeSystemLabel": {},
|
||||||
|
"sortDocumentAscending": "Ascending",
|
||||||
|
"@sortDocumentAscending": {},
|
||||||
|
"sortDocumentDescending": "Descending",
|
||||||
|
"@sortDocumentDescending": {},
|
||||||
"storagePathParameterDayLabel": "gün",
|
"storagePathParameterDayLabel": "gün",
|
||||||
"@storagePathParameterDayLabel": {},
|
"@storagePathParameterDayLabel": {},
|
||||||
"storagePathParameterMonthLabel": "ay",
|
"storagePathParameterMonthLabel": "ay",
|
||||||
|
|||||||
Reference in New Issue
Block a user