stream - 没有输入的 Dart Stream
问题描述
我正在创建一个基于 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(),
],
),
),
);
}
}
);
}
}
解决方案
所以,我实现了类似的东西,它是这样的:
在我的主应用程序中,我检查用户是否以这种方式登录:
bool isLoggedIn = true;
@override
void initState() {
FirebaseAuth.instance.currentUser().then((user) {
setState(() {
isLoggedIn = user != null;
});
});
super.initState();
}
在我的构建中,我相应地改变了我的观点:
@override
Widget build(BuildContext context) {
return AppProvider(
child: MaterialApp(
title: 'My Sample Title',
home: isLoggedIn ? HomePage() : LoginPage(),
),
);
}
我知道这种方法并没有完全使用 bloc 模式,但也可以这样做。我在项目的大部分区域都使用了 bloc 模式(比如检查用户信息是否已经存在于我的主页中)。
推荐阅读
- node.js - 我有 node.js 应用程序我正在使用 dotenv 设置 .env,使用端口时出现以下错误
- google-sheets - 如何确定收集每个项目、每个收集集和集合中每个项目的预期试验次数?
- c# - 如何导入 Microsoft.AspNetCore.Hosting.IWebHostEnvironment?
- python - Pandas:计算列中的空值
- python - 显示一维形状的二维 numpy ndarray
- python - psycopg2.DataError:整数的输入语法无效:“” WHERE Toys.toy_id = ' '
- scala - Scala - 用随机数填充 Seq,没有重复,并且始终具有相同的大小
- javascript - 使用 React 和 Ant Design 的浮动标签
- python - 如何将多级索引转换为 Python 中的列。(IndexError:不能从空轴中进行非空拍摄。)
- python - 通过输入获取半径的程序找到表面积和体积