Skip to content

Commit

Permalink
Fixed media not displaying in a few places. Fixes #470
Browse files Browse the repository at this point in the history
  • Loading branch information
jonjomckay committed Sep 4, 2022
1 parent 614f366 commit 4e3dc9f
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 86 deletions.
55 changes: 31 additions & 24 deletions lib/group/_feed.dart
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
import 'package:catcher/catcher.dart';
import 'package:flutter/material.dart';
import 'package:fritter/client.dart';
import 'package:fritter/constants.dart';
import 'package:fritter/database/entities.dart';
import 'package:fritter/generated/l10n.dart';
import 'package:fritter/profile/profile.dart';
import 'package:fritter/tweet/conversation.dart';
import 'package:fritter/ui/errors.dart';
import 'package:fritter/utils/iterables.dart';
import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';
import 'package:pref/pref.dart';
import 'package:provider/provider.dart';

class SubscriptionGroupFeed extends StatefulWidget {
final SubscriptionGroupGet group;
Expand Down Expand Up @@ -141,30 +145,33 @@ class _SubscriptionGroupFeedState extends State<SubscriptionGroupFeed> {
onRefresh: () async {
_pagingController.refresh();
},
child: PagedListView<String?, TweetChain>(
scrollController: widget.scrollController,
pagingController: _pagingController,
addAutomaticKeepAlives: false,
builderDelegate: PagedChildBuilderDelegate(
itemBuilder: (context, conversation, index) {
return TweetConversation(
id: conversation.id, username: null, tweets: conversation.tweets, isPinned: conversation.isPinned);
},
newPageErrorIndicatorBuilder: (context) => FullPageErrorWidget(
error: _pagingController.error[0],
stackTrace: _pagingController.error[1],
prefix: L10n.of(context).unable_to_load_the_next_page_of_tweets,
onRetry: () => _listTweets(_pagingController.firstPageKey),
),
firstPageErrorIndicatorBuilder: (context) => FullPageErrorWidget(
error: _pagingController.error[0],
stackTrace: _pagingController.error[1],
prefix: L10n.of(context).unable_to_load_the_tweets_for_the_feed,
onRetry: () => _listTweets(_pagingController.nextPageKey),
),
noItemsFoundIndicatorBuilder: (context) => Center(
child: Text(
L10n.of(context).could_not_find_any_tweets_from_the_last_7_days,
child: ChangeNotifierProvider<TweetContextState>(
create: (context) => TweetContextState(PrefService.of(context, listen: false).get(optionTweetsHideSensitive)),
child: PagedListView<String?, TweetChain>(
scrollController: widget.scrollController,
pagingController: _pagingController,
addAutomaticKeepAlives: false,
builderDelegate: PagedChildBuilderDelegate(
itemBuilder: (context, conversation, index) {
return TweetConversation(
id: conversation.id, username: null, tweets: conversation.tweets, isPinned: conversation.isPinned);
},
newPageErrorIndicatorBuilder: (context) => FullPageErrorWidget(
error: _pagingController.error[0],
stackTrace: _pagingController.error[1],
prefix: L10n.of(context).unable_to_load_the_next_page_of_tweets,
onRetry: () => _listTweets(_pagingController.firstPageKey),
),
firstPageErrorIndicatorBuilder: (context) => FullPageErrorWidget(
error: _pagingController.error[0],
stackTrace: _pagingController.error[1],
prefix: L10n.of(context).unable_to_load_the_tweets_for_the_feed,
onRetry: () => _listTweets(_pagingController.nextPageKey),
),
noItemsFoundIndicatorBuilder: (context) => Center(
child: Text(
L10n.of(context).could_not_find_any_tweets_from_the_last_7_days,
),
),
),
),
Expand Down
52 changes: 29 additions & 23 deletions lib/home/_saved.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,15 @@ import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_triple/flutter_triple.dart';
import 'package:fritter/client.dart';
import 'package:fritter/constants.dart';
import 'package:fritter/database/entities.dart';
import 'package:fritter/generated/l10n.dart';
import 'package:fritter/home/home_screen.dart';
import 'package:fritter/profile/profile.dart';
import 'package:fritter/saved/saved_tweet_model.dart';
import 'package:fritter/tweet/tweet.dart';
import 'package:fritter/ui/errors.dart';
import 'package:pref/pref.dart';
import 'package:provider/provider.dart';
import 'package:scroll_app_bar/scroll_app_bar.dart';

Expand Down Expand Up @@ -39,31 +42,34 @@ class _SavedScreenState extends State<SavedScreen> {
title: Text(L10n.current.saved),
actions: createCommonAppBarActions(context),
),
body: ScopedBuilder<SavedTweetModel, Object, List<SavedTweet>>.transition(
store: model,
onError: (_, e) => FullPageErrorWidget(
error: e,
stackTrace: null,
prefix: L10n.current.unable_to_load_the_tweets,
onRetry: () => model.listSavedTweets(),
),
onLoading: (_) => const Center(child: CircularProgressIndicator()),
onState: (_, data) {
if (data.isEmpty) {
return Center(child: Text(L10n.of(context).you_have_not_saved_any_tweets_yet));
}
body: ChangeNotifierProvider(
create: (context) => TweetContextState(PrefService.of(context, listen: false).get(optionTweetsHideSensitive)),
child: ScopedBuilder<SavedTweetModel, Object, List<SavedTweet>>.transition(
store: model,
onError: (_, e) => FullPageErrorWidget(
error: e,
stackTrace: null,
prefix: L10n.current.unable_to_load_the_tweets,
onRetry: () => model.listSavedTweets(),
),
onLoading: (_) => const Center(child: CircularProgressIndicator()),
onState: (_, data) {
if (data.isEmpty) {
return Center(child: Text(L10n.of(context).you_have_not_saved_any_tweets_yet));
}

return ListView.builder(
controller: widget.scrollController,
itemCount: data.length,
itemBuilder: (context, index) {
var item = data[index];
var tweet = TweetWithCard.fromJson(jsonDecode(item.content));
return ListView.builder(
controller: widget.scrollController,
itemCount: data.length,
itemBuilder: (context, index) {
var item = data[index];
var tweet = TweetWithCard.fromJson(jsonDecode(item.content));

return TweetTile(key: Key(tweet.idStr!), tweet: tweet, clickable: true);
},
);
},
return TweetTile(key: Key(tweet.idStr!), tweet: tweet, clickable: true);
},
);
},
),
),
);
}
Expand Down
2 changes: 1 addition & 1 deletion lib/profile/_tweets.dart
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ class _ProfileTweetsState extends State<ProfileTweets> {

@override
Widget build(BuildContext context) {
return Consumer<ProfileState>(builder: (context, model, child) {
return Consumer<TweetContextState>(builder: (context, model, child) {
if (model.hideSensitive && (widget.user.possiblySensitive ?? false)) {
return EmojiErrorWidget(
emoji: '🍆🙈🍆',
Expand Down
6 changes: 3 additions & 3 deletions lib/profile/profile.dart
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,7 @@ class _ProfileScreenBodyState extends State<ProfileScreenBody> with TickerProvid
];
},
body: ChangeNotifierProvider(
create: (context) => ProfileState(PrefService.of(context, listen: false).get(optionTweetsHideSensitive)),
create: (context) => TweetContextState(PrefService.of(context, listen: false).get(optionTweetsHideSensitive)),
child: TabBarView(
controller: _tabController,
physics: const LessSensitiveScrollPhysics(),
Expand Down Expand Up @@ -419,10 +419,10 @@ class _ProfileScreenBodyState extends State<ProfileScreenBody> with TickerProvid
}
}

class ProfileState extends ChangeNotifier {
class TweetContextState extends ChangeNotifier {
bool hideSensitive;

ProfileState(this.hideSensitive);
TweetContextState(this.hideSensitive);

void setHideSensitive(bool value) {
hideSensitive = value;
Expand Down
75 changes: 41 additions & 34 deletions lib/status.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import 'package:catcher/catcher.dart';
import 'package:flutter/material.dart';
import 'package:fritter/client.dart';
import 'package:fritter/constants.dart';
import 'package:fritter/generated/l10n.dart';
import 'package:fritter/profile/profile.dart';
import 'package:fritter/tweet/conversation.dart';
import 'package:fritter/ui/errors.dart';
import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';
import 'package:pref/pref.dart';
import 'package:provider/provider.dart';
import 'package:scroll_to_index/scroll_to_index.dart';

class StatusScreenArguments {
Expand Down Expand Up @@ -98,41 +102,44 @@ class _StatusScreenState extends State<_StatusScreen> {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: PagedListView<String?, TweetChain>(
padding: EdgeInsets.zero,
pagingController: _pagingController,
scrollController: _scrollController,
addAutomaticKeepAlives: false,
shrinkWrap: true,
builderDelegate: PagedChildBuilderDelegate(
itemBuilder: (context, chain, index) {
return AutoScrollTag(
key: ValueKey(chain.id),
controller: _scrollController,
index: index,
highlightColor: Colors.white.withOpacity(1),
child: TweetConversation(id: chain.id, tweets: chain.tweets, username: null, isPinned: chain.isPinned),
);
},
firstPageErrorIndicatorBuilder: (context) => FullPageErrorWidget(
error: _pagingController.error[0],
stackTrace: _pagingController.error[1],
prefix: L10n.of(context).unable_to_load_the_tweet,
onRetry: () => _loadTweet(_pagingController.firstPageKey),
body: ChangeNotifierProvider(
create: (context) => TweetContextState(PrefService.of(context, listen: false).get(optionTweetsHideSensitive)),
child: PagedListView<String?, TweetChain>(
padding: EdgeInsets.zero,
pagingController: _pagingController,
scrollController: _scrollController,
addAutomaticKeepAlives: false,
shrinkWrap: true,
builderDelegate: PagedChildBuilderDelegate(
itemBuilder: (context, chain, index) {
return AutoScrollTag(
key: ValueKey(chain.id),
controller: _scrollController,
index: index,
highlightColor: Colors.white.withOpacity(1),
child: TweetConversation(id: chain.id, tweets: chain.tweets, username: null, isPinned: chain.isPinned),
);
},
firstPageErrorIndicatorBuilder: (context) => FullPageErrorWidget(
error: _pagingController.error[0],
stackTrace: _pagingController.error[1],
prefix: L10n.of(context).unable_to_load_the_tweet,
onRetry: () => _loadTweet(_pagingController.firstPageKey),
),
newPageErrorIndicatorBuilder: (context) => FullPageErrorWidget(
error: _pagingController.error[0],
stackTrace: _pagingController.error[1],
prefix: L10n.of(context).unable_to_load_the_next_page_of_replies,
onRetry: () => _loadTweet(_pagingController.nextPageKey),
),
noItemsFoundIndicatorBuilder: (context) {
return Center(
child: Text(
L10n.of(context).could_not_find_any_tweets_by_this_user,
),
);
},
),
newPageErrorIndicatorBuilder: (context) => FullPageErrorWidget(
error: _pagingController.error[0],
stackTrace: _pagingController.error[1],
prefix: L10n.of(context).unable_to_load_the_next_page_of_replies,
onRetry: () => _loadTweet(_pagingController.nextPageKey),
),
noItemsFoundIndicatorBuilder: (context) {
return Center(
child: Text(
L10n.of(context).could_not_find_any_tweets_by_this_user,
),
);
},
),
),
);
Expand Down
2 changes: 1 addition & 1 deletion lib/tweet/_media.dart
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ class _TweetMediaState extends State<TweetMedia> {
var largestAspectRatio =
widget.media.map((e) => ((e.sizes!.large!.w) ?? 1) / ((e.sizes!.large!.h) ?? 1)).reduce(math.max);

return Consumer<ProfileState>(builder: (context, model, child) {
return Consumer<TweetContextState>(builder: (context, model, child) {
if (model.hideSensitive && (widget.sensitive ?? false)) {
return Card(
child: Center(
Expand Down

0 comments on commit 4e3dc9f

Please sign in to comment.