issues
search
trm11tkr
/
github-repo-search
株式会社ゆめみ様のFlutterエンジニアコードチェック課題。
0
stars
0
forks
source link
totalCountProviderの更新方法を修正する
#57
Closed
trm11tkr
closed
1 year ago
trm11tkr
commented
1 year ago
概要
現状
totalCountProvider
で取得データの合計数を管理している。
pageProvider
を
watch
してデータの取得に合わせて,
totalCountProvider
も更新している。
なぜ修正が必要か
可読性を向上させるため
テストを書きやすくするため
RepoList
からすると
totalCountProvider
など知ったこっちゃない
repoList.dart
```dart class RepoList extends ConsumerWidget { const RepoList({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final page = ref.watch(pageProvider); final pagingController = ref.watch(pageProvider.notifier); return Expanded( child: page.when( data: (data) { WidgetsBinding.instance.addPostFrameCallback( /// トータルカウントプロバイダーを更新 (_) => ref .watch(totalCountProvider.state) .update((state) => data.totalCount), ); return data.items.isEmpty ? const NotFound() : RepoListBuilder( repos: data.items, onLoading: pagingController.fetchNextBatch, hasNext: pagingController.hasNext, ); }, loading: () => const Center( child: CircularProgressIndicator(), ), error: (error, stack) { /// トータルカウントプロバイダーを更新(表示させない) WidgetsBinding.instance.addPostFrameCallback( <--------------------- ここ!!!!! (_) => ref.watch(totalCountProvider.state).update((state) => null), ); return RetryButton( title: error.toString(), textButton: ElevatedButton( onPressed: pagingController.fetchFirstBatch, child: Text(i18n.retry), ), ); }, onGoingError: (previousData, error, stack) { WidgetsBinding.instance.addPostFrameCallback((_) { context.showSnackBar(error.toString()); }); return RepoListBuilder( repos: previousData.items, onLoading: pagingController.fetchNextBatch, ); }, onGoingLoading: (previousData) { return RepoListBuilder( repos: previousData.items, onLoading: pagingController.fetchNextBatch, ); }, ), ); } } ```
解決策
totalCountProvider
の中で
pageProvider
をwatchし更新作業を行う。
概要
現状
totalCountProvider
で取得データの合計数を管理している。pageProvider
をwatch
してデータの取得に合わせて,totalCountProvider
も更新している。なぜ修正が必要か
RepoList
からするとtotalCountProvider
など知ったこっちゃないrepoList.dart
```dart class RepoList extends ConsumerWidget { const RepoList({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final page = ref.watch(pageProvider); final pagingController = ref.watch(pageProvider.notifier); return Expanded( child: page.when( data: (data) { WidgetsBinding.instance.addPostFrameCallback( /// トータルカウントプロバイダーを更新 (_) => ref .watch(totalCountProvider.state) .update((state) => data.totalCount), ); return data.items.isEmpty ? const NotFound() : RepoListBuilder( repos: data.items, onLoading: pagingController.fetchNextBatch, hasNext: pagingController.hasNext, ); }, loading: () => const Center( child: CircularProgressIndicator(), ), error: (error, stack) { /// トータルカウントプロバイダーを更新(表示させない) WidgetsBinding.instance.addPostFrameCallback( <--------------------- ここ!!!!! (_) => ref.watch(totalCountProvider.state).update((state) => null), ); return RetryButton( title: error.toString(), textButton: ElevatedButton( onPressed: pagingController.fetchFirstBatch, child: Text(i18n.retry), ), ); }, onGoingError: (previousData, error, stack) { WidgetsBinding.instance.addPostFrameCallback((_) { context.showSnackBar(error.toString()); }); return RepoListBuilder( repos: previousData.items, onLoading: pagingController.fetchNextBatch, ); }, onGoingLoading: (previousData) { return RepoListBuilder( repos: previousData.items, onLoading: pagingController.fetchNextBatch, ); }, ), ); } } ```解決策
totalCountProvider
の中でpageProvider
をwatchし更新作業を行う。