diff --git a/lib/screens/explore.dart b/lib/screens/explore.dart index b916263..50ba177 100644 --- a/lib/screens/explore.dart +++ b/lib/screens/explore.dart @@ -71,6 +71,7 @@ class _ExploreScreenState extends State { builderDelegate: PagedChildBuilderDelegate( itemBuilder: (context, item, index) => FeedItem( item: item, + brief: true, ), ), ), diff --git a/lib/widgets/feed.dart b/lib/widgets/feed.dart index ff1984e..e5f5ebc 100644 --- a/lib/widgets/feed.dart +++ b/lib/widgets/feed.dart @@ -4,12 +4,15 @@ import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:solaragent/models/feed.dart'; import 'package:solaragent/widgets/image.dart'; import 'package:solaragent/widgets/posts/comments.dart'; +import 'package:solaragent/widgets/posts/content/article.dart'; +import 'package:solaragent/widgets/posts/content/moment.dart'; import 'package:solaragent/widgets/posts/reactions.dart'; class FeedItem extends StatefulWidget { final Feed item; + final bool? brief; - const FeedItem({super.key, required this.item}); + const FeedItem({super.key, required this.item, this.brief}); @override State createState() => _FeedItemState(); @@ -47,7 +50,9 @@ class _FeedItemState extends State { } bool hasAttachments() => - widget.item.attachments != null && widget.item.attachments!.isNotEmpty; + widget.item.modelType == "moment" && + widget.item.attachments != null && + widget.item.attachments!.isNotEmpty; String getDescription(String desc) => desc.isEmpty ? "No description yet." : desc; @@ -55,6 +60,15 @@ class _FeedItemState extends State { String getFileUrl(String fileId) => 'https://co.solsynth.dev/api/attachments/o/$fileId'; + Widget buildContent() { + switch (widget.item.modelType) { + case "article": + return ArticleContent(item: widget.item, brief: widget.brief ?? false); + default: + return MomentContent(item: widget.item); + } + } + @override void initState() { reactionCount = widget.item.reactionCount; @@ -66,7 +80,6 @@ class _FeedItemState extends State { Widget build(BuildContext context) { return Column( children: [ - // Author info Container( color: Colors.grey[50], child: ListTile( @@ -82,13 +95,7 @@ class _FeedItemState extends State { ), ), ), - // Content - Markdown( - data: widget.item.content, - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - ), - // Attachments view + buildContent(), hasAttachments() ? Container( decoration: const BoxDecoration( @@ -97,7 +104,7 @@ class _FeedItemState extends State { ), child: FlutterCarousel( options: CarouselOptions( - height: 240.0, + height: 360.0, viewportFraction: 1.0, showIndicator: true, slideIndicator: const CircularSlideIndicator(), @@ -128,12 +135,12 @@ class _FeedItemState extends State { ), ) : Container(), - // Actions Container( padding: const EdgeInsets.symmetric(horizontal: 8), decoration: const BoxDecoration( - border: - Border(top: BorderSide(width: 0.3, color: Color(0xffdedede))), + border: Border( + top: BorderSide(width: 0.3, color: Color(0xffdedede)), + ), ), child: Row( children: [ diff --git a/lib/widgets/posts/comments.dart b/lib/widgets/posts/comments.dart index 9bf5eed..88e036c 100644 --- a/lib/widgets/posts/comments.dart +++ b/lib/widgets/posts/comments.dart @@ -113,6 +113,7 @@ class _CommentListState extends State { builderDelegate: PagedChildBuilderDelegate( itemBuilder: (context, item, index) => FeedItem( item: item, + brief: true, ), ), ), diff --git a/lib/widgets/posts/content/article.dart b/lib/widgets/posts/content/article.dart new file mode 100644 index 0000000..0f8c17d --- /dev/null +++ b/lib/widgets/posts/content/article.dart @@ -0,0 +1,24 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:solaragent/models/feed.dart'; + +class ArticleContent extends StatelessWidget { + final Feed item; + final bool brief; + + const ArticleContent({super.key, required this.item, required this.brief}); + + @override + Widget build(BuildContext context) { + return brief + ? ListTile( + title: Text(item.title), + subtitle: Text(item.description), + ) + : Markdown( + data: item.content, + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + ); + } +} diff --git a/lib/widgets/posts/content/moment.dart b/lib/widgets/posts/content/moment.dart new file mode 100644 index 0000000..bc004d8 --- /dev/null +++ b/lib/widgets/posts/content/moment.dart @@ -0,0 +1,18 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_markdown/flutter_markdown.dart'; +import 'package:solaragent/models/feed.dart'; + +class MomentContent extends StatelessWidget { + final Feed item; + + const MomentContent({super.key, required this.item}); + + @override + Widget build(BuildContext context) { + return Markdown( + data: item.content, + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + ); + } +}