From 45f489dcb62d79103848dc2a77ce417319f1498f Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Fri, 6 Dec 2024 00:21:48 +0800 Subject: [PATCH] :sparkles: Post visibility hint --- lib/widgets/attachment/attachment_list.dart | 3 +- lib/widgets/post/post_item.dart | 36 +++++++++++++++++++-- lib/widgets/post/post_meta_editor.dart | 16 ++++----- 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/lib/widgets/attachment/attachment_list.dart b/lib/widgets/attachment/attachment_list.dart index f35d33d..14cf6b5 100644 --- a/lib/widgets/attachment/attachment_list.dart +++ b/lib/widgets/attachment/attachment_list.dart @@ -62,7 +62,8 @@ class _AttachmentListState extends State { 'audio' => 16 / 9, 'video' => 16 / 9, _ => 1, - }; + } + .toDouble(); return Container( constraints: ResponsiveBreakpoints.of(context).largerThan(MOBILE) diff --git a/lib/widgets/post/post_item.dart b/lib/widgets/post/post_item.dart index 7cddc8b..e70b14b 100644 --- a/lib/widgets/post/post_item.dart +++ b/lib/widgets/post/post_item.dart @@ -17,6 +17,7 @@ import 'package:surface/widgets/dialog.dart'; import 'package:surface/widgets/markdown_content.dart'; import 'package:gap/gap.dart'; import 'package:surface/widgets/post/post_comment_list.dart'; +import 'package:surface/widgets/post/post_meta_editor.dart'; import 'package:surface/widgets/post/post_reaction.dart'; import 'package:surface/widgets/post/publisher_popover.dart'; @@ -69,6 +70,11 @@ class PostItem extends StatelessWidget { _PostQuoteContent(child: data.repostTo!).padding( horizontal: 12, ), + if (data.visibility > 0) + _PostVisibilityHint(data: data).padding( + horizontal: 16, + vertical: 4, + ), if (data.body['content_truncated'] == true) _PostTruncatedHint(data: data).padding( horizontal: 16, @@ -478,6 +484,30 @@ class _PostTagsList extends StatelessWidget { } } +class _PostVisibilityHint extends StatelessWidget { + final SnPost data; + const _PostVisibilityHint({super.key, required this.data}); + + static const List kVisibilityIcons = [ + Symbols.public, + Symbols.group, + Symbols.person_check, + Symbols.person_remove, + Symbols.lock, + ]; + + @override + Widget build(BuildContext context) { + return Row( + children: [ + Icon(kVisibilityIcons[data.visibility], size: 20), + const Gap(4), + Text(kPostVisibilityLevel[data.visibility] ?? 'postVisibilityAll').tr(), + ], + ).opacity(0.75); + } +} + class _PostTruncatedHint extends StatelessWidget { final SnPost data; const _PostTruncatedHint({super.key, required this.data}); @@ -495,9 +525,9 @@ class _PostTruncatedHint extends StatelessWidget { const Gap(4), Text('postReadEstimate').tr(args: [ '${Duration( - seconds: ((data.body['content_length'] as num).toDouble() / - kHumanReadSpeed) - .round(), + seconds: (data.body['content_length'] as num).toDouble() * + 60 ~/ + kHumanReadSpeed, ).inSeconds}s', ]), ], diff --git a/lib/widgets/post/post_meta_editor.dart b/lib/widgets/post/post_meta_editor.dart index dd3e83b..3a469f7 100644 --- a/lib/widgets/post/post_meta_editor.dart +++ b/lib/widgets/post/post_meta_editor.dart @@ -9,18 +9,18 @@ import 'package:surface/controllers/post_write_controller.dart'; import 'package:surface/widgets/account/account_select.dart'; import 'package:surface/widgets/post/post_tags_field.dart'; +const Map kPostVisibilityLevel = { + 0: 'postVisibilityAll', + 1: 'postVisibilityFriends', + 2: 'postVisibilitySelected', + 3: 'postVisibilityFiltered', + 4: 'postVisibilityNone', +}; + class PostMetaEditor extends StatelessWidget { final PostWriteController controller; const PostMetaEditor({super.key, required this.controller}); - static Map kPostVisibilityLevel = { - 0: 'postVisibilityAll', - 1: 'postVisibilityFriends', - 2: 'postVisibilitySelected', - 3: 'postVisibilityFiltered', - 4: 'postVisibilityNone', - }; - Future _selectDate( BuildContext context, { DateTime? initialDateTime,