💄 Optimize share as image
This commit is contained in:
		| @@ -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: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user