Closed trm11tkr closed 2 years ago
リクエストパラメータクラスはfreezedで作成
pageパラメータのインクリメントでページングを行う予定なので int型で扱いたいが、toJsonでエラーを吐いてしまうので以下のようにカスタムコンバーターを適用する
class IntAndStringConverter implements JsonConverter<int, String> {
const IntAndStringConverter();
@override
int fromJson(String value) => int.parse(value);
@override
String toJson(int value) {
return value.toString();
}
}
class RepoSearchRequestParam with _$RepoSearchRequestParam {
const factory RepoSearchRequestParam({
required String q,
String? sort,
String? order,
@IntAndStringConverter() @Default(30) int perPage,
@IntAndStringConverter() @Default(1) int page,
}) = _RepoSearchRequestParam;
factory RepoSearchRequestParam.fromJson(Map<String, dynamic> json) =>
_$RepoSearchRequestParamFromJson(json);
}
リクエストパラメータをクエリに反映させることでページ指定可能にした
final repoSearchProvider = FutureProvider((ref) {
final searchQuery = ref.watch(searchQueryProvider);
final requestParam = RepoSearchRequestParam(
q: searchQuery,
perPage: 10,
page: 2,
);
return ref.watch(repoSearchClientProvider).get(
queryParameters: requestParam.toJson(),
fromJson: GithubReposState.fromJson,
);
});
スクロールによってページングしたいので、以前に取得したデータも保持したい。
StateNotifierProviderを利用
エラーが発生しても以前の取得データは表示したい
概要
現状は、各検索キーワードに対して1ページ分しか取得してこれないので、ページングに対応する。 パラメータでページ番号を設定できる。
タスク