Skip to content

monoレビュー 🐶 #13

@mono0926

Description

@mono0926

全体的に良い感じだと思いました 👍 ✨

Slackコメントに返答

画面の状態はStateNotifierでまるっと提供

関連する状態はStateNotifierでまとめるべきですが、直接関連しない状態は適切な小さめの粒度で分けるのが良いです。
mono0926@1bf39admono0926@081d230 のようにするのが良いと思います。

Page単位でまとめるより、関連する状態の単位でまとめる方が組みやすいはずです。
Pageまたがったり複数箇所で必要な状態もありますし。

詳細画面は↑をやるとオーバーエンジニアリングに感じたのでFutureProviderで
ただし、規模の大きなアプリになったら統一させた方がいいんかな…

基本的には適切な種類のProviderを過不足なく組み合わせるのが良いと思っています。
アプリ自体の規模というより、メンバーの統制的に多少冗長なコードになったとしても何かしらの分かりやすい方針提示して画一的なコードにしたいとかなら、仕方なくStateNotifierProviderに寄せるとかありかもしれませんが。

その他気になった点箇条書き

全体的に良い感じな前提で、気になったところのみ列挙している感じです 🙏
※ 好みによるところや、僕が誤っているところが含まれている可能性もあります。

  • buildをメソッドで分割している箇所は、Widget分割に統一がベター(あるいは読みにくくない範囲でベタ書きで済ませると良い)

例えば、

body: _buildBody(context, ref),
は分断されているより、以下のように書かれている方がそのまま一目で読めてむしろ読みやすいと思います。
(もちろん全てベタ書きだとカオスになるので、各種要素を適切にWidget分割することとセット)

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final searchState = ref.watch(
        searchPageStateNotifierProvider.select((value) => value.searchState));
    return Scaffold(
      appBar: _SearchAppBar(),
      body: searchState.when(
        uninitialized: () {
          return Container();
        },
        searching: () {
          return const LoadingView();
        },
        success: (repositories, query, page, haxNext) {
          return _buildListView(context, ref, repositories, haxNext);
        },
        fetchingNext: (repositories, query, page) {
          return _buildListView(context, ref, repositories, true);
        },
        fail: () {
          return const ErrorView();
        },
        empty: () {
          return const ErrorView(
            message: '検索結果は0件です',
          );
        },
      ),
    );
  }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions