Fix crashes while sharing large files
This commit is contained in:
parent
8c5ba762e8
commit
11b61d0902
9 changed files with 25 additions and 61 deletions
|
@ -1,4 +1,6 @@
|
|||
PODS:
|
||||
- background_fetch (0.5.6):
|
||||
- Flutter
|
||||
- connectivity (0.0.1):
|
||||
- Flutter
|
||||
- Reachability
|
||||
|
@ -15,6 +17,8 @@ PODS:
|
|||
- Flutter
|
||||
- Mantle
|
||||
- SDWebImageWebPCoder
|
||||
- flutter_inappwebview (0.0.1):
|
||||
- Flutter
|
||||
- flutter_keyboard_visibility (0.0.1):
|
||||
- Flutter
|
||||
- flutter_secure_storage (3.3.1):
|
||||
|
@ -76,6 +80,7 @@ PODS:
|
|||
- Flutter
|
||||
|
||||
DEPENDENCIES:
|
||||
- background_fetch (from `.symlinks/plugins/background_fetch/ios`)
|
||||
- connectivity (from `.symlinks/plugins/connectivity/ios`)
|
||||
- crisp (from `.symlinks/plugins/crisp/ios`)
|
||||
- device_info (from `.symlinks/plugins/device_info/ios`)
|
||||
|
@ -83,6 +88,7 @@ DEPENDENCIES:
|
|||
- Flutter (from `Flutter`)
|
||||
- flutter_email_sender (from `.symlinks/plugins/flutter_email_sender/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_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
|
||||
- flutter_sodium (from `.symlinks/plugins/flutter_sodium/ios`)
|
||||
|
@ -113,6 +119,8 @@ SPEC REPOS:
|
|||
- Toast
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
background_fetch:
|
||||
:path: ".symlinks/plugins/background_fetch/ios"
|
||||
connectivity:
|
||||
:path: ".symlinks/plugins/connectivity/ios"
|
||||
crisp:
|
||||
|
@ -127,6 +135,8 @@ EXTERNAL SOURCES:
|
|||
:path: ".symlinks/plugins/flutter_email_sender/ios"
|
||||
flutter_image_compress:
|
||||
:path: ".symlinks/plugins/flutter_image_compress/ios"
|
||||
flutter_inappwebview:
|
||||
:path: ".symlinks/plugins/flutter_inappwebview/ios"
|
||||
flutter_keyboard_visibility:
|
||||
:path: ".symlinks/plugins/flutter_keyboard_visibility/ios"
|
||||
flutter_secure_storage:
|
||||
|
@ -165,6 +175,7 @@ EXTERNAL SOURCES:
|
|||
:path: ".symlinks/plugins/wakelock/ios"
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
background_fetch: 9e1c6c010f2bafe94108358405b7f2a08d6b5ab1
|
||||
connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467
|
||||
crisp: 31665a818a3b0231a343d5a0d617a41d63b09646
|
||||
device_info: d7d233b645a32c40dfdc212de5cf646ca482f175
|
||||
|
@ -172,6 +183,7 @@ SPEC CHECKSUMS:
|
|||
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
|
||||
flutter_email_sender: f787522d0e82f50e5766c1213dbffff22fdcf009
|
||||
flutter_image_compress: 082f8daaf6c1b0c9fe798251c750ef0ecd98d7ae
|
||||
flutter_inappwebview: 69dfbac46157b336ffbec19ca6dfd4638c7bf189
|
||||
flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069
|
||||
flutter_secure_storage: 7953c38a04c3fdbb00571bcd87d8e3b5ceb9daec
|
||||
flutter_sodium: c84426b4de738514b5b66cfdeb8a06634e72fe0b
|
||||
|
|
|
@ -239,12 +239,14 @@
|
|||
"${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/SDWebImageWebPCoder/SDWebImageWebPCoder.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/Toast/Toast.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/background_fetch/background_fetch.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/connectivity/connectivity.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/crisp/crisp.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/device_info/device_info.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_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_secure_storage/flutter_secure_storage.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}/SDWebImageWebPCoder.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}/crisp.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}/flutter_email_sender.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_secure_storage.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_sodium.framework",
|
||||
|
|
|
@ -160,7 +160,7 @@ class _DetailPageState extends State<DetailPage> {
|
|||
},
|
||||
onSelected: (value) {
|
||||
if (value == 1) {
|
||||
share(context, _files[_selectedIndex]);
|
||||
share(context, [_files[_selectedIndex]]);
|
||||
} else if (value == 2) {
|
||||
_displayInfo(_files[_selectedIndex]);
|
||||
} else if (value == 3) {
|
||||
|
|
|
@ -224,7 +224,7 @@ class _GalleryAppBarWidgetState extends State<GalleryAppBarWidget> {
|
|||
}
|
||||
|
||||
void _shareSelected(BuildContext context) {
|
||||
shareMultiple(context, widget.selectedFiles.files.toList());
|
||||
share(context, widget.selectedFiles.files.toList());
|
||||
}
|
||||
|
||||
void _showRemoveFromCollectionSheet(BuildContext context) {
|
||||
|
|
|
@ -233,7 +233,7 @@ class _FullScreenMemoryState extends State<FullScreenMemory> {
|
|||
IconButton(
|
||||
icon: Icon(Icons.share),
|
||||
onPressed: () {
|
||||
share(context, file);
|
||||
share(context, [file]);
|
||||
},
|
||||
),
|
||||
],
|
||||
|
|
|
@ -132,7 +132,7 @@ Future<io.File> getNativeFile(File file) async {
|
|||
if (file.localID == null) {
|
||||
return getFileFromServer(file);
|
||||
} else {
|
||||
return file.getAsset().then((asset) => asset.file);
|
||||
return file.getAsset().then((asset) => asset.originFile);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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: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/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...");
|
||||
await dialog.show();
|
||||
final pathFutures = List<Future<String>>();
|
||||
for (File file in files) {
|
||||
pathFutures.add(getNativeFile(file).then((file) => file.path));
|
||||
}
|
||||
final pathList = await Future.wait(pathFutures);
|
||||
final paths = 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;
|
||||
await dialog.hide();
|
||||
return ShareExtend.share(path, "image");
|
||||
return Share.shareFiles(paths);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -183,15 +183,6 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
|
@ -31,9 +31,6 @@ dependencies:
|
|||
shared_preferences: ^0.5.6
|
||||
dio: ^3.0.9
|
||||
image: ^2.1.4
|
||||
esys_flutter_share:
|
||||
git:
|
||||
url: https://github.com/aeyrium/esys-flutter-share
|
||||
share_extend: ^1.1.9
|
||||
share: ^0.6.5+4
|
||||
draggable_scrollbar: ^0.0.4
|
||||
|
|
Loading…
Reference in a new issue