share_util.dart 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import 'package:esys_flutter_share/esys_flutter_share.dart';
  2. import 'package:flutter/widgets.dart';
  3. import 'package:photos/models/file.dart';
  4. import 'package:path/path.dart';
  5. import 'package:photos/models/file_type.dart';
  6. import 'package:photos/utils/dialog_util.dart';
  7. import 'package:photos/utils/file_util.dart';
  8. import 'package:progress_dialog/progress_dialog.dart';
  9. import 'package:share_extend/share_extend.dart';
  10. Future<void> share(BuildContext context, File file) async {
  11. final dialog = createProgressDialog(context, "Preparing...");
  12. if (file.fileType == FileType.image) {
  13. return _shareImage(dialog, file);
  14. } else {
  15. return _shareVideo(dialog, file);
  16. }
  17. }
  18. Future<void> shareMultiple(BuildContext context, List<File> files) async {
  19. if (files.length == 1) {
  20. return share(context, files[0]);
  21. }
  22. final dialog = createProgressDialog(context, "Preparing...");
  23. await dialog.show();
  24. final pathList = List<String>();
  25. for (File file in files) {
  26. pathList.add((await getNativeFile(file)).path);
  27. }
  28. await dialog.hide();
  29. return ShareExtend.shareMultiple(pathList, "image");
  30. }
  31. Future<void> _shareVideo(ProgressDialog dialog, File file) async {
  32. await dialog.show();
  33. final path = (await getNativeFile(file)).path;
  34. await dialog.hide();
  35. return ShareExtend.share(path, "image");
  36. }
  37. Future<void> _shareImage(ProgressDialog dialog, File file) async {
  38. await dialog.show();
  39. final bytes = await getBytes(file);
  40. final filename = _getFilename(file.title);
  41. final ext = extension(file.title);
  42. final shareExt = file.title.endsWith(".HEIC")
  43. ? "jpg"
  44. : ext.substring(1, ext.length).toLowerCase();
  45. await dialog.hide();
  46. return Share.file(filename, filename, bytes, "image/" + shareExt);
  47. }
  48. String _getFilename(String name) {
  49. if (name.endsWith(".HEIC")) {
  50. return name.substring(0, name.lastIndexOf(".HEIC")) + ".JPG";
  51. } else {
  52. return name;
  53. }
  54. }