Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 保持“颤振镖流”处于打开状态以查看对模型的更改_Flutter_Dart_Dart Stream - Fatal编程技术网

Flutter 保持“颤振镖流”处于打开状态以查看对模型的更改

Flutter 保持“颤振镖流”处于打开状态以查看对模型的更改,flutter,dart,dart-stream,Flutter,Dart,Dart Stream,我对flatter/Dart还不熟悉,并尝试创建一个基本的身份验证服务。我的任务是让我的主应用程序监听一个流,当身份验证操作发生时,该流将向用户发出。这就是很多Firebase示例的工作方式,唯一的区别是我想直接连接到自己的API 为此,我创建了一个AuthService,但实际上似乎无法让它工作 void main(){ runApp(MyApp()); } 类MyApp扩展了无状态小部件{ @凌驾 小部件构建(构建上下文){ 返回提供者( 创建:()=>AuthService(), 孩子:M

我对flatter/Dart还不熟悉,并尝试创建一个基本的身份验证服务。我的任务是让我的主应用程序监听一个流,当身份验证操作发生时,该流将向用户发出。这就是很多Firebase示例的工作方式,唯一的区别是我想直接连接到自己的API

为此,我创建了一个AuthService,但实际上似乎无法让它工作

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-谢谢你的反馈。我修正了我的问题,希望能让它更清楚一点。我基本上希望有一个应用程序范围的身份验证服务,在这里我可以管理当前用户的身份验证状态,并且主应用程序应该侦听身份验证中的任何更改(登录和注销)。