Flutter 保持“颤振镖流”处于打开状态以查看对模型的更改
我对flatter/Dart还不熟悉,并尝试创建一个基本的身份验证服务。我的任务是让我的主应用程序监听一个流,当身份验证操作发生时,该流将向用户发出。这就是很多Firebase示例的工作方式,唯一的区别是我想直接连接到自己的API 为此,我创建了一个AuthService,但实际上似乎无法让它工作Flutter 保持“颤振镖流”处于打开状态以查看对模型的更改,flutter,dart,dart-stream,Flutter,Dart,Dart Stream,我对flatter/Dart还不熟悉,并尝试创建一个基本的身份验证服务。我的任务是让我的主应用程序监听一个流,当身份验证操作发生时,该流将向用户发出。这就是很多Firebase示例的工作方式,唯一的区别是我想直接连接到自己的API 为此,我创建了一个AuthService,但实际上似乎无法让它工作 void main(){ runApp(MyApp()); } 类MyApp扩展了无状态小部件{ @凌驾 小部件构建(构建上下文){ 返回提供者( 创建:()=>AuthService(), 孩子:M
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回提供者(
创建:()=>AuthService(),
孩子:MaterialApp(
主页:AuthWidget()
)
);
}
}
类AuthWidget扩展了无状态Widget{
@凌驾
小部件构建(构建上下文){
final authService=Provider.of(上下文);
authService.getUser();
//将应用程序包装到监视身份验证状态的流中
//更改。在身份验证状态更改时,
返回流生成器(
流:authService.onAuthStateChanged,
生成器:(上下文,快照){
//检查以确保connectionState处于活动状态
if(snapshot.connectionState==connectionState.active){
最终用户=snapshot.data;
return user==null?Login():Home();
}
返回登录名();
}
);
}
}
类身份验证服务{
用户当前用户;
未来的getUser(){
返回Future.value(currentUser);
}
无效登录(用户){
当前用户=用户;
}
作废注销(){
currentUser=null;
}
流得到更改{
返回Stream.fromFuture(getUser());
}
}
我想要达到的目标
在顶层MyApp
,我希望能够使用AuthProvider监听身份验证中的更改。我应该能够在任何地方访问身份验证提供商,例如
final auth = Provider.of<AuthService>(context, listen: false);
// log the user in
auth.login(user);
// log the user out
auth.logout(user);
// get the current authenticated user
auth.getUser();
final auth=Provider.of(上下文,侦听:false);
//让用户登录
身份验证登录(用户);
//将用户注销
授权注销(用户);
//获取当前经过身份验证的用户
auth.getUser();
并使用它来管理应用程序。我现有代码的问题是,流状态立即标记为已完成,因此不会从onAuthStateChanged
发出进一步的更改。实际上,我需要我的AuthWidget
在应用程序的整个生命周期中继续侦听,以便我能够响应登录/注销事件并相应地更改UI
非常感谢您的帮助 好的,最后我用稍微不同的技术想出了一个解决方案。多亏了Aaron K Saunders的这篇文章为我们提供了指点-
本质上,我的
AuthService
现在实现了一个ChangeNotifier,我可以在应用程序中使用它来检查身份验证、显示不同的路线、获取当前用户等。没有收到你的问题,你能详细说明一下吗?@Niteesh-谢谢你的反馈。我修正了我的问题,希望能让它更清楚一点。我基本上希望有一个应用程序范围的身份验证服务,在这里我可以管理当前用户的身份验证状态,并且主应用程序应该侦听身份验证中的任何更改(登录和注销)。