如何通过 pushReplacement 为替换的 widget 提供 bloc?
How to provide bloc to replaced widget through pushReplacement?
我有一个像这样的 parent stless 小部件,
class LoginScreen extends StatelessWidget {
final AuthRepository authRepository = AuthRepository(AuthApiClient());
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (BuildContext context) {
return LoginBloc(Idle(), authRepository);
},
child: LoginWithEmailIdScreen(),
);
}
}
我可以很好地访问 LoginWithEmailIdScreen
中的 bloc,但是当我用另一个屏幕 (LoginWithMobileNumberScreen
) 替换 LoginWithEmailIdScreen
时,bloc 实例似乎是空。
在 LoginWithEmailIdScreen 内部:
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (_) => BlocProvider.value(
value: BlocProvider.of<LoginBloc>(context),
child: LoginWithMobileNumberScreen(),
)
)
);
以为是使用了错误的上下文,所以用_
替换了它,但仍然是同样的问题。
如何提供bloc实例?
非常感谢您的帮助,因为我是 Flutter 的新手。谢谢。
我找不到不使用路由的情况下通过 pushReplacement 提供 bloc 的好方法。
不得不重构整个项目并实现路由以使用命名替代方案:
Navigator.of(context).pushNamedAndRemoveUntil(
Routes.LOGIN_WITH_MOBILE_SCREEN,
(Route<dynamic> route) => false);
并在 onGenerateRoute
.
中通过集团和管理
我有一个像这样的 parent stless 小部件,
class LoginScreen extends StatelessWidget {
final AuthRepository authRepository = AuthRepository(AuthApiClient());
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (BuildContext context) {
return LoginBloc(Idle(), authRepository);
},
child: LoginWithEmailIdScreen(),
);
}
}
我可以很好地访问 LoginWithEmailIdScreen
中的 bloc,但是当我用另一个屏幕 (LoginWithMobileNumberScreen
) 替换 LoginWithEmailIdScreen
时,bloc 实例似乎是空。
在 LoginWithEmailIdScreen 内部:
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (_) => BlocProvider.value(
value: BlocProvider.of<LoginBloc>(context),
child: LoginWithMobileNumberScreen(),
)
)
);
以为是使用了错误的上下文,所以用_
替换了它,但仍然是同样的问题。
如何提供bloc实例?
非常感谢您的帮助,因为我是 Flutter 的新手。谢谢。
我找不到不使用路由的情况下通过 pushReplacement 提供 bloc 的好方法。
不得不重构整个项目并实现路由以使用命名替代方案:
Navigator.of(context).pushNamedAndRemoveUntil(
Routes.LOGIN_WITH_MOBILE_SCREEN,
(Route<dynamic> route) => false);
并在 onGenerateRoute
.