Provider .read() Vs .watch()
I just updated my flutter_bloc
library to 6.1.1
in which states:
bloc' is deprecated and shouldn't be used. Use context.read or context.watch instead. Will be removed in v7.0.0. Try replacing the use of the deprecated member with the replacement.
Here is a part of code that I did have to change:
class ContractSubscriptionForm extends StatelessWidget {
final ContractSubscription contractSubscription;
const ContractSubscriptionForm(this.contractSubscription, {Key key})
: super(key: key);
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => ContractSubscriptionFormBloc(
contractSubscription,
context.read<CoursesGroupBloc>().state.coursesGroupList, // <---change to .read()
),
child: SubscriptionFormBody(),
);
}
}
The part I did change is this: context.bloc<CoursesGroupBloc>().state.coursesGroupList,
to context.read<CoursesGroupBloc>().state.coursesGroupList,
and is now working.
In the documentation for the .read()
function I read the following:
This method is the opposite of [watch]. It will not make widget rebuild when the value changes and cannot be called inside [StatelessWidget.build]/[State.build]. On the other hand, it can be freely called outside of these methods.
For some reason, this makes no sense, since the upper code is within a build
of a StatelessWidget and is working with the .read()
function but not with the .watch()
.
Am I missing something?
Answer
you didn't call context.read inside the StatelessWidget's build, you did that inside BlocProvider during creating ContractSubscriptionFormBloc. if you try to do the following:
class example extends StatelessWidget {
@override
Widget build(BuildContext context) {
context.read<CoursesGroupBloc>().state.coursesGroupList;
//the rest of your code
}
}
this error will appear:
Tried to use context.read<bloc>
inside either a build
method or the update
callback of a provider
Related Questions
- → How do you create a 12 or 24 mnemonics code for multiple cryptocurrencies (ETH, BTC and so on..)
- → Flutter: input text field don't work properly in a simple example..... where am I wrong?
- → Can I customize the code formatting of Dart code in Atom?
- → Is it possible to develop iOS apps with Flutter on a Linux virtual machine?
- → Display SnackBar in Flutter
- → JSON ObjectMapper in Flutter
- → Material flutter app source code
- → TabBarSelection No such method error
- → How do I set the animation color of a LinearProgressIndicator?
- → Add different routes/screens to Flutter app
- → Is there a way to get the size of an existing widget?
- → How to share a file using flutter
- → Is there an easy way to find particular text built from RichText in a Flutter test?