Describe the bug
I used blocprovider in CupertinoTabView,and I first create a blocprovider in CupertinoTabViewβs child.then In the Blocbuilderβs child ,I need add one event to this bloc,But when I use provider.of ,notice me can not find the bloc.The exception says the problem may caused by CupertinoTabview. I have tried several solution but not worked all. I donβt want to use global bloc,so who can explain how it gets problem
Flutter doctor is all right
Can you provide some code? Or should this question be moved to Stackoverflow?
class TabPage extends StatelessWidget{
@override
Widget build(BuildContext context) {
// TODO: implement build
return CupertinoTabScaffold(
tabBar: CupertinoTabBar(
items: const<BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.collections),
title: Text("card")
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.folder_open),
title: Text("list")
),
BottomNavigationBarItem(
icon: Icon(CupertinoIcons.person),
title: Text("me")
)
],
),
tabBuilder: (context,index){
switch(index){
case 0:
return CupertinoTabView(
builder: (context){
return CardsPage();
});
case 1:
return CupertinoTabView(
builder: (context){
return ListPage();
},
);
case 2:
return CupertinoTabView(
builder: (context){
return MeBlocProvidePage();
},
);
}
},
);
}
}
class MeBlocProvidePage extends StatelessWidget{
@override
Widget build(BuildContext context) {
// TODO: implement build
return BlocProvider<MeBloc>(
create: (context) => MeBloc(),
child: MePage(),
);
}
}
class MePage extends StatefulWidget {
State<MePage> createState() => _MePageState();
}
class _MePageState extends State<MePage>{
@override
void initState() {
// TODO: implement initState
super.initState();
BlocProvider.of<MeBloc>(context).add(CatchMeData());
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return BlocBuilder<MeBloc, MeState>(builder: (context, state) {
if(state is MeInvalidToken){
AuthenticationBloc authentication = BlocProvider.of<AuthenticationBloc>(context);
authentication.add(LoggedOut());
authentication.close();
}
if (state is MeFailure) {
return SplashPage();
}
if (state is MeLoaded) {
return MePageContent(meData: state.meData,version: state.version);
}
return SplashPage();
});
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
}
class MePageContent extends StatefulWidget{
final MeData meData;
final String version;
MePageContent({@required this.meData,@required this.version});
@override
_MePageContentState createState() => _MePageContentState();
}
class _MePageContentState extends State<MePageContent>{
@override
Widget build(BuildContext context) {
// TODO: implement build
return CupertinoPageScaffold(
child: SafeArea(
child: SingleChildScrollView(
child: Column(
children: <Widget>[...
_MenuButton(
iconData: CupertinoIcons.phone,
title: "ζ΄ζΉζζΊ",
desc: widget.meData.phone != null ? widget.meData.phone : "",
onTap: () {
Navigator.of(context).push(CupertinoPageRoute(builder: (context){
return BlocProvider<ChangePhoneBloc>(
create: (context)=>ChangePhoneBloc(),
child: BlocProvider<ChangePhoneFormBloc>(
create: (context) => ChangePhoneFormBloc(),
child: BlocProvider.value(value: BlocProvider.of<MeBloc>(context),child: ChangePhonePage(),),
),
);
}));
},
),
],
),
),
),
);
}
βββ‘ EXCEPTION CAUGHT BY WIDGETS LIBRARY ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
flutter: The following assertion was thrown building Builder(dirty):
flutter: BlocProvider.of() called with a context that does not contain a Bloc of type MeBloc.
flutter: No ancestor could be found starting from the context that was passed to
flutter: BlocProvider.of<MeBloc>().
flutter:
flutter: This can happen if:
flutter: 1. The context you used comes from a widget above the BlocProvider.
flutter: 2. You used MultiBlocProvider and didn't explicity provide the BlocProvider types.
flutter:
flutter: Good: BlocProvider<MeBloc>(create: (context) => MeBloc())
flutter: Bad: BlocProvider(create: (context) => MeBloc()).
flutter:
flutter: The context used was: Builder(dirty)
flutter:
flutter:
flutter: The relevant error-causing widget was:
flutter: CupertinoTabView
flutter: file:///Users/macguffin/AndroidStudioProjects/rms_v2/rms_v2/lib/pages/tab_page.dart:47:20
flutter:
flutter: When the exception was thrown, this was the stack:
flutter: #0 BlocProvider.of (package:flutter_bloc/src/bloc_provider.dart:86:7)
flutter: #1 _MePageContentState.build.<anonymous closure>.<anonymous closure> (package:rms_v2/pages/me_page/me_page_content.dart:231:71)
flutter: #2 CupertinoPageRoute.buildPage (package:flutter/src/cupertino/route.dart:257:26)
flutter: #3 _ModalScopeState.build.<anonymous closure> (package:flutter/src/widgets/routes.dart:710:43)
flutter: #4 Builder.build (package:flutter/src/widgets/basic.dart:6757:41)
flutter: #5 StatelessElement.build (package:flutter/src/widgets/framework.dart:4291:28)
flutter: #6 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4223:15)
flutter: #7 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #8 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4206:5)
flutter: #9 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
flutter: #10 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #11 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #12 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5445:14)
flutter: #13 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #14 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #15 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5445:14)
flutter: #16 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #17 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #18 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
flutter: #19 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #20 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4206:5)
flutter: #21 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4381:11)
flutter: #22 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
flutter: #23 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #24 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5551:32)
flutter: #25 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #26 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #27 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
flutter: #28 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #29 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4206:5)
flutter: #30 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4381:11)
flutter: #31 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
flutter: #32 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #33 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #34 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5445:14)
flutter: #35 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #36 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #37 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
flutter: #38 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #39 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4206:5)
flutter: #40 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4381:11)
flutter: #41 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
flutter: #42 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #43 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #44 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5445:14)
flutter: #45 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #46 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #47 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
flutter: #48 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #49 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4206:5)
flutter: #50 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4381:11)
flutter: #51 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
flutter: #52 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #53 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #54 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5445:14)
flutter: #55 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #56 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #57 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
flutter: #58 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #59 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4206:5)
flutter: #60 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4381:11)
flutter: #61 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
flutter: #62 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #63 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #64 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
flutter: #65 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #66 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4206:5)
flutter: #67 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
flutter: #68 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #69 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #70 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
flutter: #71 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #72 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4206:5)
flutter: #73 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4381:11)
flutter: #74 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
flutter: #75 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #76 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #77 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5445:14)
flutter: #78 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #79 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #80 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
flutter: #81 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #82 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4206:5)
flutter: #83 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
flutter: #84 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #85 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #86 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5445:14)
flutter: #87 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #88 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #89 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
flutter: #90 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #91 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4206:5)
flutter: #92 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4381:11)
flutter: #93 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
flutter: #94 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #95 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #96 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
flutter: #97 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #98 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4206:5)
flutter: #99 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
flutter: #100 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #101 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #102 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5445:14)
flutter: #103 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #104 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #105 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
flutter: #106 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #107 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4206:5)
flutter: #108 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
flutter: #109 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #110 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #111 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
flutter: #112 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #113 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4206:5)
flutter: #114 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4381:11)
flutter: #115 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
flutter: #116 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #117 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #118 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
flutter: #119 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #120 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4206:5)
flutter: #121 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4381:11)
flutter: #122 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
flutter: #123 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)
flutter: #124 Element.updateChild (package:flutter/src/widgets/framework.dart:2988:12)
flutter: #125 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5219:32)
flutter: #126 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5561:17)
flutter: #127 Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
flutter: #128 _TheatreElement.update (package:flutter/src/widgets/overlay.dart:605:16)
flutter: #129 Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
flutter: #130 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
flutter: #131 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #132 StatefulElement.update (package:flutter/src/widgets/framework.dart:4413:5)
flutter: #133 Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
flutter: #134 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
flutter: #135 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #136 ProxyElement.update (package:flutter/src/widgets/framework.dart:4557:5)
flutter: #137 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:94:11)
flutter: #138 Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
flutter: #139 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5452:14)
flutter: #140 Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
flutter: #141 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
flutter: #142 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #143 StatefulElement.update (package:flutter/src/widgets/framework.dart:4413:5)
flutter: #144 Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
flutter: #145 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5452:14)
flutter: #146 Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
flutter: #147 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:5452:14)
flutter: #148 Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
flutter: #149 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
flutter: #150 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #151 StatelessElement.update (package:flutter/src/widgets/framework.dart:4298:5)
flutter: #152 Element.updateChild (package:flutter/src/widgets/framework.dart:2977:15)
flutter: #153 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4243:16)
flutter: #154 Element.rebuild (package:flutter/src/widgets/framework.dart:3947:5)
flutter: #155 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2432:33)
flutter: #156 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:775:20)
flutter: #157 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:283:5)
flutter: #158 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1102:15)
flutter: #159 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1041:9)
flutter: #160 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:957:5)
flutter: #164 _invoke (dart:ui/hooks.dart:259:10)
flutter: #165 _drawFrame (dart:ui/hooks.dart:217:3)
flutter: (elided 3 frames from package dart:async)
I have tried to get bloc in mePage by initState,but I get the bloc first,after I add event,console tells me can't add event after close.I guess the problem is caused by CupertinoTabbar's special route.So,I ask this here.
Hi @MacGuffinLife π
Thanks for opening an issue!
I believe the problem is you're using the context from the new CupertinoPageRoute which is disconnected from the parent context. Can you please try refactoring your onTap in mePageContent to:
onTap: () {
Navigator.of(context).push(CupertinoPageRoute(builder: (_){ // ignore context from page route
return BlocProvider<ChangePhoneBloc>(
create: (_)=>ChangePhoneBloc(),
child: BlocProvider<ChangePhoneFormBloc>(
create: (_) => ChangePhoneFormBloc(),
child: BlocProvider.value(value: BlocProvider.of<MeBloc>(context),child: ChangePhonePage(),),
),
);
}
Let me know if that helps! π
ok,I have tried and it works well.It helps me so much!
Most helpful comment
ok,I have tried and it works well.It helps me so much!