2

映画をダウンロードしてリストに渡すキュービットがあります。

class MovieSearchCubit extends Cubit<MovieState> {
  MovieSearchRepoInterface movieSearchRepository;
  List<Movie> emptyList = [];

  MovieSearchCubit({required this.movieSearchRepository})
      : super(const MovieState());

  Future<void> fetchMovies(String movieName) async {

    if (state.status != MovieStatus.failure) {
      final movies = await movieSearchRepository.searchMovies(movieName);

      if (movies.isRight()) {
    

        emit(state.copyWith(
            status: MovieStatus.success,
            posts: List.of(state.movies)
              ..addAll(
                movies.getOrElse((l) => emptyList),
              )));
      } else {
        emit(state.copyWith(status: MovieStatus.failure));
      }
    }
  }
}

そして、私は次のようにBlocBuilderでそれを呼び出しています:

    BlocBuilder<MovieSearchCubit, MovieState>(
                    builder: (context, state) {
                  switch (state.status) {
                    case MovieStatus.failure:
                      return const Center(child: Text('failed to fetch posts'));
                    case MovieStatus.success:
                      if (state.movies.isEmpty) {
                        return const Center(child: Text('no posts'));
                      }
                      return Expanded(
                        child: ListView.builder(
                          shrinkWrap: true,
                          itemBuilder: (BuildContext context, int index) {
                            return index >= state.movies.length
                                ? BottomLoader()
                                : MovieCard(
                                    });
                          },
                          itemCount: state.movies.length,
                        ),
                      );

                    default:
                      return Container();
                  }
                }),

ボタンを押してcubit関数fetchMoviesをトリガーしています:

IconButton(
                      icon: const Icon(Icons.search),
                      onPressed: () async {
                        await context.read<MovieSearchCubit>().fetchMovies(inputStr);
                      },
                    ),

しかし、リストは初回のみ作成され、データは正しく収集され、問題は表示にあります。ヒントをありがとう。

後で追加: ここでは MovieState のように見えます

 class MovieState extends Equatable {
  const MovieState({
    this.status = MovieStatus.initial,
    this.movies = const <Movie>[],
  });

  final MovieStatus status;
  final List<Movie> movies;

  MovieState copyWith({
    MovieStatus? status,
    List<Movie>? posts,
  }) {
    return MovieState(
      status: status ?? this.status,
      movies: posts ?? this.movies,
    );
  }

  @override
  List<Object?> get props => [];
}
4

1 に答える 1