13
 Widget build(BuildContext context) {
    final appBar = AppBar(
      title: Text(
        "Romantic Comedy",
      ),
      actions: [
        IconButton(
          icon: Icon(Icons.search),
          onPressed: () {
            showSearch(
                context: context,
                delegate: MaterialSearch(_pagingController.itemList));
          },
        ),
      ],
    );

    return Scaffold(
        backgroundColor: Colors.black,
        appBar: appBar,
        body: BlocConsumer<MovieBloc, MovieState>(
            listener: (context, movieState) {

            },
            builder: (context, movieState) {
              if (movieState is MovieSuccessState) {
                movieBloc.movies.addAll(movieState.movies);
              }
              return GridView.builder(
                  controller: _scrollController
                    ..addListener(() {
                      if (_scrollController.offset ==
                          _scrollController.position.maxScrollExtent) {
                        context.bloc<MovieBloc>()
                          ..isFetching = true
                          ..add(Fetch());
                      }
                    }),
                  padding: EdgeInsets.only(left: 12.0, right: 12.0),
                  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                      crossAxisCount: 3),
                  itemBuilder: (context, index) => MovieTile(_movies[index]));
            }));
  }
Abraham Mathew
  • 2,029
  • 3
  • 21
  • 42

2 Answers2

31

After flutter_bloc v6.1.0,

Both context.bloc and context.repository are deprecated and replaced with context.read and context.watch.

Checkout the migration guide for more information.

krishnaacharyaa
  • 14,953
  • 4
  • 49
  • 88
Adnan Alshami
  • 949
  • 1
  • 7
  • 22
1

I think that the below code that you used means that will use bloc from the parent widget defined with BlocProvider. But because it seems that you have a bloc instance in this widget you just use that instance.

// with extensions
context.bloc<BlocA>();

// without extensions
BlocProvider.of<BlocA>(context)

Because you used movieBloc at the MovieSuccessState state, I think you can just refer isFetching and add method using movieBloc instead of context.bloc<MovieBloc>().

return GridView.builder(
                  controller: _scrollController
                    ..addListener(() {
                      if (_scrollController.offset ==
                          _scrollController.position.maxScrollExtent) {
                        //context.bloc<MovieBloc>()
                        //  ..isFetching = true
                        //  ..add(Fetch());
                        movieBloc.isFetching = true;
                        movieBloc.add(Fetch());
                      }
                    }),
Tharindu Lakshan
  • 3,995
  • 6
  • 24
  • 44
KuKu
  • 6,654
  • 1
  • 13
  • 25
  • Sorry , I need to access bloc from parent – Abraham Mathew Jul 07 '21 at 05:39
  • Through 'movieBloc.movies.addAll(movieState.movies);', I think that there is a bloc instance in this widget already. With your bloc version and Adnan Alshami's comment, it seems that you need to migrate. – KuKu Jul 07 '21 at 05:56