我刚刚将flutter_bloc
库更新为6.1.1
,其中状态为:
bloc'已弃用,不应使用。请改用context.read或context.watch。将在v7.0.0中删除。尝试用替换项替换不推荐使用的成员。
以下是我必须更改的部分代码:
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(),
);
}
}
我更改的部分是:context.bloc<CoursesGroupBloc>().state.coursesGroupList,
到context.read<CoursesGroupBloc>().state.coursesGroupList,
,现在正在工作。
在.read()
函数的文档中,我阅读了以下内容:
此方法与[watch]相反。当值发生变化时,它不会重新生成小部件,并且不能在[StatelessWidget.build]/[State.build]内部调用。另一方面,它可以在这些方法之外自由调用。
出于某种原因,这毫无意义,因为上层代码位于StatelessWidget的build
中,并且与.read()
函数一起工作,但与.watch()
不一起工作。
我是不是错过了什么?
您没有在StatelessWidget的构建中调用context.read,而是在创建ContractSubscriptionFormBloc的过程中在BlocProvider中调用的。如果您尝试执行以下操作:
class example extends StatelessWidget {
@override
Widget build(BuildContext context) {
context.read<CoursesGroupBloc>().state.coursesGroupList;
//the rest of your code
}
}
将出现此错误:尝试在build
方法或提供者的update
回调中使用context.read<bloc>
在提供程序中,.read((用于变量,.watch((用于函数。