💄 Bug fixes and optimization
This commit is contained in:
@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_markdown/flutter_markdown.dart';
|
||||
import 'package:solian/models/post.dart';
|
||||
import 'package:markdown/markdown.dart' as markdown;
|
||||
import 'package:solian/utils/service_url.dart';
|
||||
import 'package:url_launcher/url_launcher_string.dart';
|
||||
|
||||
class ArticleContent extends StatelessWidget {
|
||||
@ -12,31 +13,30 @@ class ArticleContent extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return brief
|
||||
? Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
item.title,
|
||||
style: Theme.of(context).textTheme.titleMedium,
|
||||
),
|
||||
Text(
|
||||
item.description,
|
||||
style: Theme.of(context).textTheme.bodyMedium,
|
||||
)
|
||||
],
|
||||
),
|
||||
final headingPart = Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
item.title,
|
||||
style: Theme.of(context).textTheme.titleMedium,
|
||||
),
|
||||
Text(
|
||||
item.description,
|
||||
style: Theme.of(context).textTheme.bodyMedium,
|
||||
)
|
||||
],
|
||||
);
|
||||
|
||||
return brief
|
||||
? headingPart
|
||||
: Column(
|
||||
children: [
|
||||
ListTile(
|
||||
title: Text(item.title),
|
||||
subtitle: Text(item.description),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(bottom: 12),
|
||||
child: headingPart,
|
||||
),
|
||||
const Divider(color: Color(0xffefefef)),
|
||||
Markdown(
|
||||
padding: const EdgeInsets.all(0),
|
||||
selectable: !brief,
|
||||
data: item.content,
|
||||
shrinkWrap: true,
|
||||
@ -52,6 +52,15 @@ class ArticleContent extends StatelessWidget {
|
||||
mode: LaunchMode.externalApplication,
|
||||
);
|
||||
},
|
||||
imageBuilder: (url, _, __) {
|
||||
if (url.toString().startsWith("/api/attachments")) {
|
||||
return Image.network(
|
||||
getRequestUri('interactive', url.toString())
|
||||
.toString());
|
||||
} else {
|
||||
return Image.network(url.toString());
|
||||
}
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
|
@ -1,3 +1,4 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:chewie/chewie.dart';
|
||||
import 'package:solian/models/post.dart';
|
||||
@ -8,8 +9,9 @@ import 'package:video_player/video_player.dart';
|
||||
|
||||
class AttachmentItem extends StatefulWidget {
|
||||
final Attachment item;
|
||||
final String? badge;
|
||||
|
||||
const AttachmentItem({super.key, required this.item});
|
||||
const AttachmentItem({super.key, required this.item, this.badge});
|
||||
|
||||
@override
|
||||
State<AttachmentItem> createState() => _AttachmentItemState();
|
||||
@ -36,9 +38,22 @@ class _AttachmentItemState extends State<AttachmentItem> {
|
||||
borderRadius: const BorderRadius.all(borderRadius),
|
||||
child: Hero(
|
||||
tag: getTag(),
|
||||
child: Image.network(
|
||||
getFileUri().toString(),
|
||||
fit: BoxFit.cover,
|
||||
child: Stack(
|
||||
children: [
|
||||
Image.network(
|
||||
getFileUri().toString(),
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
widget.badge == null
|
||||
? Container()
|
||||
: Positioned(
|
||||
right: 12,
|
||||
bottom: 8,
|
||||
child: Chip(label: Text(widget.badge!)),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
@ -110,18 +125,21 @@ class AttachmentList extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var renderProgress = 0;
|
||||
return FlutterCarousel(
|
||||
options: CarouselOptions(
|
||||
aspectRatio: 16 / 9,
|
||||
showIndicator: true,
|
||||
slideIndicator: const CircularSlideIndicator(),
|
||||
viewportFraction: 1,
|
||||
),
|
||||
items: items.map((item) {
|
||||
renderProgress++;
|
||||
final badge = '$renderProgress/${items.length}';
|
||||
return Builder(
|
||||
builder: (BuildContext context) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 4),
|
||||
child: AttachmentItem(item: item),
|
||||
child: AttachmentItem(
|
||||
item: item, badge: items.length <= 1 ? null : badge),
|
||||
);
|
||||
},
|
||||
);
|
||||
|
@ -15,7 +15,7 @@ class MomentContent extends StatelessWidget {
|
||||
data: item.content,
|
||||
shrinkWrap: true,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12),
|
||||
padding: const EdgeInsets.all(0),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user