我的Auth
提供程序类中有这个简单的登录方法
Future login(String email, String password) async {
try {
AuthResult result = await _firebaseAuth.signInWithEmailAndPassword(
email: email, password: password);
FirebaseUser user = result.user;
var _tokenServer = await user.getIdToken();
_token = _tokenServer.token;
_userId = user.uid;
notifyListeners();
print("logged in");
return user.uid;
} catch (e) {
print(e);
}
}
}
和这个吸气剂
bool get isAuth {
return _token != null;
}
这是我的主要目的
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider.value(
value: Auth(),
),
],
child: Consumer<Auth>(
builder: (ctx, auth, _) => MaterialApp(
title: 'Flutter Demo',
// theme: ThemeData(
// // primarySwatch: Colors.blue,
// ),
theme: ThemeData.dark(),
home: auth.isAuth ? HomeScreen() : LoginScreen(),
),
),
);
}
如果我登录,则可以获取所有数据(令牌,ID等),但页面不会更改,而我将停留在登录页面上。 我在做什么错了?
编辑: 现在,我可以重定向到主屏幕了,但是我需要按返回按钮才能进入主屏幕
答案 0 :(得分:1)
实际上,您不会将整个应用包装在Consumer
中。 home
属性将不会刷新以更改主路由。您可以改成这样。
示例:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider.value(
value: Auth(),
),
],
child: MaterialApp(
title: 'Flutter Demo',
// theme: ThemeData(
// // primarySwatch: Colors.blue,
// ),
theme: ThemeData.dark(),
home: Consumer<Auth>(
builder: (ctx, auth, _) {
return auth.isAuth ? HomeScreen() : LoginScreen();
},
),
),
);
}
}
希望有帮助!