大家好:)
我是一名学生开发人员,并且从3个月以来就一直处于困境... 我无所不在,无所适从。
我的挑战:
每当我从帐户A注销并再次使用帐户B登录时,我都在应用程序中使用StreamProvider。仍然显示帐户A。有时显示为空。而且,如果我想显示已登录帐户的数据,则需要“运行应用程序”(带有绿色的运行按钮,并带有一个表示正在运行的点)。
我正在考虑的问题是它不会在StreamProviders所在的位置重建主线程。
我尝试了很多事情,如果我通过了一个可能是一个想法并且不知道如何使用它的想法,这时我还是不知道。
谢谢您的时间。我真的很感激。
我的main.dart
// build of the MyApp() (stateful widget)
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
StreamProvider<FirebaseUser>.value(value: FirebaseAuth.instance.onAuthStateChanged), // user
StreamProvider<Users>.value(value: dbUsers.streamUser(user != null ? user.uid : "nothing")), // userFromDatabase
StreamProvider<Homes>.value(value: dbHomes.streamHome(userFromDatabase != null ? userFromDatabase.idHome : "nothing")), // home from user
],
child: MaterialApp(
// routes of the dynamics links
routes: <String, WidgetBuilder>{
'/invite': (context) => RootPage(auth: Auth(), invite: true, idHome: ModalRoute.of(context).settings.arguments,),
'/message': (context) => RootPage(auth: Auth(), isMessage: true),
},
// ____________________________
home: RootPage(auth: Auth())
),
);
}
我的RootPage.dart
enum AuthStatus {
notSignedIn,
signedIn
}
class _RootPageState extends State<RootPage> {
AuthStatus _authStatus = AuthStatus.notSignedIn;
@override
void initState() {
super.initState();
// verify if the user is signed in
widget.auth.currentUser().then((userId) {
setState(() {
_authStatus = userId == null ? AuthStatus.notSignedIn : AuthStatus.signedIn;
});
});
}
// ** CALLBACKS **
void _signedIn(){
setState(() {
_authStatus = AuthStatus.signedIn;
});
}
void _signedOut(){
setState(() {
_authStatus = AuthStatus.notSignedIn;
});
}
// ________________
@override
Widget build(BuildContext context) {
switch(_authStatus){
case AuthStatus.notSignedIn:
if(widget.invite != null){
return RegisterFromInvitePage(
auth: widget.auth,
onSignedIn: _signedIn,
idHome: widget.idHome,
);
} else {
return LoginPage(
auth: widget.auth,
onSignedIn: _signedIn,
);
}
break;
case AuthStatus.signedIn:
if(widget.isMessage != null){
return MessagePage(
auth: widget.auth,
);
} else {
return HomePage(
auth: widget.auth,
onSignedOut: _signedOut,
);
}
}
}
退出页面(设置)
class _SettingsPageState extends State<SettingsPage> {
void _signOut() async {
try {
await widget.auth.signOut();
widget.onSignedOut();
} catch (error) {
print("Sign out error :");
print(error);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: ReusableWidgets().getAppBar(S.of(context).drawer_settings),
drawer: DrawerBuild(),
body: Column(
children: <Widget>[
RaisedButton(
child: Text(S.of(context).sign_out),
onPressed: (){
setState(() {
_signOut();
});
},
)
],
),
);
}