Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 从BlocBuilder导航到新屏幕_Flutter_Dart_Bloc - Fatal编程技术网

Flutter 从BlocBuilder导航到新屏幕

Flutter 从BlocBuilder导航到新屏幕,flutter,dart,bloc,Flutter,Dart,Bloc,当我的集团处于特定状态时,我试图导航到一个新页面。然而,现在当我尝试这样做时,我得到以下错误: I/flatter(25673):引发了另一个异常:在生成过程中调用了setState()或markNeedsBuild()。 在下面的代码中,我正在做一些分派,这里我还检查我的一个bloc的当前状态是否是特定的,然后导航到一个新屏幕 if (state is Finished) { startOver(timerBloc, counterBloc, spotifyBloc, contex

当我的集团处于特定状态时,我试图导航到一个新页面。然而,现在当我尝试这样做时,我得到以下错误:

I/flatter(25673):引发了另一个异常:在生成过程中调用了setState()或markNeedsBuild()。

在下面的代码中,我正在做一些分派,这里我还检查我的一个bloc的当前状态是否是特定的,然后导航到一个新屏幕

if (state is Finished) {
      startOver(timerBloc, counterBloc, spotifyBloc, context);
      return [];
    }
我的问题是,;是否仍然可以从BlocBuilder导航到新屏幕

我所尝试的: 我试着给出不同的上下文,把它传下去,甚至在它自己的类中

所有类都是无状态的


从中可以看出整个集团。

您应该避免在build语句中放置任何“操作”。。。我将使用StatefulWidget并将这些操作放在initState()中。但是,由于您使用的是FlatterBloc包(felangel.github.io/Bloc),因此可以使用BlocListener作为替代方案

大概是这样的:

class Actions extends StatelessWidget {
AudioPlayer audioPlayer = new AudioPlayer();

@override
Widget build(BuildContext context) {

   final TimerBloc timerBloc = BlocProvider.of<TimerBloc>(context);
   return BlocListener<TimerBloc, TimerState>(
     listener: (context, state) {

       if (state is Finished) {
           startOver(timerBloc, counterBloc, spotifyBloc, context);
       }

     },
     child: Row(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: _mapStateToActionButtons(
          timerBloc: BlocProvider.of<TimerBloc>(context),
          counterBloc: BlocProvider.of<CounterBloc>(context),
          spotifyBloc: BlocProvider.of<SpotifyBloc>(context),
          adBloc: BlocProvider.of<AdBloc>(context),
        ),
   );
类操作扩展了无状态小部件{
AudioPlayer=新的AudioPlayer();
@凌驾
小部件构建(构建上下文){
final TimerBloc TimerBloc=BlocProvider.of(上下文);
返回BlocListener(
侦听器:(上下文、状态){
如果(状态已完成){
startOver(timerBloc、counterBloc、spotifyBloc、context);
}
},
孩子:排(
mainAxisAlignment:mainAxisAlignment.space,
子项:\映射状态到操作按钮(
timerBloc:BlocProvider.of(上下文),
反集团:提供(上下文)的集团,
spotifyBloc:BlocProvider.of(上下文),
adBloc:BlocProvider.of(上下文),
),
);

}

嗨,托尔,你是在使用来自的Flitter Bloc软件包吗?是的,我是!我完全忘了提这个!@DigitalJoni我应该把这个监听器放在哪里?啊,这很有道理,我会重构来做这件事,而不是像以前那样做。谢谢。