Compare commits

..

No commits in common. "59c4d667f69c4d80ce19dce1e70375630a052815" and "48e3b510cf5a7a726b685a40201a28103513c0a2" have entirely different histories.

5 changed files with 29 additions and 92 deletions

View File

@ -6,7 +6,6 @@ import 'package:solian/providers/content/posts.dart';
import 'package:solian/providers/last_read.dart'; import 'package:solian/providers/last_read.dart';
import 'package:solian/theme.dart'; import 'package:solian/theme.dart';
import 'package:solian/widgets/loading_indicator.dart'; import 'package:solian/widgets/loading_indicator.dart';
import 'package:solian/widgets/posts/post_action.dart';
import 'package:solian/widgets/posts/post_item.dart'; import 'package:solian/widgets/posts/post_item.dart';
import 'package:solian/widgets/posts/post_replies.dart'; import 'package:solian/widgets/posts/post_replies.dart';
@ -41,7 +40,7 @@ class _PostDetailScreenState extends State<PostDetailScreen> {
Get.find<LastReadProvider>().feedLastReadAt = _item?.id; Get.find<LastReadProvider>().feedLastReadAt = _item?.id;
if (mounted) setState(() => _isBusy = false); setState(() => _isBusy = false);
} }
@override @override
@ -68,7 +67,6 @@ class _PostDetailScreenState extends State<PostDetailScreen> {
), ),
SliverToBoxAdapter( SliverToBoxAdapter(
child: PostItem( child: PostItem(
key: ValueKey(_item),
item: _item!, item: _item!,
isClickable: false, isClickable: false,
isOverrideEmbedClickable: true, isOverrideEmbedClickable: true,
@ -81,24 +79,6 @@ class _PostDetailScreenState extends State<PostDetailScreen> {
vertical: 8, vertical: 8,
) )
: EdgeInsets.zero, : EdgeInsets.zero,
onTapMore: () {
showModalBottomSheet(
useRootNavigator: true,
context: context,
builder: (context) => PostAction(
item: _item!,
noReact: true,
),
).then((value) {
if (value is Future) {
value.then((_) {
_getDetail();
});
} else if (value != null) {
_getDetail();
}
});
},
), ),
), ),
SliverToBoxAdapter( SliverToBoxAdapter(

View File

@ -4,13 +4,8 @@ import 'package:gap/gap.dart';
class LoadingIndicator extends StatefulWidget { class LoadingIndicator extends StatefulWidget {
final bool isActive; final bool isActive;
final Color? backgroundColor;
const LoadingIndicator({ const LoadingIndicator({super.key, this.isActive = true});
super.key,
this.isActive = true,
this.backgroundColor,
});
@override @override
State<LoadingIndicator> createState() => _LoadingIndicatorState(); State<LoadingIndicator> createState() => _LoadingIndicatorState();
@ -68,7 +63,7 @@ class _LoadingIndicatorState extends State<LoadingIndicator>
axisAlignment: -1, // Align animation from the top axisAlignment: -1, // Align animation from the top
child: Container( child: Container(
padding: const EdgeInsets.symmetric(vertical: 16, horizontal: 24), padding: const EdgeInsets.symmetric(vertical: 16, horizontal: 24),
color: widget.backgroundColor ?? color:
Theme.of(context).colorScheme.surfaceContainerLow.withOpacity(0.5), Theme.of(context).colorScheme.surfaceContainerLow.withOpacity(0.5),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,

View File

@ -11,7 +11,6 @@ import 'package:solian/exts.dart';
import 'package:solian/models/post.dart'; import 'package:solian/models/post.dart';
import 'package:solian/platform.dart'; import 'package:solian/platform.dart';
import 'package:solian/providers/auth.dart'; import 'package:solian/providers/auth.dart';
import 'package:solian/providers/content/posts.dart';
import 'package:solian/router.dart'; import 'package:solian/router.dart';
import 'package:solian/screens/posts/post_editor.dart'; import 'package:solian/screens/posts/post_editor.dart';
import 'package:solian/widgets/loading_indicator.dart'; import 'package:solian/widgets/loading_indicator.dart';
@ -29,14 +28,20 @@ class PostAction extends StatefulWidget {
} }
class _PostActionState extends State<PostAction> { class _PostActionState extends State<PostAction> {
bool _isBusy = false; bool _isBusy = true;
bool _canModifyContent = false; bool _canModifyContent = false;
void _checkAbleToModifyContent() async { void _checkAbleToModifyContent() async {
final AuthProvider auth = Get.find(); final AuthProvider auth = Get.find();
if (auth.isAuthorized.isFalse) return; if (auth.isAuthorized.isFalse) return;
_canModifyContent = auth.userProfile.value!['id'] == widget.item.author.id; setState(() => _isBusy = true);
setState(() {
_canModifyContent =
auth.userProfile.value!['id'] == widget.item.author.id;
_isBusy = false;
});
} }
Future<void> _doShare({bool noUri = false}) async { Future<void> _doShare({bool noUri = false}) async {
@ -89,8 +94,6 @@ class _PostActionState extends State<PostAction> {
: List.empty(); : List.empty();
final hasMultipleAttachment = attachments.length > 1; final hasMultipleAttachment = attachments.length > 1;
setState(() => _isBusy = true);
final screenshot = ScreenshotController(); final screenshot = ScreenshotController();
final image = await screenshot.captureFromLongWidget( final image = await screenshot.captureFromLongWidget(
MediaQuery( MediaQuery(
@ -134,21 +137,6 @@ class _PostActionState extends State<PostAction> {
); );
context.showSnackbar('fileSavedAt'.trParams({'path': filepath})); context.showSnackbar('fileSavedAt'.trParams({'path': filepath}));
} }
setState(() => _isBusy = false);
}
Future<Post> _getFullPost() async {
final PostProvider posts = Get.find();
try {
final resp = await posts.getPost(widget.item.id.toString());
return Post.fromJson(resp.body);
} catch (e) {
context.showErrorDialog(e).then((_) => Navigator.pop(context));
}
return widget.item;
} }
@override @override
@ -194,13 +182,7 @@ class _PostActionState extends State<PostAction> {
), ),
], ],
).paddingOnly(left: 24, right: 24, top: 32, bottom: 16), ).paddingOnly(left: 24, right: 24, top: 32, bottom: 16),
LoadingIndicator( LoadingIndicator(isActive: _isBusy),
isActive: _isBusy,
backgroundColor: Theme.of(context)
.colorScheme
.surfaceContainerHigh
.withOpacity(0.5),
),
Expanded( Expanded(
child: ListView( child: ListView(
children: [ children: [
@ -223,9 +205,7 @@ class _PostActionState extends State<PostAction> {
IconButton( IconButton(
icon: const Icon(Icons.image), icon: const Icon(Icons.image),
tooltip: 'shareImage'.tr, tooltip: 'shareImage'.tr,
onPressed: _isBusy onPressed: () async {
? null
: () async {
await _shareImage(); await _shareImage();
Navigator.pop(context); Navigator.pop(context);
}, },
@ -308,22 +288,14 @@ class _PostActionState extends State<PostAction> {
contentPadding: const EdgeInsets.symmetric(horizontal: 24), contentPadding: const EdgeInsets.symmetric(horizontal: 24),
leading: const Icon(Icons.edit), leading: const Icon(Icons.edit),
title: Text('edit'.tr), title: Text('edit'.tr),
onTap: _isBusy onTap: () async {
? null
: () async {
setState(() => _isBusy = true);
var item = widget.item;
if (item.body?['content_truncated'] == true) {
item = await _getFullPost();
}
Navigator.pop( Navigator.pop(
context, context,
AppRouter.instance.pushNamed( AppRouter.instance.pushNamed(
'postEditor', 'postEditor',
extra: PostPublishArguments(edit: item), extra: PostPublishArguments(edit: widget.item),
), ),
); );
if (mounted) setState(() => _isBusy = false);
}, },
), ),
if (_canModifyContent) if (_canModifyContent)

View File

@ -38,7 +38,6 @@ class PostItem extends StatefulWidget {
final EdgeInsets? padding; final EdgeInsets? padding;
final Function? onComment; final Function? onComment;
final Function? onTapMore;
const PostItem({ const PostItem({
super.key, super.key,
@ -56,7 +55,6 @@ class PostItem extends StatefulWidget {
this.attachmentParent, this.attachmentParent,
this.padding, this.padding,
this.onComment, this.onComment,
this.onTapMore,
}); });
@override @override
@ -101,7 +99,6 @@ class _PostItemState extends State<PostItem> {
_PostHeaderWidget( _PostHeaderWidget(
isCompact: widget.isCompact, isCompact: widget.isCompact,
isFullDate: widget.isFullDate, isFullDate: widget.isFullDate,
onTapMore: widget.onTapMore,
item: item, item: item,
).paddingSymmetric(horizontal: 12), ).paddingSymmetric(horizontal: 12),
_PostHeaderDividerWidget(item: item).paddingSymmetric(horizontal: 12), _PostHeaderDividerWidget(item: item).paddingSymmetric(horizontal: 12),
@ -164,7 +161,6 @@ class _PostItemState extends State<PostItem> {
_PostHeaderWidget( _PostHeaderWidget(
isCompact: widget.isCompact, isCompact: widget.isCompact,
isFullDate: widget.isFullDate, isFullDate: widget.isFullDate,
onTapMore: widget.onTapMore,
item: item, item: item,
), ),
_PostHeaderDividerWidget(item: item), _PostHeaderDividerWidget(item: item),
@ -592,13 +588,10 @@ class _PostHeaderWidget extends StatelessWidget {
final bool isFullDate; final bool isFullDate;
final Post item; final Post item;
final Function? onTapMore;
const _PostHeaderWidget({ const _PostHeaderWidget({
required this.isCompact, required this.isCompact,
required this.isFullDate, required this.isFullDate,
required this.item, required this.item,
required this.onTapMore,
}); });
@override @override
@ -656,12 +649,10 @@ class _PostHeaderWidget extends StatelessWidget {
], ],
), ),
), ),
if (onTapMore != null) if (item.type == 'article')
IconButton( Badge(
color: Theme.of(context).colorScheme.primary, label: Text('article'.tr),
icon: const Icon(Icons.more_vert), ).paddingOnly(top: 3),
onPressed: () => onTapMore!(),
),
], ],
), ),
const Gap(8), const Gap(8),

View File

@ -105,7 +105,6 @@ class PostListEntryWidget extends StatelessWidget {
isClickable: isNestedClickable, isClickable: isNestedClickable,
showFeaturedReply: showFeaturedReply, showFeaturedReply: showFeaturedReply,
padding: padding, padding: padding,
onTapMore: () => _openActions(context),
onComment: () { onComment: () {
AppRouter.instance AppRouter.instance
.pushNamed( .pushNamed(