Flutter “颤振返回”;从传递给I/flatter的上下文开始,找不到祖先;

Flutter “颤振返回”;从传递给I/flatter的上下文开始,找不到祖先;,flutter,dart,bloc,flutter-bloc,Flutter,Dart,Bloc,Flutter Bloc,我无法找出这个代码的错误。此页面上有一个bloc提供程序: Widget build(BuildContext context) { return MultiBlocProvider( providers: [ BlocProvider( create: (BuildContext context) { return DatabaseBloc(); }, ), BlocProvider( create: (Build

我无法找出这个代码的错误。此页面上有一个bloc提供程序:

Widget build(BuildContext context) {
return MultiBlocProvider(
  providers: [
    BlocProvider(
      create: (BuildContext context) {
        return DatabaseBloc();
      },
    ),
    BlocProvider(
      create: (BuildContext context) {
        return QuestionholderBloc();
      },
    )
  ],`child:RaisedButton(
                  splashColor: Colors.green[600],
                  focusElevation: 50.0,
                  hoverElevation: 50.0,
                  color: Colors.green[600],
                  shape: RoundedRectangleBorder(
                      side: BorderSide(color: Colors.yellow[700]),
                      borderRadius: BorderRadius.circular(50.0)),
                  child: Text(
                    "Start",
                    style: TextStyle(fontWeight: FontWeight.bold),
                  ),
                  textColor: Colors.white70,
                  onPressed: () {
                    ExtendedNavigator.of(context)
                        .pushNamed(Routes.questionHandler);
                  }),)
抱歉,可能出现语法错误。 在提问者页面中,我有:

 void didChangeDependencies() {
_statusbloc = BlocProvider.of<QuestionholderBloc>(context);
_dbbloc = BlocProvider.of<DatabaseBloc>(context);
_statusbloc.add(CheckStatus());
super.didChangeDependencies();
}

 Widget build(BuildContext context) {
return Scaffold(
  body: MultiBlocListener(
    listeners: [
      BlocListener<QuestionholderBloc, QuestionholderState>(
        listener: (context, state) {
          if (state is NoQuestions) {
            _dbbloc.add(GetQuestions());
          } else if (state is HasQuestions) {
            _statusbloc.add(GetQuestion());
          }
        },
      ),
      BlocListener<DatabaseBloc, DatabaseState>(
        listener: (context, state) {
          if (state is Loaded) {
            _statusbloc.add(SetQuestions(questionsToSet: state.questions));
          }
        },
      ),
    ],
    child: BlocBuilder<QuestionholderBloc, QuestionholderState>(
      builder: (context, state) {
        if (state is QuestionLoaded) {
          return QuestionWidget(question: state.question);
        } else {
          return CircularProgressIndicator();
        }
      },
    ),
  ),
);
}
}
void didChangeDependencies(){
_statusbloc=BlocProvider.of(上下文);
_dbbloc=BlocProvider.of(上下文);
_statusbloc.add(CheckStatus());
super.didChangeDependencies();
}
小部件构建(构建上下文){
返回脚手架(
正文:MultiBlocListener(
听众:[
布洛克斯腾纳(
侦听器:(上下文、状态){
如果(状态为无问题){
_添加(GetQuestions());
}else if(状态为有问题){
_statusbloc.add(GetQuestion());
}
},
),
布洛克斯腾纳(
侦听器:(上下文、状态){
如果(状态已加载){
_statusbloc.add(SetQuestions(questionsToSet:state.questions));
}
},
),
],
孩子:BlocBuilder(
生成器:(上下文、状态){
如果(状态已加载){
返回QuestionWidget(问题:state.question);
}否则{
返回循环ProgressIndicator();
}
},
),
),
);
}
}
错误:

错误:从传递给的上下文开始找不到祖先 I/颤振(4318):BlocProvider.of()


从代码中可以看出,您正在从初始化MultiBlocProvider的位置导航,因为您会遇到此错误

如果您在一个屏幕中初始化并在导航到另一个屏幕后访问提供商,则无法访问该提供商

第一种解决方法。

如果您想这样做,那么可以在MaterialApp小部件上方初始化MultiBlocProvider,这样您就可以访问应用程序的每个屏幕

第二种方式:


导航时,您可以在其他屏幕中传递要访问的所有值,并在该屏幕中初始化新的MultiBlocProvider。

从代码中可以看出,您是从初始化MultiBlocProvider的位置导航的,因为您会遇到此错误

如果您在一个屏幕中初始化并在导航到另一个屏幕后访问提供商,则无法访问该提供商

第一种解决方法。

如果您想这样做,那么可以在MaterialApp小部件上方初始化MultiBlocProvider,这样您就可以访问应用程序的每个屏幕

第二种方式:


导航时,您可以在其他屏幕中传递所有要访问的值,并在该屏幕中初始化新的MultiBlocProvider。

您的第一个代码块中似乎有一个反勾字符(
`
),它看起来不合适。如果这只是这里的一个类型,而不是您的代码中的类型,请无论如何修复它。您的第一个代码块中似乎有一个反勾字符(
`
),它看起来不合适。如果这只是这里的一种类型,而不是在您的代码中,请修复它。快速问题:BuildContext在通过路由时会发生更改吗?当然会!谢谢你的信息。感谢。快速提问:当通过路由时,BuildContext会改变吗?是的,当然!谢谢你的信息。谢谢。