Last active
January 4, 2021 14:09
-
-
Save daiki1003/edbf2a09a01d246b02e80a9e3c996d04 to your computer and use it in GitHub Desktop.
Is this the best way...?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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