💄 Optimize share as image
This commit is contained in:
parent
65c6083640
commit
0b8a5a3303
@ -484,5 +484,5 @@
|
|||||||
"authMaximumAuthStepsDesc": "The maximum number of authentication steps when logging in, higher value is more secure, lower value is more convenient; default is 2",
|
"authMaximumAuthStepsDesc": "The maximum number of authentication steps when logging in, higher value is more secure, lower value is more convenient; default is 2",
|
||||||
"auditLog": "Audit log",
|
"auditLog": "Audit log",
|
||||||
"shareImage": "Share as image",
|
"shareImage": "Share as image",
|
||||||
"shareImageFooter": "See more interesting posts on Solar Network"
|
"shareImageFooter": "Only on the Solar Network"
|
||||||
}
|
}
|
||||||
|
@ -89,10 +89,25 @@ class _PostActionState extends State<PostAction> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _shareImage() async {
|
Future<void> _shareImage() async {
|
||||||
|
final List<String> attachments = widget.item.body['attachments'] is List
|
||||||
|
? List.from(widget.item.body['attachments']?.whereType<String>())
|
||||||
|
: List.empty();
|
||||||
|
final hasAttachment = attachments.isNotEmpty;
|
||||||
|
|
||||||
final screenshot = ScreenshotController();
|
final screenshot = ScreenshotController();
|
||||||
final image = await screenshot.captureFromWidget(
|
final image = await screenshot.captureFromLongWidget(
|
||||||
PostShareImage(item: widget.item),
|
MediaQuery(
|
||||||
|
data: MediaQuery.of(context),
|
||||||
|
child: PostShareImage(item: widget.item),
|
||||||
|
),
|
||||||
context: context,
|
context: context,
|
||||||
|
pixelRatio: 2,
|
||||||
|
constraints: BoxConstraints(
|
||||||
|
minWidth: 480,
|
||||||
|
maxWidth: hasAttachment ? 480 : 640,
|
||||||
|
minHeight: 640,
|
||||||
|
maxHeight: double.infinity,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
final directory = await getApplicationDocumentsDirectory();
|
final directory = await getApplicationDocumentsDirectory();
|
||||||
final imageFile = await File(
|
final imageFile = await File(
|
||||||
|
@ -31,6 +31,7 @@ class PostItem extends StatefulWidget {
|
|||||||
final bool isOverrideEmbedClickable;
|
final bool isOverrideEmbedClickable;
|
||||||
final bool isFullDate;
|
final bool isFullDate;
|
||||||
final bool isContentSelectable;
|
final bool isContentSelectable;
|
||||||
|
final bool isNonScrollAttachment;
|
||||||
final bool showFeaturedReply;
|
final bool showFeaturedReply;
|
||||||
final String? attachmentParent;
|
final String? attachmentParent;
|
||||||
|
|
||||||
@ -49,6 +50,7 @@ class PostItem extends StatefulWidget {
|
|||||||
this.isOverrideEmbedClickable = false,
|
this.isOverrideEmbedClickable = false,
|
||||||
this.isFullDate = false,
|
this.isFullDate = false,
|
||||||
this.isContentSelectable = false,
|
this.isContentSelectable = false,
|
||||||
|
this.isNonScrollAttachment = false,
|
||||||
this.showFeaturedReply = false,
|
this.showFeaturedReply = false,
|
||||||
this.attachmentParent,
|
this.attachmentParent,
|
||||||
this.padding,
|
this.padding,
|
||||||
@ -214,6 +216,7 @@ class _PostItemState extends State<PostItem> {
|
|||||||
_PostAttachmentWidget(
|
_PostAttachmentWidget(
|
||||||
item: item,
|
item: item,
|
||||||
padding: widget.padding,
|
padding: widget.padding,
|
||||||
|
isNonScrollAttachment: widget.isNonScrollAttachment,
|
||||||
),
|
),
|
||||||
if (widget.showFeaturedReply)
|
if (widget.showFeaturedReply)
|
||||||
_PostFeaturedReplyWidget(item: item).paddingSymmetric(
|
_PostFeaturedReplyWidget(item: item).paddingSymmetric(
|
||||||
@ -380,8 +383,13 @@ class _PostFeaturedReplyWidget extends StatelessWidget {
|
|||||||
class _PostAttachmentWidget extends StatelessWidget {
|
class _PostAttachmentWidget extends StatelessWidget {
|
||||||
final Post item;
|
final Post item;
|
||||||
final EdgeInsets? padding;
|
final EdgeInsets? padding;
|
||||||
|
final bool isNonScrollAttachment;
|
||||||
|
|
||||||
const _PostAttachmentWidget({required this.item, required this.padding});
|
const _PostAttachmentWidget({
|
||||||
|
required this.item,
|
||||||
|
required this.padding,
|
||||||
|
required this.isNonScrollAttachment,
|
||||||
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -401,14 +409,6 @@ class _PostAttachmentWidget extends StatelessWidget {
|
|||||||
autoload: false,
|
autoload: false,
|
||||||
isFullWidth: true,
|
isFullWidth: true,
|
||||||
);
|
);
|
||||||
} else if (attachments.length == 1) {
|
|
||||||
return AttachmentList(
|
|
||||||
parentId: item.id.toString(),
|
|
||||||
attachmentIds: item.preload == null ? attachments : null,
|
|
||||||
attachments: item.preload?.attachments,
|
|
||||||
autoload: false,
|
|
||||||
isColumn: true,
|
|
||||||
).paddingSymmetric(horizontal: (padding?.horizontal ?? 0) + 14);
|
|
||||||
} else if (attachments.length > 1 &&
|
} else if (attachments.length > 1 &&
|
||||||
attachments.length % 3 == 0 &&
|
attachments.length % 3 == 0 &&
|
||||||
!isLargeScreen) {
|
!isLargeScreen) {
|
||||||
@ -419,6 +419,14 @@ class _PostAttachmentWidget extends StatelessWidget {
|
|||||||
autoload: false,
|
autoload: false,
|
||||||
isGrid: true,
|
isGrid: true,
|
||||||
).paddingSymmetric(horizontal: (padding?.horizontal ?? 0) + 14);
|
).paddingSymmetric(horizontal: (padding?.horizontal ?? 0) + 14);
|
||||||
|
} else if (attachments.length == 1 || isNonScrollAttachment) {
|
||||||
|
return AttachmentList(
|
||||||
|
parentId: item.id.toString(),
|
||||||
|
attachmentIds: item.preload == null ? attachments : null,
|
||||||
|
attachments: item.preload?.attachments,
|
||||||
|
autoload: false,
|
||||||
|
isColumn: true,
|
||||||
|
).paddingSymmetric(horizontal: (padding?.horizontal ?? 0) + 14);
|
||||||
} else {
|
} else {
|
||||||
return AttachmentList(
|
return AttachmentList(
|
||||||
parentId: item.id.toString(),
|
parentId: item.id.toString(),
|
||||||
|
@ -15,14 +15,15 @@ class PostShareImage extends StatelessWidget {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final textColor = Theme.of(context).colorScheme.onSurface.withOpacity(0.3);
|
final textColor = Theme.of(context).colorScheme.onSurface.withOpacity(0.3);
|
||||||
return RootContainer(
|
return RootContainer(
|
||||||
child: Column(
|
child: Wrap(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
alignment: WrapAlignment.spaceBetween,
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
runAlignment: WrapAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
const Gap(24),
|
const SizedBox(height: 40),
|
||||||
Material(
|
Material(
|
||||||
color: Colors.transparent,
|
color: Colors.transparent,
|
||||||
child: Card(
|
child: Card(
|
||||||
|
margin: EdgeInsets.zero,
|
||||||
child: PostItem(
|
child: PostItem(
|
||||||
item: item,
|
item: item,
|
||||||
isShowEmbed: true,
|
isShowEmbed: true,
|
||||||
@ -30,11 +31,15 @@ class PostShareImage extends StatelessWidget {
|
|||||||
showFeaturedReply: false,
|
showFeaturedReply: false,
|
||||||
isReactable: false,
|
isReactable: false,
|
||||||
isShowReply: false,
|
isShowReply: false,
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 4, vertical: 8),
|
isNonScrollAttachment: true,
|
||||||
|
padding: const EdgeInsets.symmetric(
|
||||||
|
horizontal: 4,
|
||||||
|
vertical: 8,
|
||||||
|
),
|
||||||
onComment: () {},
|
onComment: () {},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
).paddingOnly(bottom: 24),
|
||||||
Row(
|
Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
@ -80,6 +85,12 @@ class PostShareImage extends StatelessWidget {
|
|||||||
version: QrVersions.auto,
|
version: QrVersions.auto,
|
||||||
padding: const EdgeInsets.all(4),
|
padding: const EdgeInsets.all(4),
|
||||||
size: 48,
|
size: 48,
|
||||||
|
dataModuleStyle: QrDataModuleStyle(
|
||||||
|
color: Theme.of(context).colorScheme.onSurface,
|
||||||
|
),
|
||||||
|
eyeStyle: QrEyeStyle(
|
||||||
|
color: Theme.of(context).colorScheme.onSurface,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -803,6 +803,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.23"
|
version: "2.0.23"
|
||||||
|
flutter_resizable_container:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: flutter_resizable_container
|
||||||
|
sha256: "5b15c79c6cc338ed79640c706bb5176baa3333d92fd3627ad279aa3e25d2f0e7"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.0"
|
||||||
flutter_secure_storage:
|
flutter_secure_storage:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -87,6 +87,7 @@ dependencies:
|
|||||||
timeline_tile: ^2.0.0
|
timeline_tile: ^2.0.0
|
||||||
screenshot: ^3.0.0
|
screenshot: ^3.0.0
|
||||||
qr_flutter: ^4.1.0
|
qr_flutter: ^4.1.0
|
||||||
|
flutter_resizable_container: ^3.0.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
Loading…
Reference in New Issue
Block a user