Compare commits

..

No commits in common. "6e442c144e02f86982ec2443f7b6cd886911b806" and "65c6083640e5006d73a83ee17c05422303446fa1" have entirely different histories.

7 changed files with 24 additions and 82 deletions

View File

@ -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",
"auditLog": "Audit log",
"shareImage": "Share as image",
"shareImageFooter": "Only on the Solar Network"
"shareImageFooter": "See more interesting posts on Solar Network"
}

View File

@ -1,5 +1,4 @@
import 'package:flutter/material.dart';
import 'package:flutter_resizable_container/flutter_resizable_container.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:gap/gap.dart';
import 'package:get/get.dart';
@ -43,20 +42,14 @@ class ChatListShell extends StatelessWidget {
@override
Widget build(BuildContext context) {
return RootContainer(
child: ResizableContainer(
direction: Axis.horizontal,
divider: ResizableDivider(
thickness: 0.3,
color: Theme.of(context).dividerColor,
),
child: Row(
children: [
const ResizableChild(
minSize: 280,
maxSize: 520,
size: ResizableSize.pixels(320),
const SizedBox(
width: 360,
child: ChatList(),
),
ResizableChild(child: child ?? const EmptyPagePlaceholder()),
const VerticalDivider(thickness: 0.3, width: 0.3),
Expanded(child: child ?? const EmptyPagePlaceholder()),
],
),
);

View File

@ -89,25 +89,10 @@ class _PostActionState extends State<PostAction> {
}
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 image = await screenshot.captureFromLongWidget(
MediaQuery(
data: MediaQuery.of(context),
child: PostShareImage(item: widget.item),
),
final image = await screenshot.captureFromWidget(
PostShareImage(item: widget.item),
context: context,
pixelRatio: 2,
constraints: BoxConstraints(
minWidth: 480,
maxWidth: hasAttachment ? 480 : 640,
minHeight: 640,
maxHeight: double.infinity,
),
);
final directory = await getApplicationDocumentsDirectory();
final imageFile = await File(
@ -115,16 +100,8 @@ class _PostActionState extends State<PostAction> {
).create();
await imageFile.writeAsBytes(image);
final box = context.findRenderObject() as RenderBox?;
final file = XFile(imageFile.path);
await Share.shareXFiles(
[file],
subject: 'postShareSubject'.trParams({
'username': widget.item.author.nick,
}),
sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size,
);
await Share.shareXFiles([file]);
await imageFile.delete();
}

View File

@ -31,7 +31,6 @@ class PostItem extends StatefulWidget {
final bool isOverrideEmbedClickable;
final bool isFullDate;
final bool isContentSelectable;
final bool isNonScrollAttachment;
final bool showFeaturedReply;
final String? attachmentParent;
@ -50,7 +49,6 @@ class PostItem extends StatefulWidget {
this.isOverrideEmbedClickable = false,
this.isFullDate = false,
this.isContentSelectable = false,
this.isNonScrollAttachment = false,
this.showFeaturedReply = false,
this.attachmentParent,
this.padding,
@ -216,7 +214,6 @@ class _PostItemState extends State<PostItem> {
_PostAttachmentWidget(
item: item,
padding: widget.padding,
isNonScrollAttachment: widget.isNonScrollAttachment,
),
if (widget.showFeaturedReply)
_PostFeaturedReplyWidget(item: item).paddingSymmetric(
@ -383,13 +380,8 @@ class _PostFeaturedReplyWidget extends StatelessWidget {
class _PostAttachmentWidget extends StatelessWidget {
final Post item;
final EdgeInsets? padding;
final bool isNonScrollAttachment;
const _PostAttachmentWidget({
required this.item,
required this.padding,
required this.isNonScrollAttachment,
});
const _PostAttachmentWidget({required this.item, required this.padding});
@override
Widget build(BuildContext context) {
@ -409,6 +401,14 @@ class _PostAttachmentWidget extends StatelessWidget {
autoload: false,
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 &&
attachments.length % 3 == 0 &&
!isLargeScreen) {
@ -419,14 +419,6 @@ class _PostAttachmentWidget extends StatelessWidget {
autoload: false,
isGrid: true,
).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 {
return AttachmentList(
parentId: item.id.toString(),

View File

@ -15,15 +15,14 @@ class PostShareImage extends StatelessWidget {
Widget build(BuildContext context) {
final textColor = Theme.of(context).colorScheme.onSurface.withOpacity(0.3);
return RootContainer(
child: Wrap(
alignment: WrapAlignment.spaceBetween,
runAlignment: WrapAlignment.center,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const SizedBox(height: 40),
const Gap(24),
Material(
color: Colors.transparent,
child: Card(
margin: EdgeInsets.zero,
child: PostItem(
item: item,
isShowEmbed: true,
@ -31,15 +30,11 @@ class PostShareImage extends StatelessWidget {
showFeaturedReply: false,
isReactable: false,
isShowReply: false,
isNonScrollAttachment: true,
padding: const EdgeInsets.symmetric(
horizontal: 4,
vertical: 16,
),
padding: const EdgeInsets.symmetric(horizontal: 4, vertical: 8),
onComment: () {},
),
),
).paddingOnly(bottom: 24),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
@ -85,12 +80,6 @@ class PostShareImage extends StatelessWidget {
version: QrVersions.auto,
padding: const EdgeInsets.all(4),
size: 48,
dataModuleStyle: QrDataModuleStyle(
color: Theme.of(context).colorScheme.onSurface,
),
eyeStyle: QrEyeStyle(
color: Theme.of(context).colorScheme.onSurface,
),
),
),
),

View File

@ -803,14 +803,6 @@ packages:
url: "https://pub.dev"
source: hosted
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:
dependency: "direct main"
description:

View File

@ -87,7 +87,6 @@ dependencies:
timeline_tile: ^2.0.0
screenshot: ^3.0.0
qr_flutter: ^4.1.0
flutter_resizable_container: ^3.0.0
dev_dependencies:
flutter_test: