bloc eventController 意外关闭
bloc eventController is closed unexpected
我有一个应该支持响应式设计的应用程序。
在移动视图中,我在主菜单中使用脚手架抽屉:
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
有谁知道为什么在桌面视图中会发生这种情况?
我在我的列表项的 onTap 方法中发现了问题。
为了关闭抽屉,我调用了 Navigator.pop(context)。
但是这样会导致菜单作为抽屉时关闭上一页
我有一个应该支持响应式设计的应用程序。 在移动视图中,我在主菜单中使用脚手架抽屉:
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
有谁知道为什么在桌面视图中会发生这种情况?
我在我的列表项的 onTap 方法中发现了问题。 为了关闭抽屉,我调用了 Navigator.pop(context)。 但是这样会导致菜单作为抽屉时关闭上一页