ente/lib/ui/tools/collage/collage_save_button.dart
2023-05-27 11:39:38 +05:30

76 lines
2.6 KiB
Dart

import "package:flutter/widgets.dart";
import "package:flutter_image_compress/flutter_image_compress.dart";
import "package:logging/logging.dart";
import "package:photo_manager/photo_manager.dart";
import "package:photos/generated/l10n.dart";
import "package:photos/models/file.dart";
import "package:photos/services/sync_service.dart";
import "package:photos/ui/components/buttons/button_widget.dart";
import "package:photos/ui/components/models/button_type.dart";
import "package:photos/ui/viewer/file/detail_page.dart";
import "package:photos/utils/navigation_util.dart";
import "package:photos/utils/toast_util.dart";
import "package:widgets_to_image/widgets_to_image.dart";
class SaveCollageButton extends StatelessWidget {
final _logger = Logger("SaveCollageButton");
SaveCollageButton(
this.controller, {
super.key,
});
final WidgetsToImageController controller;
@override
Widget build(BuildContext context) {
return SafeArea(
child: ButtonWidget(
buttonType: ButtonType.neutral,
labelText: S.of(context).saveCollage,
onTap: () async {
try {
final bytes = await controller.capture();
_logger.info('Size before compression = ${bytes!.length}');
final compressedBytes = await FlutterImageCompress.compressWithList(
bytes,
quality: 80,
);
_logger.info('Size after compression = ${compressedBytes.length}');
final fileName = "ente_collage_" +
DateTime.now().microsecondsSinceEpoch.toString() +
".jpeg";
AssetEntity? newAsset = await (PhotoManager.editor.saveImage(
compressedBytes,
title: fileName,
relativePath: "ente Collages",
));
newAsset ??= await (PhotoManager.editor.saveImage(
compressedBytes,
title: fileName,
));
if (newAsset == null) {
showShortToast(context, S.of(context).fileFailedToSaveToGallery);
return;
}
final newFile = await File.fromAsset("ente Collages", newAsset);
SyncService.instance.sync();
showShortToast(context, S.of(context).collageSaved);
replacePage(
context,
DetailPage(
DetailPageConfiguration([newFile], null, 0, "collage"),
),
result: true,
);
} catch (e, s) {
_logger.severe(e, s);
showShortToast(context, S.of(context).somethingWentWrong);
}
},
shouldSurfaceExecutionStates: true,
),
);
}
}