개발하자
플러터 파이어베이스: Stream provider를 사용하여 로그인한 사용자의 세부 정보를 앱 전체에 스트리밍하고 싶습니다
Cuire
2023. 10. 6. 09:21
반응형
플러터 파이어베이스: Stream provider를 사용하여 로그인한 사용자의 세부 정보를 앱 전체에 스트리밍하고 싶습니다
아래 오류가 발생합니다:
The return type 'AuthUser?' isn't a 'User?', as required by the closure's context.
아래 코드부터:
class AuthService {
final FirebaseAuth authInstance = FirebaseAuth.instance;
final FirebaseFirestore firestoreInstance = FirebaseFirestore.instance;
Stream<User?> get currentUser => authInstance.authStateChanges().map(
(User? firebaseUser) => (firebaseUser != null) ? AuthUser.fromFirebaseUser(user: firebaseUser) : null,
);
}
다음은 모델 클래스의 코드입니다:
import 'package:firebase_auth/firebase_auth.dart';
class AuthUser {
String? uid;
String? email;
String? userName;
AuthUser({
required this.uid,
required this.email,
required this.userName,
});
AuthUser.fromFirebaseUser({User? user}) {
uid = user!.uid;
email = user.email;
userName = user.displayName;
}
}
이 스트림을 사용하여 소비하는 방법도 알고 싶습니다.
위젯과 위젯 중 하나가 값에 접근하기에 적합한가요?
인증은 이러한 모든 정보를 저장하는 자체 저장소로, 글로벌 사용자를 삭제한 후 앱의 모든 장소에서 정보를 평가하는 것입니다...
예
User users
그다음에 인증의 예
final googleUser = await googleSignIn.signIn();
final googleAuth = await googleUser.authentication;
final AuthCredential credential = GoogleAuthProvider.credential(
accessToken: googleAuth?.accessToken,
idToken: googleAuth?.idToken,
);
users = (await auth.signInWithCredential(credential)).user;
if (users == null) {
return false;
}
return true;
} catch (e) {
print('this is error .......$e');
return null;
}
스트림이 Firebase에서 모델을 모델로 매핑하고 있습니다. 따라서 게터의 반품 유형을 변경해야 합니다.
변경 내용:
Stream<User?> get currentUser => authInstance.authStateChanges().map(
(User? firebaseUser) => (firebaseUser != null) ? AuthUser.fromFirebaseUser(user: firebaseUser) : null,
);
다음 항목에 대해:
Stream<AuthUser?> get currentUser => authInstance.authStateChanges().map(
(User? firebaseUser) => (firebaseUser != null) ? AuthUser.fromFirebaseUser(user: firebaseUser) : null,
);
반응형