gpt4 book ai didi

flutter - 从 BlocBuilder 导航到新屏幕

转载 作者:IT王子 更新时间:2023-10-29 07:15:02 25 4
gpt4 key购买 nike

当我的 Bloc 处于特定状态时,我正在尝试导航到新页面。但是,现在每当我尝试这样做时,我都会收到以下错误:

I/flutter (25673): 抛出另一个异常:在构建期间调用了 setState() 或 markNeedsBuild()。

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

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

我的问题是;有没有办法从 BlocBuilder 导航到新屏幕?

我尝试过的:我尝试提供不同的上下文,将其传递下来,甚至将其放入自己的类中。

所有类都是无状态的。

在这个 pastebin 中可以看到整个 Bloc .

最佳答案

您应该避免在构建语句中放置任何“ Action ”……我会使用 StatefulWidget 并将这些 Action 放在 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),
),
);

关于flutter - 从 BlocBuilder 导航到新屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57647769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com