【发布时间】:2019-01-11 12:48:01
【问题描述】:
我正在创建一个基于 firebase auth 和带有颤振、飞镖和 bloc 模式的在线数据库的应用程序。 我想创建一个启动画面来检查用户是否已经使用 firebase auth 登录,以便我可以根据当前状态将用户引导到另一个页面。
所以我决定为 SplashScreen 使用流(即 StatelessWidget)并创建一个 StreamBuilder 来等待一些流返回值。但是在流中我没有输入值。那么在这种情况下我应该使用流吗?我该如何植入它。
class SplashScreen extends StatelessWidget {
Widget build(context) {
final bloc = BlocProvider.of(context);
return FutureBuilder(
future: bloc.loadUser(),
builder: (context, snapshot) {
if(snapshot.hasData) {
if(snapshot.data == null) {
Navigator.pushNamed(context, '/login');
} else {
Navigator.pushNamed(context, '/main');
}
} else {
return Scaffold(
body: Center(
child: Column(
children: <Widget>[
Text('Loading', style: TextStyle(fontSize: 20.0)),
CircularProgressIndicator(),
],
),
),
);
}
}
);
}
}
【问题讨论】:
-
您不会提供身份验证状态作为流的输入吗?您打算允许用户注销并再次显示初始屏幕,还是应该仅在应用程序启动期间显示初始屏幕,直到完成身份验证,然后在应用程序关闭并稍后重新启动时才显示?
-
我不认为提供 authenticationstate 是一个好方法。因为它是一个异步函数输出。启动画面仅用于应用程序启动,仅用于获取数据和其他内容。
-
那么
FutureBuilder应该这样做 -
FutureBuilder 的问题是我无法在 FutureBuilder 中调用 Navigator
-
这太疯狂了,但确实有效,谢谢:))