【问题标题】:bloc eventController is closed unexpectedbloc eventController 意外关闭
【发布时间】:2022-01-12 12:01:23
【问题描述】:

我有一个应该支持响应式设计的应用。 在移动视图中,我将脚手架抽屉用于主菜单:

return Scaffold(
  appBar: AppBar(
    title: title,
  ),
  drawer: MainMenuDrawer(),
  body: body,
);

在桌面视图中,菜单应该始终可见,所以我不使用抽屉属性。而不是我将与小部件相同的菜单添加到一行中:

    return Scaffold(
      appBar: AppBar(
       automaticallyImplyLeading: true ,
       title: title
      ),
      body: Row(
       children: [
         MainMenuDrawer(),
         Expanded(child: body),
       ],
      ),
    );

菜单有一个注销按钮,它向我的身份验证块发送事件并从导航堆栈中弹出所有页面,以到达第一页(登录页面)。

  authenticationBloc.add(AuthenticationEvent.loggedOut());
  while (Navigator.canPop(context)) {
     Navigator.pop(context);

}

身份验证块为单例:

@singleton
class AuthenticationBloc extends Bloc<AuthenticationEvent, AuthenticationState> 

只要我使用移动视图,我就可以从任何地方注销,并且可以按预期工作。

但是当我切换到桌面视图时,注销按钮不再起作用。

在调试模式下,我可以看到,authBloc的eventController已经关闭,所以没有添加任何事件:

  void add(Event event) {
    if (_eventController.isClosed) return; <- isClosed is true

有谁知道为什么会在桌面视图中发生这种情况?

【问题讨论】:

    标签: flutter bloc


    【解决方案1】:

    我在我的列表项的 onTap 方法中发现了问题。 为了关闭抽屉,我调用了 Navigator.pop(context)。 但这会导致当菜单用作抽屉时关闭上一页。

    【讨论】:

    • 你好,我也面临同样的问题,如果 bloc 是单例,pop 对此有何影响
    猜你喜欢
    • 2014-01-27
    • 2021-11-17
    • 2013-06-30
    • 2016-04-02
    • 2019-01-31
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    相关资源
    最近更新 更多