✨ Post link expand
⚡ Cache link expansion image
This commit is contained in:
parent
cf1cfecb08
commit
e45d9b39d5
@ -1,6 +1,8 @@
|
||||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_markdown/flutter_markdown.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:solian/platform.dart';
|
||||
import 'package:solian/providers/link_expander.dart';
|
||||
import 'package:url_launcher/url_launcher_string.dart';
|
||||
|
||||
@ -9,6 +11,12 @@ class LinkExpansion extends StatelessWidget {
|
||||
|
||||
const LinkExpansion({super.key, required this.content});
|
||||
|
||||
Widget _buildImage(String url, {double? width, double? height}) {
|
||||
return PlatformInfo.canCacheImage
|
||||
? CachedNetworkImage(imageUrl: url, width: width, height: height)
|
||||
: Image.network(url, width: width, height: height);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final linkRegex = RegExp(
|
||||
@ -43,20 +51,17 @@ class LinkExpansion extends StatelessWidget {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
if ([
|
||||
snapshot.data!.icon != null &&
|
||||
(snapshot.data!.icon?.startsWith('http') ?? false),
|
||||
(snapshot.data!.icon?.isNotEmpty ?? false),
|
||||
snapshot.data!.siteName != null
|
||||
].any((x) => x))
|
||||
Row(
|
||||
children: [
|
||||
if (snapshot.data!.icon != null &&
|
||||
(snapshot.data!.icon?.startsWith('http') ??
|
||||
false))
|
||||
if (snapshot.data!.icon?.isNotEmpty ?? false)
|
||||
ClipRRect(
|
||||
borderRadius: const BorderRadius.all(
|
||||
Radius.circular(8),
|
||||
),
|
||||
child: Image.network(
|
||||
child: _buildImage(
|
||||
snapshot.data!.icon!,
|
||||
width: 32,
|
||||
height: 32,
|
||||
@ -68,14 +73,17 @@ class LinkExpansion extends StatelessWidget {
|
||||
style: Theme.of(context).textTheme.labelLarge,
|
||||
),
|
||||
],
|
||||
).paddingOnly(bottom: 8),
|
||||
).paddingOnly(
|
||||
bottom:
|
||||
(snapshot.data!.icon?.isNotEmpty ?? false) ? 8 : 4,
|
||||
),
|
||||
if (snapshot.data!.image != null &&
|
||||
(snapshot.data!.image?.startsWith('http') ?? false))
|
||||
ClipRRect(
|
||||
borderRadius: const BorderRadius.all(
|
||||
Radius.circular(8),
|
||||
),
|
||||
child: Image.network(
|
||||
child: _buildImage(
|
||||
snapshot.data!.image!,
|
||||
),
|
||||
).paddingOnly(bottom: 8),
|
||||
|
@ -33,9 +33,11 @@ class _AppNavigationDrawerState extends State<AppNavigationDrawer> {
|
||||
final resp = await provider.getCurrentStatus();
|
||||
final status = AccountStatus.fromJson(resp.body);
|
||||
|
||||
setState(() {
|
||||
_accountStatus = status;
|
||||
});
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_accountStatus = status;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void _closeDrawer() {
|
||||
|
@ -10,6 +10,7 @@ import 'package:solian/shells/title_shell.dart';
|
||||
import 'package:solian/widgets/account/account_avatar.dart';
|
||||
import 'package:solian/widgets/account/account_profile_popup.dart';
|
||||
import 'package:solian/widgets/attachments/attachment_list.dart';
|
||||
import 'package:solian/widgets/link_expansion.dart';
|
||||
import 'package:solian/widgets/markdown_text_content.dart';
|
||||
import 'package:solian/widgets/posts/post_tags.dart';
|
||||
import 'package:solian/widgets/posts/post_quick_action.dart';
|
||||
@ -349,6 +350,11 @@ class _PostItemState extends State<PostItem> {
|
||||
),
|
||||
],
|
||||
),
|
||||
LinkExpansion(content: item.body['content']).paddingOnly(
|
||||
left: 8,
|
||||
right: 8,
|
||||
top: 4,
|
||||
),
|
||||
_buildFooter().paddingOnly(left: 16),
|
||||
if (attachments.isNotEmpty)
|
||||
Row(
|
||||
@ -445,6 +451,8 @@ class _PostItemState extends State<PostItem> {
|
||||
if (widget.item.repostTo != null && widget.isShowEmbed)
|
||||
_buildRepost(context).paddingOnly(top: 4),
|
||||
_buildFooter().paddingOnly(left: 12),
|
||||
LinkExpansion(content: item.body['content'])
|
||||
.paddingOnly(top: 4),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
Loading…
Reference in New Issue
Block a user