💄 Better attachments list styles
This commit is contained in:
@ -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)
|
||||
|
@ -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,
|
||||
|
@ -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),
|
||||
|
@ -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,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
Reference in New Issue
Block a user