2023-05-26 15:35:18 +00:00
|
|
|
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";
|
2023-05-26 15:35:18 +00:00
|
|
|
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(
|
2023-05-26 15:35:18 +00:00
|
|
|
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";
|
|
|
|
final AssetEntity? newAsset = await (PhotoManager.editor.saveImage(
|
|
|
|
compressedBytes,
|
|
|
|
title: fileName,
|
|
|
|
relativePath: "ente Collage",
|
|
|
|
));
|
|
|
|
final newFile = await File.fromAsset("ente Collage", newAsset!);
|
|
|
|
SyncService.instance.sync();
|
|
|
|
showShortToast(context, S.of(context).collageSaved);
|
|
|
|
replacePage(
|
|
|
|
context,
|
|
|
|
DetailPage(
|
|
|
|
DetailPageConfiguration([newFile], null, 0, "collage"),
|
|
|
|
),
|
2023-05-26 19:37:06 +00:00
|
|
|
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,
|
|
|
|
),
|
2023-05-26 15:35:18 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|