Skip to content

Instantly share code, notes, and snippets.

@daiki1003
Last active January 4, 2021 14:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save daiki1003/edbf2a09a01d246b02e80a9e3c996d04 to your computer and use it in GitHub Desktop.
Save daiki1003/edbf2a09a01d246b02e80a9e3c996d04 to your computer and use it in GitHub Desktop.
Is this the best way...?
class Tweet {
final String id;
final String content;
}
// Three response classes includes tweets.
class FeedResponse {
final List<Tweet> tweets;
}
class LikedTweetResponse {
final List<Tweet> likedTweets;
}
class FavoritedTweetResponse {
final List<Tweet> favoritedTweeets;
}
// three providers that holds response class.
final feedResponseStateProvider = StateProvider<FeedResponse>(
(ref) => null,
);
final LikedTweetResponseStateProvider = StateProvider<LikedTweetResponse>(
(ref) => null,
);
final favoritedTweetResponseStateProvider = StateProvider<FavoritedTweetResponse>(
(ref) => null,
);
// search tweet from tweetId
final tweetProvider = StateProvider.family<Tweet, String>(
(ref, tweetId) {
final feedResponse = ref.watch(feedResponseStateProvider).state;
if (feedResponse != null) {
final tweet = feedResponse.tweets.firstWhere(
(tweet) => tweet.id == tweetId,
orElse: () => null,
);
if (tweet != null) {
return tweet;
}
}
final likedTweetResponse = ref.watch(likedTweetResponseStateProvider).state;
if (likedTweetResponse != null) {
final tweet = /* same above */;
...
}
final favoritedTweetResponse = ref.watch(favoritedTweetResponse).state;
if (favoritedTweetResponse != null) {
final tweet = /* same above */
...
}
return null;
},
);
// sample class displaying tweet from tweetId
class TweetDetailScreen extends HookWidget {
...
@override
Widget build(BuildContext context) {
final tweetId = /* fetch tweet id from somewhere maybe arguments */
final tweet = useProvider(tweetProvider(tweetId)).state;
return BuildFromTweet(tweet);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment