Post detail

This commit is contained in:
2024-05-25 13:19:16 +08:00
parent f376603482
commit daee3e8074
8 changed files with 147 additions and 14 deletions

View File

@ -4,6 +4,7 @@ import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:get/get_utils/get_utils.dart';
import 'package:solian/models/post.dart';
import 'package:solian/router.dart';
import 'package:solian/widgets/account/account_avatar.dart';
import 'package:solian/widgets/attachments/attachment_list.dart';
import 'package:solian/widgets/posts/post_quick_action.dart';
@ -11,14 +12,18 @@ import 'package:timeago/timeago.dart' show format;
class PostItem extends StatefulWidget {
final Post item;
final bool isClickable;
final bool isCompact;
final bool isReactable;
final bool isShowReply;
const PostItem({
super.key,
required this.item,
this.isClickable = false,
this.isCompact = false,
this.isReactable = true,
this.isShowReply = true,
});
@override
@ -158,9 +163,31 @@ class _PostItemState extends State<PostItem> {
padding: const EdgeInsets.all(0),
).paddingOnly(left: 12, right: 8),
if (widget.item.replyTo != null)
buildReply(context).paddingOnly(top: 4),
GestureDetector(
child: buildReply(context).paddingOnly(top: 4),
onTap: () {
if (!widget.isClickable) return;
AppRouter.instance.pushNamed(
'postDetail',
pathParameters: {
'alias': widget.item.replyTo!.alias,
},
);
},
),
if (widget.item.repostTo != null)
buildRepost(context).paddingOnly(top: 4),
GestureDetector(
child: buildRepost(context).paddingOnly(top: 4),
onTap: () {
if (!widget.isClickable) return;
AppRouter.instance.pushNamed(
'postDetail',
pathParameters: {
'alias': widget.item.repostTo!.alias,
},
);
},
),
],
),
)
@ -173,6 +200,7 @@ class _PostItemState extends State<PostItem> {
),
AttachmentList(attachmentsId: item.attachments ?? List.empty()),
PostQuickAction(
isShowReply: widget.isShowReply,
isReactable: widget.isReactable,
item: widget.item,
onReact: (symbol, changes) {

View File

@ -10,11 +10,13 @@ import 'package:solian/widgets/posts/post_reaction.dart';
class PostQuickAction extends StatefulWidget {
final Post item;
final bool isReactable;
final bool isShowReply;
final void Function(String symbol, int num) onReact;
const PostQuickAction({
super.key,
required this.item,
this.isShowReply = true,
this.isReactable = true,
required this.onReact,
});
@ -93,17 +95,17 @@ class _PostQuickActionState extends State<PostQuickAction> {
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
if (widget.isReactable)
if (widget.isReactable && widget.isShowReply)
ActionChip(
avatar: const Icon(Icons.comment),
label: Text(widget.item.replyCount.toString()),
visualDensity: density,
onPressed: () {},
),
if (widget.isReactable)
if (widget.isReactable && widget.isShowReply)
const VerticalDivider(
thickness: 0.3, width: 0.3, indent: 8, endIndent: 8)
.paddingOnly(left: 8),
.paddingSymmetric(horizontal: 8),
Expanded(
child: ListView(
shrinkWrap: true,
@ -132,7 +134,7 @@ class _PostQuickActionState extends State<PostQuickAction> {
onPressed: () => showReactMenu(),
),
],
).paddingOnly(left: 8),
),
)
],
),