diff --git a/lib/core/navigation/push_routes.dart b/lib/core/navigation/push_routes.dart index fbae8a3..02f296d 100644 --- a/lib/core/navigation/push_routes.dart +++ b/lib/core/navigation/push_routes.dart @@ -1,3 +1,5 @@ +import 'dart:typed_data'; + import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_cache_manager/flutter_cache_manager.dart'; @@ -13,8 +15,11 @@ import 'package:paperless_mobile/core/repository/user_repository.dart'; import 'package:paperless_mobile/features/document_bulk_action/cubit/document_bulk_action_cubit.dart'; import 'package:paperless_mobile/features/document_bulk_action/view/widgets/fullscreen_bulk_edit_label_page.dart'; import 'package:paperless_mobile/features/document_bulk_action/view/widgets/fullscreen_bulk_edit_tags_widget.dart'; +import 'package:paperless_mobile/features/document_scan/view/scanner_page.dart'; import 'package:paperless_mobile/features/document_search/cubit/document_search_cubit.dart'; import 'package:paperless_mobile/features/document_search/view/document_search_page.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/home/view/model/api_version.dart'; import 'package:paperless_mobile/features/linked_documents/cubit/linked_documents_cubit.dart'; import 'package:paperless_mobile/features/linked_documents/view/linked_documents_page.dart'; @@ -322,6 +327,39 @@ Future pushBulkEditDocumentTypeRoute(BuildContext context, ); } +Future pushDocumentUploadPreparationPage( + BuildContext context, { + required Uint8List bytes, + String? filename, + String? fileExtension, + String? title, +}) { + final labelRepo = context.read(); + final docsApi = context.read(); + return Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => MultiProvider( + providers: [ + Provider.value(value: labelRepo), + Provider.value(value: docsApi), + ], + builder: (_, child) => BlocProvider( + create: (_) => DocumentUploadCubit( + context.read(), + context.read(), + ), + child: DocumentUploadPreparationPage( + fileBytes: bytes, + fileExtension: fileExtension, + filename: filename, + title: title, + ), + ), + ), + ), + ); +} + List _getRequiredBulkEditProviders(BuildContext context) { return [ Provider.value(value: context.read()), diff --git a/lib/features/app_drawer/view/app_drawer.dart b/lib/features/app_drawer/view/app_drawer.dart index fb58374..16d8f36 100644 --- a/lib/features/app_drawer/view/app_drawer.dart +++ b/lib/features/app_drawer/view/app_drawer.dart @@ -1,3 +1,4 @@ +import 'package:flutter/cupertino.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -105,6 +106,8 @@ class AppDrawer extends StatelessWidget { } void _showAboutDialog(BuildContext context) { + final theme = Theme.of(context); + final colorScheme = theme.colorScheme; showAboutDialog( context: context, applicationIcon: const ImageIcon( @@ -117,10 +120,11 @@ class AppDrawer extends StatelessWidget { const SizedBox(height: 16), Text( "Source Code", - style: Theme.of(context).textTheme.titleMedium, + style: theme.textTheme.titleMedium, ), RichText( text: TextSpan( + style: theme.textTheme.bodyMedium?.copyWith(color: colorScheme.onSurface), children: [ TextSpan( text: S.of(context)!.findTheSourceCodeOn, @@ -143,9 +147,30 @@ class AppDrawer extends StatelessWidget { const SizedBox(height: 16), Text( 'Credits', - style: Theme.of(context).textTheme.titleMedium, + style: theme.textTheme.titleMedium?.copyWith(color: colorScheme.onSurface), + ), + RichText( + text: TextSpan( + style: theme.textTheme.bodyMedium?.copyWith(color: colorScheme.onSurface), + children: [ + const TextSpan( + text: 'Onboarding images by ', + ), + TextSpan( + text: 'pch.vector', + style: const TextStyle(color: Colors.blue), + recognizer: TapGestureRecognizer() + ..onTap = () { + launchUrlString( + 'https://www.freepik.com/free-vector/business-team-working-cogwheel-mechanism-together_8270974.htm#query=setting&position=4&from_view=author'); + }, + ), + const TextSpan( + text: ' on Freepik.', + ), + ], + ), ), - _buildOnboardingImageCredits(), ], ); } diff --git a/lib/features/document_scan/view/scanner_page.dart b/lib/features/document_scan/view/scanner_page.dart index d396903..c4426a2 100644 --- a/lib/features/document_scan/view/scanner_page.dart +++ b/lib/features/document_scan/view/scanner_page.dart @@ -11,6 +11,7 @@ import 'package:paperless_api/paperless_api.dart'; import 'package:paperless_mobile/core/bloc/connectivity_cubit.dart'; import 'package:paperless_mobile/core/delegate/customizable_sliver_persistent_header_delegate.dart'; import 'package:paperless_mobile/core/global/constants.dart'; +import 'package:paperless_mobile/core/navigation/push_routes.dart'; import 'package:paperless_mobile/core/service/file_description.dart'; import 'package:paperless_mobile/core/service/file_service.dart'; import 'package:paperless_mobile/features/app_drawer/view/app_drawer.dart'; @@ -189,19 +190,10 @@ class _ScannerPageState extends State with SingleTickerProviderStat final file = await _assembleFileBytes( context.read().state, ); - final uploadResult = await Navigator.of(context).push( - MaterialPageRoute( - builder: (_) => BlocProvider( - create: (_) => DocumentUploadCubit( - context.read(), - context.read(), - ), - child: DocumentUploadPreparationPage( - fileBytes: file.bytes, - fileExtension: file.extension, - ), - ), - ), + final uploadResult = await pushDocumentUploadPreparationPage( + context, + bytes: file.bytes, + fileExtension: file.extension, ); if ((uploadResult?.success ?? false) && uploadResult?.taskId != null) { // For paperless version older than 1.11.3, task id will always be null! @@ -299,21 +291,12 @@ class _ScannerPageState extends State with SingleTickerProviderStat ); return; } - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) => BlocProvider( - create: (context) => DocumentUploadCubit( - context.read(), - context.read(), - ), - child: DocumentUploadPreparationPage( - fileBytes: file.readAsBytesSync(), - filename: fileDescription.filename, - title: fileDescription.filename, - fileExtension: fileDescription.extension, - ), - ), - ), + pushDocumentUploadPreparationPage( + context, + bytes: file.readAsBytesSync(), + filename: fileDescription.filename, + title: fileDescription.filename, + fileExtension: fileDescription.extension, ); } } diff --git a/lib/features/document_search/view/document_search_bar.dart b/lib/features/document_search/view/document_search_bar.dart index 85f591b..1150d1e 100644 --- a/lib/features/document_search/view/document_search_bar.dart +++ b/lib/features/document_search/view/document_search_bar.dart @@ -28,6 +28,7 @@ class _DocumentSearchBarState extends State { @override Widget build(BuildContext context) { return OpenContainer( + transitionDuration: const Duration(milliseconds: 200), transitionType: ContainerTransitionType.fadeThrough, closedElevation: 1, middleColor: Theme.of(context).colorScheme.surfaceVariant,