Add option to save the collage
This commit is contained in:
parent
acbd396e23
commit
ca82d9ec1d
6 changed files with 85 additions and 3 deletions
3
lib/generated/intl/messages_en.dart
generated
3
lib/generated/intl/messages_en.dart
generated
|
@ -385,6 +385,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||
"collaboratorsCanAddPhotosAndVideosToTheSharedAlbum":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Collaborators can add photos and videos to the shared album."),
|
||||
"collageSaved":
|
||||
MessageLookupByLibrary.simpleMessage("Collage saved to gallery"),
|
||||
"collectEventPhotos":
|
||||
MessageLookupByLibrary.simpleMessage("Collect event photos"),
|
||||
"collectPhotos": MessageLookupByLibrary.simpleMessage("Collect photos"),
|
||||
|
@ -988,6 +990,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||
"rotateRight": MessageLookupByLibrary.simpleMessage("Rotate right"),
|
||||
"safelyStored": MessageLookupByLibrary.simpleMessage("Safely stored"),
|
||||
"save": MessageLookupByLibrary.simpleMessage("Save"),
|
||||
"saveCollage": MessageLookupByLibrary.simpleMessage("Save collage"),
|
||||
"saveCopy": MessageLookupByLibrary.simpleMessage("Save copy"),
|
||||
"saveKey": MessageLookupByLibrary.simpleMessage("Save key"),
|
||||
"saveYourRecoveryKeyIfYouHaventAlready":
|
||||
|
|
20
lib/generated/l10n.dart
generated
20
lib/generated/l10n.dart
generated
|
@ -4865,6 +4865,26 @@ class S {
|
|||
);
|
||||
}
|
||||
|
||||
/// `Save collage`
|
||||
String get saveCollage {
|
||||
return Intl.message(
|
||||
'Save collage',
|
||||
name: 'saveCollage',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Collage saved to gallery`
|
||||
String get collageSaved {
|
||||
return Intl.message(
|
||||
'Collage saved to gallery',
|
||||
name: 'collageSaved',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Add to ente`
|
||||
String get addToEnte {
|
||||
return Intl.message(
|
||||
|
|
|
@ -688,6 +688,8 @@
|
|||
"removeFromFavorite": "Remove from favorite",
|
||||
"shareLink": "Share link",
|
||||
"createCollage": "Create collage",
|
||||
"saveCollage": "Save collage",
|
||||
"collageSaved": "Collage saved to gallery",
|
||||
"addToEnte": "Add to ente",
|
||||
"addToAlbum": "Add to album",
|
||||
"delete": "Delete",
|
||||
|
|
|
@ -1,9 +1,18 @@
|
|||
import "package:flutter/material.dart";
|
||||
import "package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart";
|
||||
import "package:logging/logging.dart";
|
||||
import "package:photo_manager/photo_manager.dart";
|
||||
import "package:photos/core/event_bus.dart";
|
||||
import "package:photos/db/files_db.dart";
|
||||
import "package:photos/events/local_photos_updated_event.dart";
|
||||
import "package:photos/generated/l10n.dart";
|
||||
import "package:photos/models/file.dart";
|
||||
import "package:photos/services/sync_service.dart";
|
||||
import "package:photos/ui/viewer/file/detail_page.dart";
|
||||
import "package:photos/ui/viewer/file/zoomable_image.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 CreateCollagePage extends StatefulWidget {
|
||||
final List<File> files;
|
||||
|
@ -16,6 +25,7 @@ class CreateCollagePage extends StatefulWidget {
|
|||
|
||||
class _CreateCollagePageState extends State<CreateCollagePage> {
|
||||
final _logger = Logger("CreateCollagePage");
|
||||
final _widgetsToImageController = WidgetsToImageController();
|
||||
bool _isLayoutVertical = false;
|
||||
|
||||
@override
|
||||
|
@ -35,9 +45,10 @@ class _CreateCollagePageState extends State<CreateCollagePage> {
|
|||
Widget _getBody() {
|
||||
return Column(
|
||||
children: [
|
||||
_isLayoutVertical
|
||||
? VerticalSplit(widget.files[0], widget.files[1])
|
||||
: HorizontalSplit(widget.files[0], widget.files[1]),
|
||||
WidgetsToImage(
|
||||
controller: _widgetsToImageController,
|
||||
child: _getCollage(),
|
||||
),
|
||||
const SizedBox(
|
||||
height: 24,
|
||||
),
|
||||
|
@ -61,11 +72,48 @@ class _CreateCollagePageState extends State<CreateCollagePage> {
|
|||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
const SizedBox(
|
||||
height: 24,
|
||||
),
|
||||
TextButton(
|
||||
onPressed: _onSaveClicked,
|
||||
child: Text(S.of(context).saveCollage),
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _onSaveClicked() async {
|
||||
final bytes = await _widgetsToImageController.capture();
|
||||
final fileName = "ente_collage_" +
|
||||
DateTime.now().microsecondsSinceEpoch.toString() +
|
||||
".jpeg";
|
||||
//Disabling notifications for assets changing to insert the file into
|
||||
//files db before triggering a sync.
|
||||
PhotoManager.stopChangeNotify();
|
||||
final AssetEntity? newAsset =
|
||||
await (PhotoManager.editor.saveImage(bytes!, title: fileName));
|
||||
final newFile = await File.fromAsset('', newAsset!);
|
||||
newFile.generatedID = await FilesDB.instance.insert(newFile);
|
||||
Bus.instance
|
||||
.fire(LocalPhotosUpdatedEvent([newFile], source: "collageSave"));
|
||||
SyncService.instance.sync();
|
||||
showShortToast(context, S.of(context).collageSaved);
|
||||
replacePage(
|
||||
context,
|
||||
DetailPage(
|
||||
DetailPageConfiguration([newFile], null, 0, "collage"),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _getCollage() {
|
||||
return _isLayoutVertical
|
||||
? VerticalSplit(widget.files[0], widget.files[1])
|
||||
: HorizontalSplit(widget.files[0], widget.files[1]);
|
||||
}
|
||||
|
||||
Widget _getGrid() {
|
||||
return const TestGrid();
|
||||
}
|
||||
|
|
|
@ -2121,6 +2121,14 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
widgets_to_image:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: widgets_to_image
|
||||
sha256: e32c7b77267c01d319dc97333d4f3d894e9d81c8b3a408fd33862fa7775ee398
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.0.2"
|
||||
win32:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
|
@ -130,6 +130,7 @@ dependencies:
|
|||
visibility_detector: ^0.3.3
|
||||
wakelock: ^0.6.1+2
|
||||
wallpaper_manager_flutter: ^0.0.2
|
||||
widgets_to_image: ^0.0.2
|
||||
|
||||
flutter_intl:
|
||||
enabled: true
|
||||
|
|
Loading…
Add table
Reference in a new issue