Flutter 用户登录后在StoreConnector中颤振redux Navigator.pop()
我如何做Flutter 用户登录后在StoreConnector中颤振redux Navigator.pop(),flutter,redux,flutter-redux,Flutter,Redux,Flutter Redux,我如何做Navigator.of(context.pop)((route)=>false) 在我的登录屏幕中 class _LoginState extends State<Login> with SingleTickerProviderStateMixin { String email = ''; String password = ''; final Store<AppState> store; final _formKey = GlobalKey&l
Navigator.of(context.pop)((route)=>false)代码>
在我的登录屏幕中
class _LoginState extends State<Login> with SingleTickerProviderStateMixin {
String email = '';
String password = '';
final Store<AppState> store;
final _formKey = GlobalKey<FormState>();
_LoginState(this.store);
@override
Widget build(BuildContext context) {
return new StoreConnector<AppState, LoginViewModel>(
converter: ((Store<AppState> store) => LoginViewModel.create(store)),
builder: (BuildContext context, LoginViewModel viewModel) {
if(viewModel.user.email != '') {
Navigator.of(context).pop((route) => false);
return null;
}
return (
viewModel.isLoading ?
Center(...)
:
Scaffold(...)
class\u LoginState使用SingleTickerProviderStateMixin扩展状态{
字符串email='';
字符串密码=“”;
最终商店;
final _formKey=GlobalKey();
_LoginState(this.store);
@凌驾
小部件构建(构建上下文){
返回新的StoreConnector(
转换器:((存储)=>LoginViewModel.create(存储)),
生成器:(BuildContext上下文,LoginViewModel视图模型){
如果(viewModel.user.email!=''){
Navigator.of(context.pop)((route)=>false);
返回null;
}
返回(
viewModel.isLoading?
中心(…)
:
脚手架(…)
这是可行的,但会显示错误
Element.markNeedsBuild.<anonymous closure> (package:flutter/src/widgets/framework.dart:4167:11)
I/flutter (13435): #1 Element.markNeedsBuild (package:flutter/src/widgets/framework.dart:4182:6)
I/flutter (13435): #2 State.setState (package:flutter/src/widgets/framework.dart:1253:14)
...
Element.markNeedsBuild.(包:flatter/src/widgets/framework.dart:4167:11)
I/flatter(13435):#1 Element.markNeedsBuild(包:flatter/src/widgets/framework.dart:4182:6)
I/flatter(13435):#2 State.setState(包:flatter/src/widgets/framework.dart:1253:14)
...
我写这篇文章是因为我甚至不知道如何在谷歌上表达查询,因为我是用fluutter(我处理react)进行计算机化的。我认为问题在于,你想在构建屏幕时导航,这是不可能的
添加此方法
changenavigation() async {
await Future.delayed(Duration(microseconds: 1));
Navigator.of(context).pop((route) => false);
}
按以下方式更改if条件
if(viewModel.user.email != '') {
changenavigation();
return Container();
}
理想情况下,您不应该在小部件树中调用Navigator,因此您将得到一个错误
为此,StoreConnector
具有onWillChange
方法。在构建小部件之前,该函数将在状态更改时运行。(类似于react类组件中的componentWillUpdate)
class\u LoginState使用SingleTickerProviderStateMixin扩展状态{
字符串email='';
字符串密码=“”;
(最终存储)添加您的全部错误。很高兴听到这一点。如果是,请接受我的答案。这只是一种黑客行为。不是正确的处理方法。如果您希望将导航逻辑保留在中间件中,您将如何实现这一点?