【发布时间】:2018-01-24 17:41:52
【问题描述】:
状态改变后如何导航到新页面?
我有一个需要先登录的应用程序。只有在登录后,应用程序组件才会完全创建。所以我写了这样的东西:
主应用
class AppComponentState extends State<AppComponent> implements CredentialProvider {
Credential credential;
@override
Widget build(BuildContext context) {
if (credential == null) {
return new MaterialApp(
routes: <String, WidgetBuilder>{
'/': (BuildContext context) => new LoginPage(this),
},
);
} else {
return new MaterialApp(
routes: <String, WidgetBuilder>{
'/': (BuildContext context) => new Desktop(credential),
...
},
);
}
}
@override
void setCredential(Credential s) {
setState(() {
credential = s;
});
}
}
凭据提供程序接口
abstract CredentialProvider {
void setCredential(Credential c);
}
LoginPage 中的登录按钮侦听器,凭据已设置并路由到新页面。
@override
Widget build(BuildContext context) {
void _handleSubmitted() {
...
credentialProvider.setCredential(c); // this change main widget state and hence new pages are created
// call setTimeout ?
Navigator.pushNamed(context, "/"); // this should go to new page, because credential is set.
}
...
}
看起来,在调用Navigator.pushNamed(context, "/"); 之前,我必须等待当前的digest loop 完成。在颤振摘要循环中有什么好的方法可以做,比如 javascript 中的setTimeout?
MaterialApp 的条件创建有点奇怪。颤振中有更好的模式吗?
【问题讨论】:
标签: widget dart page-lifecycle flutter