Bloc: Bug in CupertinoTabview

Created on 17 Dec 2019  Β·  4Comments  Β·  Source: felangel/bloc

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

question

Most helpful comment

ok,I have tried and it works well.It helps me so much!

All 4 comments

Can you provide some code? Or should this question be moved to Stackoverflow?

tabbar

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();
              },
            );
 }

      },
    );
  }
}

meBlocProviderPage

class MeBlocProvidePage extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return BlocProvider<MeBloc>(
      create: (context) => MeBloc(),
      child: MePage(),
    );
  }
}

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();
  }

some code in mePageContent

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

══║ 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!

Was this page helpful?
0 / 5 - 0 ratings

Related issues

ricktotec picture ricktotec  Β·  3Comments

clicksocial picture clicksocial  Β·  3Comments

krusek picture krusek  Β·  3Comments

MahdiPishguy picture MahdiPishguy  Β·  3Comments

tigranhov picture tigranhov  Β·  3Comments