Provider .read() vs .watch()



我刚刚将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((用于函数。

相关内容

  • 没有找到相关文章

最新更新