使用不包含 Bloc 类型的上下文调用 BlocProvider.of()
Posted
技术标签:
【中文标题】使用不包含 Bloc 类型的上下文调用 BlocProvider.of()【英文标题】:BlocProvider.of() called with a context that does not contain a Bloc of type 【发布时间】:2020-10-25 02:31:45 【问题描述】:@override
Widget build(BuildContext context)
return MultiBlocProvider(
providers: [
BlocProvider<TripDetailBloc>(create: (BuildContext context) => TripDetailBloc()),
BlocProvider<PopUpBloc>(create: (BuildContext context) => PopUpBloc()),
],
child: Scaffold(
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: ()
BlocProvider.of<TripDetailBloc>(context).add(AddTripDetailPannelEvent());
,
),
appBar: appbar(),
body: pannel(),
)
);
在处理手势时抛出以下断言:
TripDetailBloc。 从传递给的上下文中找不到祖先 BlocProvider.of<TripDetailBloc>()
.
如果您使用的上下文来自
BlocProvider。
他使用的上下文是:TripDetailPage(dependencies: [MediaQuery],
状态:_TripDetailPageState#d4ab3)
【问题讨论】:
【参考方案1】:将您的代码更改为:
Widget build(BuildContext context)
return MultiBlocProvider(
providers: [
BlocProvider<TripDetailBloc>(create: (BuildContext context) => TripDetailBloc()),
BlocProvider<PopUpBloc>(create: (BuildContext context) => PopUpBloc()),
],
child: Builder(
builder: (context)
return Scaffold(
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: ()
BlocProvider.of<TripDetailBloc>(context).add(AddTripDetailPannelEvent());
,
),
appBar: appbar(),
body: pannel(),
);
)
);
如果您仔细观察,我已将您的 Scaffold 敲击成一个小部件构建器。
【讨论】:
谢谢伙计,它对我有用。不过很奇怪,如果您想直接从子小部件访问而不在中间创建任何构建方法,我猜提供者无法访问上下文。【参考方案2】:将您的脚手架包装在构建器小部件中并使用该上下文。 .of(context) 使用的上下文与方法 build(BuildContext context) 相同,这就是它找不到它的原因
【讨论】:
以上是关于使用不包含 Bloc 类型的上下文调用 BlocProvider.of()的主要内容,如果未能解决你的问题,请参考以下文章
使用不包含 Bloc 类型的上下文调用 BlocProvider.of()
BlocProvider.of() 使用不包含 Bloc<dynamic,dynamic> 类型的 Bloc 的上下文调用
使用不包含 PhoneAuthenticationBloc 类型的 Bloc 的上下文调用 BlocProvider.of()。扑
使用不包含 Bloc 类型的上下文调用 Flutter BlocProvider.of()