当我的集团处于特定状态时,我正在尝试导航到新页面。但是,现在无论何时我尝试执行此操作,都会出现以下错误:
I/flutter (25673): Another exception was thrown: setState() or markNeedsBuild() called during build.
在下面的代码中,我正在执行一些调度,在这里,我还要检查我的一个集团的当前状态是否是特定的,然后导航到新屏幕。
if (state is Finished) {
startOver(timerBloc, counterBloc, spotifyBloc, context);
return [];
}
我的问题是;无论如何,是否可以从BlocBuilder导航到新屏幕?
我尝试过的方法: 我试图给出不同的上下文,将其传递下来,甚至将其放在自己的类中。
所有类都是无状态的。
可以在此pastebin中看到整个集团。
答案 0 :(得分:1)
您应该避免在build语句中放置任何“动作” ...我将使用StatefulWidget并将这些动作放置在initState()中。但是,由于您正在使用Flutter Bloc软件包(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),
),
);
}