본문 바로가기

개발하자

플러터 파이어베이스: Stream provider를 사용하여 로그인한 사용자의 세부 정보를 앱 전체에 스트리밍하고 싶습니다

반응형

플러터 파이어베이스: 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,
);

반응형