Skip to content

Commit

Permalink
post widget behavior reworked
Browse files Browse the repository at this point in the history
  • Loading branch information
yukiterunamaana committed May 29, 2024
1 parent 3ee7a1e commit 6d56580
Show file tree
Hide file tree
Showing 8 changed files with 204 additions and 78 deletions.
9 changes: 5 additions & 4 deletions lib/pages/account_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';
import 'package:mastodon_api/mastodon_api.dart';
import '../globals.dart';
import '../widgets/post_in_feed_widget.dart';
import '../widgets/post_view.dart';

class AccountPageWidget extends StatefulWidget {
Expand All @@ -15,7 +16,7 @@ class AccountPageWidget extends StatefulWidget {
}

class AccountPageWidgetState extends State<AccountPageWidget> {
final PagingController<int, StatusWidget> pagingController =
final PagingController<int, FeedStatusWidget> pagingController =
PagingController(firstPageKey: 1);

@override
Expand All @@ -32,7 +33,7 @@ class AccountPageWidgetState extends State<AccountPageWidget> {
await mstdn.v1.accounts.lookupStatuses(accountId: widget.accountId);
List responseList = response.data;
final postList = responseList
.map((data) => StatusWidget(
.map((data) => FeedStatusWidget(
statusId: data.id,
))
.toList();
Expand Down Expand Up @@ -77,9 +78,9 @@ class AccountPageWidgetState extends State<AccountPageWidget> {
),
];
},
body: PagedListView<int, StatusWidget>(
body: PagedListView<int, FeedStatusWidget>(
pagingController: pagingController,
builderDelegate: PagedChildBuilderDelegate<StatusWidget>(
builderDelegate: PagedChildBuilderDelegate<FeedStatusWidget>(
itemBuilder: (context, item, index) {
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
Expand Down
File renamed without changes.
File renamed without changes.
11 changes: 6 additions & 5 deletions lib/pages/home_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';

import '../globals.dart';
import '../widgets/post_in_feed_widget.dart';

class HomePageWidget extends StatefulWidget {
const HomePageWidget({super.key});
Expand All @@ -12,7 +13,7 @@ class HomePageWidget extends StatefulWidget {
}

class HomePageWidgetState extends State<HomePageWidget> {
final PagingController<int, StatusWidget> pagingController =
final PagingController<int, FeedStatusWidget> pagingController =
PagingController(firstPageKey: 1);

@override
Expand All @@ -28,7 +29,7 @@ class HomePageWidgetState extends State<HomePageWidget> {
final response = await mstdn.v1.timelines.lookupHomeTimeline();
List responseList = response.data;
final postList = responseList
.map((data) => StatusWidget(
.map((data) => FeedStatusWidget(
statusId: data.id,
))
.toList();
Expand Down Expand Up @@ -56,11 +57,11 @@ class HomePageWidgetState extends State<HomePageWidget> {
Widget build(BuildContext context) => Scaffold(
body: RefreshIndicator(
onRefresh: () => Future.sync(pagingController.refresh),
child: PagedListView<int, StatusWidget>(
child: PagedListView<int, FeedStatusWidget>(
pagingController: pagingController,
builderDelegate: PagedChildBuilderDelegate<StatusWidget>(
builderDelegate: PagedChildBuilderDelegate<FeedStatusWidget>(
animateTransitions: true,
itemBuilder: (context, item, index) => StatusWidget(
itemBuilder: (context, item, index) => FeedStatusWidget(
statusId: item.statusId,
),
),
Expand Down
1 change: 1 addition & 0 deletions lib/pages/search_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';

//todo posts
class SearchWithTabs extends StatelessWidget {
@override
Widget build(BuildContext context) {
Expand Down
111 changes: 111 additions & 0 deletions lib/widgets/post_in_feed_widget.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
import 'package:aadj/globals.dart';
import 'package:aadj/widgets/post_bottom_bar.dart';
import 'package:aadj/widgets/post_thread_view.dart';
import 'package:aadj/widgets/post_view.dart';
import 'package:flutter/material.dart';
import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
import 'package:mastodon_api/mastodon_api.dart';

class FeedStatusWidget extends StatefulWidget {
final String statusId;

const FeedStatusWidget({super.key, required this.statusId});

@override
_FeedStatusWidgetState createState() => _FeedStatusWidgetState();
}

class _FeedStatusWidgetState extends State<FeedStatusWidget> {
late Future<Status> _futureStatus;
@override
void initState() {
super.initState();
_futureStatus = _fetchStatus();
}

Future<Status> _fetchStatus() async {
try {
final response =
await mstdn.v1.statuses.lookupStatus(statusId: widget.statusId);
//print(response.data.toString());
return response.data;
} on MastodonException catch (e) {
print(e.toString());
return Future.error(e);
}
}

@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(15),
child: Container(
height: MediaQuery.of(context).size.height,
decoration: const BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(15)),
color: Colors.amber,
),
child: Column(
children: [
InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
StatusContextWidget(statusId: widget.statusId),
),
);
},
child: Padding(
padding: const EdgeInsets.all(20),
child: FutureBuilder<Status>(
future: _futureStatus,
builder: (context, snapshot) {
if (snapshot.hasData) {
Status status = snapshot.data!;
return SizedBox(
height: MediaQuery.of(context).size.height,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// status.isReblogged != null
// ? Row(
// children: [
// Icon(Icons.repeat_on),
// Text(status.isReblogged.toString())
// ],
// )
// : const SizedBox(height: 0),
// status.inReplyToAccountId != null
// ? Row(
// children: [
// Icon(Icons.reply),
// Text(status.inReplyToAccountId
// .toString())
// ],
// )
// : const SizedBox(height: 0),

StatusWidget(statusId: widget.statusId),
],
),
),
);
} else if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
} else {
return Center(child: CircularProgressIndicator());
}
},
),
),
)
],
),
),
);
}
}
7 changes: 4 additions & 3 deletions lib/widgets/post_thread_view.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:aadj/widgets/post_in_feed_widget.dart';
import 'package:aadj/widgets/post_view.dart';
import 'package:flutter/material.dart';
import 'package:mastodon_api/mastodon_api.dart';
Expand Down Expand Up @@ -81,7 +82,7 @@ class _StatusContextWidgetState extends State<StatusContextWidget> {
children: [
// Display ancestors
...statusContext.ancestors
.map((ancestor) => StatusWidget(statusId: ancestor.id)),
.map((ancestor) => FeedStatusWidget(statusId: ancestor.id)),

// Display the status itself
Container(
Expand All @@ -96,8 +97,8 @@ class _StatusContextWidgetState extends State<StatusContextWidget> {
),
),
// Display descendants (replies)
...statusContext.descendants
.map((descendant) => StatusWidget(statusId: descendant.id)),
...statusContext.descendants.map(
(descendant) => FeedStatusWidget(statusId: descendant.id)),
],
);
} else if (snapshot.hasError) {
Expand Down
143 changes: 77 additions & 66 deletions lib/widgets/post_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ class StatusWidget extends StatefulWidget {

class _StatusWidgetState extends State<StatusWidget> {
late Future<Status> _futureStatus;

@override
void initState() {
super.initState();
Expand Down Expand Up @@ -45,75 +44,87 @@ class _StatusWidgetState extends State<StatusWidget> {
borderRadius: BorderRadius.all(Radius.circular(15)),
color: Colors.amber,
),
child: InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
StatusContextWidget(statusId: widget.statusId),
),
);
},
child: Padding(
padding: const EdgeInsets.all(20),
child: FutureBuilder<Status>(
future: _futureStatus,
builder: (context, snapshot) {
if (snapshot.hasData) {
Status status = snapshot.data!;
return SizedBox(
height: MediaQuery.of(context).size.height,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
status.account.displayName,
style: const TextStyle(
fontWeight: FontWeight.bold,
fontSize: 18,
child: Column(
children: [
Padding(
padding: const EdgeInsets.all(20),
child: FutureBuilder<Status>(
future: _futureStatus,
builder: (context, snapshot) {
if (snapshot.hasData) {
Status status = snapshot.data!;
return SizedBox(
height: MediaQuery.of(context).size.height,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// status.isReblogged != null
// ? Row(
// children: [
// Icon(Icons.repeat_on),
// Text(status.isReblogged.toString())
// ],
// )
// : const SizedBox(height: 0),
// status.inReplyToAccountId != null
// ? Row(
// children: [
// Icon(Icons.reply),
// Text(status.inReplyToAccountId
// .toString())
// ],
// )
// : const SizedBox(height: 0),

Text(
status.account.displayName,
style: const TextStyle(
fontWeight: FontWeight.bold,
fontSize: 18,
),
),
),
const SizedBox(height: 8),
// Text(
// status.content,
// style: const TextStyle(fontSize: 16),
// ),
HtmlWidget(status.content),
Expanded(
child: Column(
children: status.mediaAttachments
.map((media) => Padding(
padding: const EdgeInsets.only(top: 16),
child: Image.network(
media.previewUrl,
width: double.infinity,
fit: BoxFit.fitHeight,
),
))
.toList(),
const SizedBox(height: 8),
// Text(
// status.content,
// style: const TextStyle(fontSize: 16),
// ),
HtmlWidget(status.content),
Expanded(
child: Column(
children: status.mediaAttachments
.map((media) => Padding(
padding:
const EdgeInsets.only(top: 16),
child: Image.network(
media.previewUrl,
//width: double.infinity,
fit: BoxFit.fitHeight,
),
))
.toList(),
),
),
),
//AnyLinkPreview(link: '',) todo link preview
PostBottomBar(
statusId: widget.statusId,
isReblogged: status.isReblogged,
isFavourited: status.isFavourited,
isBookmarked: status.isBookmarked),
],
//AnyLinkPreview(link: '',) todo link preview
PostBottomBar(
statusId: widget.statusId,
isReblogged: status.isReblogged,
isFavourited: status.isFavourited,
isBookmarked: status.isBookmarked),
],
),
),
),
);
} else if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
} else {
return Center(child: CircularProgressIndicator());
}
},
);
} else if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
} else {
return Center(child: CircularProgressIndicator());
}
},
),
),
),
],
),
),
);
Expand Down

0 comments on commit 6d56580

Please sign in to comment.