ente/lib/ui/tools/collage/collage_save_button.dart

72 lines
2.5 KiB
Dart
Raw Normal View History

import "package:flutter/widgets.dart";
2023-05-26 18:54:01 +00:00
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 {
2023-05-26 19:26:52 +00:00
final _logger = Logger("SaveCollageButton");
SaveCollageButton(
this.controller, {
super.key,
});
final WidgetsToImageController controller;
@override
Widget build(BuildContext context) {
2023-05-26 17:28:29 +00:00
return SafeArea(
child: ButtonWidget(
buttonType: ButtonType.neutral,
labelText: S.of(context).saveCollage,
onTap: () async {
2023-05-26 19:26:52 +00:00
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(
2023-05-26 19:26:52 +00:00
compressedBytes,
title: fileName,
2023-05-26 19:55:08 +00:00
relativePath: "ente Collages",
2023-05-26 19:26:52 +00:00
));
newAsset ??= await (PhotoManager.editor.saveImage(
compressedBytes,
title: fileName,
));
2023-05-26 19:55:08 +00:00
final newFile = await File.fromAsset("ente Collages", newAsset!);
2023-05-26 19:26:52 +00:00
SyncService.instance.sync();
showShortToast(context, S.of(context).collageSaved);
replacePage(
context,
DetailPage(
DetailPageConfiguration([newFile], null, 0, "collage"),
),
result: true,
2023-05-26 19:26:52 +00:00
);
} catch (e, s) {
_logger.severe(e, s);
showShortToast(context, S.of(context).somethingWentWrong);
}
2023-05-26 17:28:29 +00:00
},
shouldSurfaceExecutionStates: true,
),
);
}
}