我使用 Wrapper
类结合 Firebase Streams
将用户重定向到 LogInPage
或 HomePage
。
下面是 main.dart
和 Wrapper
类。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamProvider<Users>.value(
value: AuthenticationService(FirebaseAuth.instance).user,
child: MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
home: Wrapper(),
),
);
}
}
class Wrapper extends StatelessWidget {
@override
Widget build(BuildContext context) {
final user = Provider.of<Users>(context);
print(user == null ? "null id" : "${user.userId}");
return user == null
? LoginPage()
: HomePage();
}
}
下面是我的 Authentication Class
和我调用 authentication method
的函数。
onTap: () async {
dynamic user = await _auth.verifySMS(
widget.verificationId,
code,
context,
);
if (user == null) {
showDialog(
context: context,
builder: (BuildContext context) {
return CustomDialogBox(
title: "Error",
descriptions: "Can not Login now.",
text: "Try Again",
);
});
}
},
class AuthenticationService {
final FirebaseAuth _firebaseAuth;
AuthenticationService(this._firebaseAuth);
// Getting user from firebase
Users _getUserFromFirebase(User user) {
return user != null
? Users(
userId: user.uid,
)
: null;
}
// Stream<User> get authStateChanges => _firebaseAuth.idTokenChanges();
Stream<Users> get user {
return _firebaseAuth.authStateChanges().map(_getUserFromFirebase);
}
// authentication methods which returns _getUserFromFirebase.
}
验证成功后,我可以从 userId
打印正确的 Wrapper Class
。但我得到的不是第二张图片,而是第一张。一旦我重新启动我的应用程序,我就会被重定向到主页。
答案 0 :(得分:0)
Firebase 套接字连接不适用于模拟器。不知道为什么。如果在真实设备上进行测试,您可能会得到预期的结果。