Added receive_sharing_intent

This commit is contained in:
Anton Stubenbord
2022-11-11 00:38:11 +01:00
parent dfbc05b4b3
commit c4104e75a7
8 changed files with 90 additions and 7 deletions

View File

@@ -1,7 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:paperless_mobile/core/logic/error_code_localization_mapper.dart';
import 'package:paperless_mobile/core/model/error_message.dart';
import 'package:paperless_mobile/core/widgets/empty_state.dart';
import 'package:paperless_mobile/extensions/flutter_extensions.dart';
import 'package:paperless_mobile/features/documents/bloc/documents_cubit.dart';

View File

@@ -7,7 +7,6 @@ import 'package:paperless_mobile/core/widgets/offline_banner.dart';
import 'package:paperless_mobile/di_initializer.dart';
import 'package:paperless_mobile/features/documents/bloc/documents_cubit.dart';
import 'package:paperless_mobile/features/documents/bloc/saved_view_cubit.dart';
import 'package:paperless_mobile/features/documents/model/saved_view.model.dart';
import 'package:paperless_mobile/features/documents/view/pages/documents_page.dart';
import 'package:paperless_mobile/features/home/view/widget/bottom_navigation_bar.dart';
import 'package:paperless_mobile/features/home/view/widget/info_drawer.dart';

View File

@@ -1,3 +1,4 @@
import 'package:flutter/foundation.dart';
import 'package:paperless_mobile/core/bloc/label_cubit.dart';
import 'package:paperless_mobile/features/labels/document_type/model/document_type.model.dart';
import 'package:injectable/injectable.dart';
@@ -8,7 +9,7 @@ class DocumentTypeCubit extends LabelCubit<DocumentType> {
@override
Future<void> initialize() async {
return labelRepository.getDocumentTypes().then(loadFrom);
labelRepository.getDocumentTypes().then(loadFrom);
}
@override

View File

@@ -30,10 +30,11 @@ import 'package:intl/intl.dart';
class DocumentUploadPage extends StatefulWidget {
final Uint8List fileBytes;
final void Function()? afterUpload;
const DocumentUploadPage({
Key? key,
required this.fileBytes,
this.afterUpload,
}) : super(key: key);
@override
@@ -221,6 +222,7 @@ class _DocumentUploadPageState extends State<DocumentUploadPage> {
.ids,
createdAt: (_formKey.currentState?.value[DocumentModel.createdKey]
as DateTime?),
propagateEventOnError: false,
);
setState(() {
_isUploadLoading = false;
@@ -228,6 +230,7 @@ class _DocumentUploadPageState extends State<DocumentUploadPage> {
getIt<DocumentScannerCubit>().reset();
Navigator.pop(context);
showSnackBar(context, S.of(context).documentUploadSuccessText);
widget.afterUpload?.call();
} on ErrorMessage catch (error) {
showError(context, error);
} on PaperlessValidationErrors catch (errorMessages) {

View File

@@ -1,6 +1,8 @@
import 'dart:developer';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_native_splash/flutter_native_splash.dart';
@@ -11,9 +13,11 @@ import 'package:paperless_mobile/core/global/asset_images.dart';
import 'package:paperless_mobile/core/global/http_self_signed_certificate_override.dart';
import 'package:paperless_mobile/di_initializer.dart';
import 'package:paperless_mobile/features/app_intro/application_intro_slideshow.dart';
import 'package:paperless_mobile/features/documents/bloc/documents_cubit.dart';
import 'package:paperless_mobile/features/home/view/home_page.dart';
import 'package:paperless_mobile/features/login/bloc/authentication_cubit.dart';
import 'package:paperless_mobile/features/login/view/login_page.dart';
import 'package:paperless_mobile/features/scan/view/document_upload_page.dart';
import 'package:paperless_mobile/features/settings/bloc/application_settings_cubit.dart';
import 'package:paperless_mobile/features/settings/model/application_settings_state.dart';
import 'package:paperless_mobile/generated/l10n.dart';
@@ -23,6 +27,7 @@ import 'package:intl/intl.dart';
import 'package:intl/intl_standalone.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:path_provider/path_provider.dart';
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
void main() async {
final widgetsBinding = WidgetsFlutterBinding.ensureInitialized();
@@ -125,6 +130,53 @@ class AuthenticationWrapper extends StatefulWidget {
}
class _AuthenticationWrapperState extends State<AuthenticationWrapper> {
@override
void initState() {
super.initState();
// For sharing files coming from outside the app while the app is still opened
ReceiveSharingIntent.getMediaStream().listen((List<SharedMediaFile> value) {
final bytes = File(value.first.path).readAsBytesSync();
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BlocProvider.value(
value: getIt<DocumentsCubit>(),
child: LabelBlocProvider(
child: DocumentUploadPage(
fileBytes: bytes,
afterUpload: () => SystemNavigator.pop(),
),
),
),
),
);
}, onError: (err) {
log(err);
});
// For sharing files coming from outside the app while the app is closed
ReceiveSharingIntent.getInitialMedia().then((List<SharedMediaFile> value) {
if (value.isEmpty) {
return;
}
final bytes = File(value.first.path).readAsBytesSync();
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BlocProvider.value(
value: getIt<DocumentsCubit>(),
child: LabelBlocProvider(
child: DocumentUploadPage(
fileBytes: bytes,
afterUpload: () => SystemNavigator.pop(),
),
),
),
),
);
});
}
@override
void didChangeDependencies() {
FlutterNativeSplash.remove();