Przeglądaj źródła

Fix crashes while sharing large files

Vishnu Mohandas 4 lat temu
rodzic
commit
11b61d0902

+ 12 - 0
ios/Podfile.lock

@@ -1,4 +1,6 @@
 PODS:
 PODS:
+  - background_fetch (0.5.6):
+    - Flutter
   - connectivity (0.0.1):
   - connectivity (0.0.1):
     - Flutter
     - Flutter
     - Reachability
     - Reachability
@@ -15,6 +17,8 @@ PODS:
     - Flutter
     - Flutter
     - Mantle
     - Mantle
     - SDWebImageWebPCoder
     - SDWebImageWebPCoder
+  - flutter_inappwebview (0.0.1):
+    - Flutter
   - flutter_keyboard_visibility (0.0.1):
   - flutter_keyboard_visibility (0.0.1):
     - Flutter
     - Flutter
   - flutter_secure_storage (3.3.1):
   - flutter_secure_storage (3.3.1):
@@ -76,6 +80,7 @@ PODS:
     - Flutter
     - Flutter
 
 
 DEPENDENCIES:
 DEPENDENCIES:
+  - background_fetch (from `.symlinks/plugins/background_fetch/ios`)
   - connectivity (from `.symlinks/plugins/connectivity/ios`)
   - connectivity (from `.symlinks/plugins/connectivity/ios`)
   - crisp (from `.symlinks/plugins/crisp/ios`)
   - crisp (from `.symlinks/plugins/crisp/ios`)
   - device_info (from `.symlinks/plugins/device_info/ios`)
   - device_info (from `.symlinks/plugins/device_info/ios`)
@@ -83,6 +88,7 @@ DEPENDENCIES:
   - Flutter (from `Flutter`)
   - Flutter (from `Flutter`)
   - flutter_email_sender (from `.symlinks/plugins/flutter_email_sender/ios`)
   - flutter_email_sender (from `.symlinks/plugins/flutter_email_sender/ios`)
   - flutter_image_compress (from `.symlinks/plugins/flutter_image_compress/ios`)
   - flutter_image_compress (from `.symlinks/plugins/flutter_image_compress/ios`)
+  - flutter_inappwebview (from `.symlinks/plugins/flutter_inappwebview/ios`)
   - flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`)
   - flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`)
   - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
   - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
   - flutter_sodium (from `.symlinks/plugins/flutter_sodium/ios`)
   - flutter_sodium (from `.symlinks/plugins/flutter_sodium/ios`)
@@ -113,6 +119,8 @@ SPEC REPOS:
     - Toast
     - Toast
 
 
 EXTERNAL SOURCES:
 EXTERNAL SOURCES:
+  background_fetch:
+    :path: ".symlinks/plugins/background_fetch/ios"
   connectivity:
   connectivity:
     :path: ".symlinks/plugins/connectivity/ios"
     :path: ".symlinks/plugins/connectivity/ios"
   crisp:
   crisp:
@@ -127,6 +135,8 @@ EXTERNAL SOURCES:
     :path: ".symlinks/plugins/flutter_email_sender/ios"
     :path: ".symlinks/plugins/flutter_email_sender/ios"
   flutter_image_compress:
   flutter_image_compress:
     :path: ".symlinks/plugins/flutter_image_compress/ios"
     :path: ".symlinks/plugins/flutter_image_compress/ios"
+  flutter_inappwebview:
+    :path: ".symlinks/plugins/flutter_inappwebview/ios"
   flutter_keyboard_visibility:
   flutter_keyboard_visibility:
     :path: ".symlinks/plugins/flutter_keyboard_visibility/ios"
     :path: ".symlinks/plugins/flutter_keyboard_visibility/ios"
   flutter_secure_storage:
   flutter_secure_storage:
@@ -165,6 +175,7 @@ EXTERNAL SOURCES:
     :path: ".symlinks/plugins/wakelock/ios"
     :path: ".symlinks/plugins/wakelock/ios"
 
 
 SPEC CHECKSUMS:
 SPEC CHECKSUMS:
+  background_fetch: 9e1c6c010f2bafe94108358405b7f2a08d6b5ab1
   connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467
   connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467
   crisp: 31665a818a3b0231a343d5a0d617a41d63b09646
   crisp: 31665a818a3b0231a343d5a0d617a41d63b09646
   device_info: d7d233b645a32c40dfdc212de5cf646ca482f175
   device_info: d7d233b645a32c40dfdc212de5cf646ca482f175
@@ -172,6 +183,7 @@ SPEC CHECKSUMS:
   Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
   Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
   flutter_email_sender: f787522d0e82f50e5766c1213dbffff22fdcf009
   flutter_email_sender: f787522d0e82f50e5766c1213dbffff22fdcf009
   flutter_image_compress: 082f8daaf6c1b0c9fe798251c750ef0ecd98d7ae
   flutter_image_compress: 082f8daaf6c1b0c9fe798251c750ef0ecd98d7ae
+  flutter_inappwebview: 69dfbac46157b336ffbec19ca6dfd4638c7bf189
   flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069
   flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069
   flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec
   flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec
   flutter_sodium: c84426b4de738514b5b66cfdeb8a06634e72fe0b
   flutter_sodium: c84426b4de738514b5b66cfdeb8a06634e72fe0b

+ 4 - 0
ios/Runner.xcodeproj/project.pbxproj

@@ -239,12 +239,14 @@
 				"${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
 				"${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
 				"${BUILT_PRODUCTS_DIR}/SDWebImageWebPCoder/SDWebImageWebPCoder.framework",
 				"${BUILT_PRODUCTS_DIR}/SDWebImageWebPCoder/SDWebImageWebPCoder.framework",
 				"${BUILT_PRODUCTS_DIR}/Toast/Toast.framework",
 				"${BUILT_PRODUCTS_DIR}/Toast/Toast.framework",
+				"${BUILT_PRODUCTS_DIR}/background_fetch/background_fetch.framework",
 				"${BUILT_PRODUCTS_DIR}/connectivity/connectivity.framework",
 				"${BUILT_PRODUCTS_DIR}/connectivity/connectivity.framework",
 				"${BUILT_PRODUCTS_DIR}/crisp/crisp.framework",
 				"${BUILT_PRODUCTS_DIR}/crisp/crisp.framework",
 				"${BUILT_PRODUCTS_DIR}/device_info/device_info.framework",
 				"${BUILT_PRODUCTS_DIR}/device_info/device_info.framework",
 				"${BUILT_PRODUCTS_DIR}/esys_flutter_share/esys_flutter_share.framework",
 				"${BUILT_PRODUCTS_DIR}/esys_flutter_share/esys_flutter_share.framework",
 				"${BUILT_PRODUCTS_DIR}/flutter_email_sender/flutter_email_sender.framework",
 				"${BUILT_PRODUCTS_DIR}/flutter_email_sender/flutter_email_sender.framework",
 				"${BUILT_PRODUCTS_DIR}/flutter_image_compress/flutter_image_compress.framework",
 				"${BUILT_PRODUCTS_DIR}/flutter_image_compress/flutter_image_compress.framework",
+				"${BUILT_PRODUCTS_DIR}/flutter_inappwebview/flutter_inappwebview.framework",
 				"${BUILT_PRODUCTS_DIR}/flutter_keyboard_visibility/flutter_keyboard_visibility.framework",
 				"${BUILT_PRODUCTS_DIR}/flutter_keyboard_visibility/flutter_keyboard_visibility.framework",
 				"${BUILT_PRODUCTS_DIR}/flutter_secure_storage/flutter_secure_storage.framework",
 				"${BUILT_PRODUCTS_DIR}/flutter_secure_storage/flutter_secure_storage.framework",
 				"${BUILT_PRODUCTS_DIR}/flutter_sodium/flutter_sodium.framework",
 				"${BUILT_PRODUCTS_DIR}/flutter_sodium/flutter_sodium.framework",
@@ -274,12 +276,14 @@
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageWebPCoder.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageWebPCoder.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Toast.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Toast.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/background_fetch.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/connectivity.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/connectivity.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/crisp.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/crisp.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/device_info.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/device_info.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/esys_flutter_share.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/esys_flutter_share.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_email_sender.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_email_sender.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_image_compress.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_image_compress.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_inappwebview.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_keyboard_visibility.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_keyboard_visibility.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_secure_storage.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_secure_storage.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_sodium.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_sodium.framework",

+ 1 - 1
lib/ui/detail_page.dart

@@ -160,7 +160,7 @@ class _DetailPageState extends State<DetailPage> {
       },
       },
       onSelected: (value) {
       onSelected: (value) {
         if (value == 1) {
         if (value == 1) {
-          share(context, _files[_selectedIndex]);
+          share(context, [_files[_selectedIndex]]);
         } else if (value == 2) {
         } else if (value == 2) {
           _displayInfo(_files[_selectedIndex]);
           _displayInfo(_files[_selectedIndex]);
         } else if (value == 3) {
         } else if (value == 3) {

+ 1 - 1
lib/ui/gallery_app_bar_widget.dart

@@ -224,7 +224,7 @@ class _GalleryAppBarWidgetState extends State<GalleryAppBarWidget> {
   }
   }
 
 
   void _shareSelected(BuildContext context) {
   void _shareSelected(BuildContext context) {
-    shareMultiple(context, widget.selectedFiles.files.toList());
+    share(context, widget.selectedFiles.files.toList());
   }
   }
 
 
   void _showRemoveFromCollectionSheet(BuildContext context) {
   void _showRemoveFromCollectionSheet(BuildContext context) {

+ 1 - 1
lib/ui/memories_widget.dart

@@ -233,7 +233,7 @@ class _FullScreenMemoryState extends State<FullScreenMemory> {
           IconButton(
           IconButton(
             icon: Icon(Icons.share),
             icon: Icon(Icons.share),
             onPressed: () {
             onPressed: () {
-              share(context, file);
+              share(context, [file]);
             },
             },
           ),
           ),
         ],
         ],

+ 1 - 1
lib/utils/file_util.dart

@@ -132,7 +132,7 @@ Future<io.File> getNativeFile(File file) async {
   if (file.localID == null) {
   if (file.localID == null) {
     return getFileFromServer(file);
     return getFileFromServer(file);
   } else {
   } else {
-    return file.getAsset().then((asset) => asset.file);
+    return file.getAsset().then((asset) => asset.originFile);
   }
   }
 }
 }
 
 

+ 5 - 45
lib/utils/share_util.dart

@@ -1,61 +1,21 @@
-import 'package:esys_flutter_share/esys_flutter_share.dart';
+import 'package:share/share.dart';
 import 'package:flutter/widgets.dart';
 import 'package:flutter/widgets.dart';
 import 'package:photos/models/file.dart';
 import 'package:photos/models/file.dart';
-import 'package:path/path.dart';
-import 'package:photos/models/file_type.dart';
 import 'package:photos/utils/dialog_util.dart';
 import 'package:photos/utils/dialog_util.dart';
 import 'package:photos/utils/file_util.dart';
 import 'package:photos/utils/file_util.dart';
-import 'package:progress_dialog/progress_dialog.dart';
-import 'package:share_extend/share_extend.dart';
 
 
-Future<void> share(BuildContext context, File file) async {
-  final dialog = createProgressDialog(context, "preparing...");
-  if (file.fileType == FileType.image) {
-    return _shareImage(dialog, file);
-  } else {
-    return _shareVideo(dialog, file);
-  }
-}
-
-Future<void> shareMultiple(BuildContext context, List<File> files) async {
-  if (files.length == 1) {
-    return share(context, files[0]);
-  }
+Future<void> share(BuildContext context, List<File> files) async {
   final dialog = createProgressDialog(context, "preparing...");
   final dialog = createProgressDialog(context, "preparing...");
   await dialog.show();
   await dialog.show();
   final pathFutures = List<Future<String>>();
   final pathFutures = List<Future<String>>();
   for (File file in files) {
   for (File file in files) {
     pathFutures.add(getNativeFile(file).then((file) => file.path));
     pathFutures.add(getNativeFile(file).then((file) => file.path));
   }
   }
-  final pathList = await Future.wait(pathFutures);
-  await dialog.hide();
-  return ShareExtend.shareMultiple(pathList, "image");
-}
-
-Future<void> _shareVideo(ProgressDialog dialog, File file) async {
-  await dialog.show();
-  final path = (await getNativeFile(file)).path;
+  final paths = await Future.wait(pathFutures);
   await dialog.hide();
   await dialog.hide();
-  return ShareExtend.share(path, "image");
+  return Share.shareFiles(paths);
 }
 }
 
 
 Future<void> shareText(String text) async {
 Future<void> shareText(String text) async {
-  return ShareExtend.share(text, "text");
-}
-
-Future<void> _shareImage(ProgressDialog dialog, File file) async {
-  await dialog.show();
-  final bytes = await getBytes(file);
-  final filename = _getFilename(file.title);
-  final ext = extension(filename);
-  await dialog.hide();
-  return Share.file(filename, filename, bytes, "image/" + ext);
-}
-
-String _getFilename(String name) {
-  if (name.endsWith(".HEIC")) {
-    return name.substring(0, name.lastIndexOf(".HEIC")) + ".JPG";
-  } else {
-    return name;
-  }
+  return Share.share(text);
 }
 }

+ 0 - 9
pubspec.lock

@@ -183,15 +183,6 @@ packages:
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
     version: "0.0.4"
     version: "0.0.4"
-  esys_flutter_share:
-    dependency: "direct main"
-    description:
-      path: "."
-      ref: HEAD
-      resolved-ref: "53e5080ec3c2c23d62e5791e5b75bed889295726"
-      url: "https://github.com/aeyrium/esys-flutter-share"
-    source: git
-    version: "1.0.2"
   event_bus:
   event_bus:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:

+ 0 - 3
pubspec.yaml

@@ -31,9 +31,6 @@ dependencies:
   shared_preferences: ^0.5.6
   shared_preferences: ^0.5.6
   dio: ^3.0.9
   dio: ^3.0.9
   image: ^2.1.4
   image: ^2.1.4
-  esys_flutter_share:
-    git:
-      url: https://github.com/aeyrium/esys-flutter-share
   share_extend: ^1.1.9
   share_extend: ^1.1.9
   share: ^0.6.5+4
   share: ^0.6.5+4
   draggable_scrollbar: ^0.0.4
   draggable_scrollbar: ^0.0.4