- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- error
- graphql
- Firebase
- 차트
- 3주차
- 차트만들기
- nestjs
- 에러
- react
- Flutter
- 항해99
- 채팅
- typeorm
- chart
- rtk
- javascript
- websocket
- 주식
- 비전공자
- apollo
- Redux
- 코인
- typescript
- Coin
- 주식차트
- API
- 차트구현
- 리액트
- nextjs
- 코인차트
Act99 기술블로그
[비전공자] Flutter + Firebase | 사용자 계정 정보를 Firestore에 저장시키고 싶을 때 방법 및 오류시 꿀팁 본문
[비전공자] Flutter + Firebase | 사용자 계정 정보를 Firestore에 저장시키고 싶을 때 방법 및 오류시 꿀팁
Act99 2020. 11. 19. 21:09Flutter + Firebase를 이용하면서 사용자 정보를 파이어 스토어에 연동시키고 싶은 경우가 있다.
필자의 경우, 연습용으로 만든 다이어리 앱을 만들 때 필요했다.
('user' collection을 만들고 유저별id 를 document 이름으로 지정한 후, subcollection으로 데이터를 저장하고 싶을 때)
이 때 googleSignin 혹은 emailSignin 에 핸들을 설정해준 후, 핸들함수에 유저 데이터를 저장하는 함수를 넣어주었다.
-----------------------------------샘플코드-------------------
@override
void initState() {
super.initState();
// Detects when user signed in
googleSignIn.onCurrentUserChanged.listen((account) {
handleSignIn(account);
}, onError: (err) {
print('Error signing in: $err');
});
// Reauthenticate user when app is opened
googleSignIn.isSignedIn().then((isSignedIn) async {
if (isSignedIn)
await {
googleSignIn.signInSilently().then((account) => handleSignIn(account))
};
});
}
handleSignIn(GoogleSignInAccount account) async {
if (account != null) {
await createUserInFirestore(account);
setState(() {
isAuth = true;
});
} else {
setState(() {
isAuth = false;
});
}
}
Future createUserInFirestore(account) async {
// 1) check if user exists in users collection in database (according to their id)
account = googleSignIn.currentUser;
DocumentSnapshot doc = await usersRef.doc(account.id).get();
if (!doc.exists) {
// 3) get username from create account, use it to make new user document in users collection
usersRef.doc(account.id).set({
"id": account.id,
"photoUrl": account.photoUrl,
"email": account.email,
"displayName": account.displayName,
"timestamp": timestamp
});
// make new user their own follower (to include their posts in their timeline)
}
diaryUser = DiaryUser.fromDocument(doc);
}
------------------------------------
signin 버튼 생성 후, 버튼을 클릭했더니, 로그인은 되지만 id == null 오류가 뜰 때,
--------------------------------- 오류코드
onPressed: () {
signInWithGoogle().then((result) {
if (result != null) {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) {
return HomeScreen(user : user); <----- HomeScreen 호출 시 user 모델을 제대로 call하지 못했음
},
),
);
createUserInFirestore(googleSignInAccount);
}
});
},
-----------------------------
-----------------------------변경코드
onPressed: () {
signInWithGoogle().then((result) {
if (result != null) {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) {
return MyApp();
},
),
);
createUserInFirestore(googleSignInAccount);
}
});
},
_________________________ MyApp을 호출하니 해결
(비전공자라 전문용어를 모릅니다.. 참고해서 봐주세요)