Flutter authStateChanges仅在调试模式下工作

Flutter authStateChanges仅在调试模式下工作,flutter,firebase-authentication,release,Flutter,Firebase Authentication,Release,我有一个颤振的应用程序,一切都很好,直到我想发布它。 我正在使用firebase进行身份验证 我正在使用: firebase_核心:^0.7.0 firebase_认证:^0.20.0 在调试模式或发行版中,我的firebase身份验证登录工作正常。我的问题是在那之后。 我有一个到firebaseAuth.authStateChanges的分散式“侦听器”。这里是我控制我的应用程序身份验证的地方。这是我的auth存储库中的buildSelf$函数(我在其中构建auth状态侦听器): Replay

我有一个颤振的应用程序,一切都很好,直到我想发布它。 我正在使用firebase进行身份验证

我正在使用:
firebase_核心:^0.7.0
firebase_认证:^0.20.0

在调试模式或发行版中,我的firebase身份验证登录工作正常。我的问题是在那之后。 我有一个到firebaseAuth.authStateChanges的分散式“侦听器”。这里是我控制我的应用程序身份验证的地方。这是我的auth存储库中的buildSelf$函数(我在其中构建auth状态侦听器):

ReplayConnectableStream
但当我运行im发布模式时,我的登录响应会显示在终端“success”中,但我的侦听器不会显示状态更改。这里有一个来自终端的打印屏幕

我真的对发生的事感到迷惘。我甚至尝试在app.dart中直接调用这个authStateChanges,但仍然是一样的(在发行版中,只检查一次auth状态)

解决方案:

  • 经过3天的头痛,我终于发现了我的问题: 我的应用程序未在根目录(主目录)上初始化firebase应用程序。所以每次我需要使用firebase软件包时,我都必须初始化它。 我相信每次初始化一个应用程序时,其他应用程序都会失败
我将firebase.initializeApp()移动到我的主函数中,并每隔一段时间删除一次firebase initialize。然后,一切正常。 这是我的主要观点:

void main() async {
    /* ... main code ... */
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();
    runApp(App());
}

我确实在我的iPhone中以发布模式实施了一个项目,使用了介绍的方法,但无法重现问题,我为重现该项目所做的实现是:

class\u TestFirebaseState扩展状态{
bool userLogado=false;
_逻辑性痛风(){
if(FirebaseAuth.instance.currentUser==null){
FirebaseAuth.instance.signInWithEmailAndPassword(
电邮:'teste1@teste.com,密码:“123456”);
}否则{
FirebaseAuth.instance.signOut();
}
}
@凌驾
void initState(){
super.initState();
最终流=Rx.concat(
[
价值流(“começou”),
FirebaseAuth.instance.authStateChanges().switchMap(
(用户){
debugPrint('user:'+user.toString());
if(user==null){
返回流。值('unauth');
}否则{
返回Stream.value('auth');
}
},
),
],
).publishReplay();
stream.listen((值){
debugPrint('值:'+值);
此.setState(){
this.userLogado=value=='auth';
});
});
stream.connect();
}
@凌驾
小部件构建(构建上下文){
String text=“sair”;
如果(!userLogado){
text=“entra”;
}
返回脚手架(
主体:容器(
宽度:double.infinity,
高度:双无限,
儿童:中心(
孩子:升起按钮(
按下按钮:_loginLogout,
子:文本(Text),
),
),
),
);
}
}
唯一的细节是,加载应用程序中所有内容的主组件有一个等待firebase初始化的未来构建器:

小部件构建(构建上下文){
返回材料PP(
家:未来建设者(
//火警:
future:Firebase.initializeApp(),
生成器:(上下文,快照){
//检查错误
if(snapshot.hasError){
返回脚手架(
正文:中(
子:文本(
"政治上的问题","政治上的问题",,
),
),
);
}
//完成后,显示您的应用程序
if(snapshot.connectionState==connectionState.done){
//返回登录页面();
//返回VerifySignIn(主页:Home());
返回TestFirebase();
}
//否则,在等待初始化完成时显示某些内容
返回脚手架(
正文:中(
子对象:CircularProgressIndicator(),
),
);
},
),
debugShowCheckedModeBanner:false,
);
}
另一个细节是firebase配置是根据所用平台的颤振教程实现的

因此,为了评估应用程序配置是否良好,我将在同一个项目中实现该按钮应用程序,以便您可以正确评估它

void main() async {
    /* ... main code ... */
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();
    runApp(App());
}