💄 Better attachments list styles

This commit is contained in:
2024-07-26 01:16:32 +08:00
parent 42c3e5ff0a
commit a5b6ace79b
10 changed files with 278 additions and 217 deletions

View File

@ -52,15 +52,21 @@ class _PostItemState extends State<PostItem> {
super.initState();
}
Widget buildDate() {
Widget _buildDate() {
if (widget.isFullDate) {
return Text(DateFormat('y/M/d H:m').format(item.createdAt.toLocal()));
return Text(DateFormat('y/M/d H:m')
.format(item.publishedAt?.toLocal() ?? DateTime.now()));
} else {
return Text(format(item.createdAt.toLocal(), locale: 'en_short'));
return Text(
format(
item.publishedAt?.toLocal() ?? DateTime.now(),
locale: 'en_short',
),
);
}
}
Widget buildHeader() {
Widget _buildHeader() {
return Row(
children: [
if (widget.isCompact)
@ -72,12 +78,12 @@ class _PostItemState extends State<PostItem> {
item.author.nick,
style: const TextStyle(fontWeight: FontWeight.bold),
).paddingOnly(left: widget.isCompact ? 6 : 12),
buildDate().paddingOnly(left: 4),
_buildDate().paddingOnly(left: 4),
],
);
}
Widget buildFooter() {
Widget _buildFooter() {
List<String> labels = List.empty(growable: true);
if (widget.item.createdAt != widget.item.updatedAt) {
labels.add('postEdited'.trParams({
@ -116,7 +122,7 @@ class _PostItemState extends State<PostItem> {
}
}
Widget buildReply(BuildContext context) {
Widget _buildReply(BuildContext context) {
return Column(
children: [
Row(
@ -148,7 +154,7 @@ class _PostItemState extends State<PostItem> {
);
}
Widget buildRepost(BuildContext context) {
Widget _buildRepost(BuildContext context) {
return Column(
children: [
Row(
@ -191,7 +197,7 @@ class _PostItemState extends State<PostItem> {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
buildHeader().paddingSymmetric(horizontal: 12),
_buildHeader().paddingSymmetric(horizontal: 12),
MarkdownTextContent(
content: item.body['content'],
isSelectable: widget.isContentSelectable,
@ -201,7 +207,7 @@ class _PostItemState extends State<PostItem> {
top: 2,
bottom: hasAttachment ? 4 : 0,
),
buildFooter().paddingOnly(left: 16),
_buildFooter().paddingOnly(left: 16),
if (attachments.isNotEmpty)
Row(
children: [
@ -246,14 +252,14 @@ class _PostItemState extends State<PostItem> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
buildHeader(),
_buildHeader(),
MarkdownTextContent(
content: item.body['content'],
isSelectable: widget.isContentSelectable,
).paddingOnly(left: 12, right: 8),
if (widget.item.replyTo != null && widget.isShowEmbed)
GestureDetector(
child: buildReply(context).paddingOnly(top: 4),
child: _buildReply(context).paddingOnly(top: 4),
onTap: () {
if (!widget.isClickable) return;
AppRouter.instance.pushNamed(
@ -266,7 +272,7 @@ class _PostItemState extends State<PostItem> {
),
if (widget.item.repostTo != null && widget.isShowEmbed)
GestureDetector(
child: buildRepost(context).paddingOnly(top: 4),
child: _buildRepost(context).paddingOnly(top: 4),
onTap: () {
if (!widget.isClickable) return;
AppRouter.instance.pushNamed(
@ -277,7 +283,7 @@ class _PostItemState extends State<PostItem> {
);
},
),
buildFooter().paddingOnly(left: 12),
_buildFooter().paddingOnly(left: 12),
],
),
)
@ -297,7 +303,7 @@ class _PostItemState extends State<PostItem> {
child: AttachmentList(
parentId: widget.item.id.toString(),
attachmentsId: attachments,
divided: true,
isGrid: attachments.length > 1,
),
),
if (widget.isShowReply && widget.isReactable)

View File

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';
import 'package:solian/models/post.dart';
import 'package:solian/providers/auth.dart';
import 'package:solian/router.dart';
import 'package:solian/widgets/sized_container.dart';
import 'package:solian/widgets/posts/post_action.dart';
@ -79,6 +80,9 @@ class PostListEntryWidget extends StatelessWidget {
);
},
onLongPress: () {
final AuthProvider auth = Get.find();
if (auth.isAuthorized.isFalse) return;
showModalBottomSheet(
useRootNavigator: true,
context: context,

View File

@ -40,6 +40,9 @@ class _PostShuffleSwiperState extends State<PostShuffleSwiper> {
return PostSingleDisplay(
key: Key('p${element.id}'),
item: element,
onUpdate: () {
widget.controller.reloadAllOver();
},
);
},
padding: const EdgeInsets.all(24),

View File

@ -1,12 +1,16 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:solian/models/post.dart';
import 'package:solian/widgets/posts/post_item.dart';
import 'package:solian/widgets/posts/post_list.dart';
class PostSingleDisplay extends StatelessWidget {
final Post item;
final Function onUpdate;
const PostSingleDisplay({super.key, required this.item});
const PostSingleDisplay({
super.key,
required this.item,
required this.onUpdate,
});
@override
Widget build(BuildContext context) {
@ -14,9 +18,13 @@ class PostSingleDisplay extends StatelessWidget {
alignment: Alignment.center,
child: Card(
child: SingleChildScrollView(
child: PostItem(
child: PostListEntryWidget(
item: item,
).paddingSymmetric(horizontal: 10, vertical: 16),
isClickable: true,
isShowEmbed: true,
isNestedClickable: true,
onUpdate: onUpdate,
),
),
),
);