개발/flutter
firbase에서 현재 로그인한 정보를 가져오는 법
개강한 공대생
2024. 5. 30. 16:49
일단 패키지 두 개를 import한다.
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
로그인 정보를 가져오는 부분이기 때문에 정보를 가져올 해당 위젯은 StatefulWidget이어야 한다.
그리고 가져올 정보를 클래스 밑에 변수로 선언해서 가져올 준비를 한다.
나는 users 콜렉션의 다큐먼트에 있는 email과 name, points를 가져올거다.
아래와 같이 선언해주자.
String email = '';
String name = '';
int points = 0;
그리고 밑에 다음 함수를 추가해주자
@override
void initState() {
super.initState();
_fetchUserData();
}
_fetchUserData는 이제 밑에 추가할 함수 이름이다.
그리고 아래와 같이 추가를 또 해주자
Future<void> _fetchUserData() async {
User? user = FirebaseAuth.instance.currentUser;
if (user != null) {
DocumentSnapshot userDoc = await FirebaseFirestore.instance.collection('users').doc(user.uid).get();
setState(() {
name = userDoc['Name'];
points = userDoc['MyPoints'];
email = userDoc['email'];
});
}
}
_fetchUserData함수는 비동기적으로 실행이되고
currentUser정보를 받아서 user가 null이 아니면 firestore에서 snapshot으로 값을 가져온다.
userDoc은 해당 user.uid를 가진 document를 나타내고
거기서 이제 필드값을 가져와서 사용하면 된다.
전체 이어진 코드
class ProfileScreen extends StatefulWidget {
@override
_ProfileScreenState createState() => _ProfileScreenState();
}
class _ProfileScreenState extends State<ProfileScreen> {
String email = '';
String name = '';
int points = 0;
@override
void initState() {
super.initState();
_fetchUserData();
}
Future<void> _fetchUserData() async {
User? user = FirebaseAuth.instance.currentUser;
if (user != null) {
DocumentSnapshot userDoc = await FirebaseFirestore.instance.collection('users').doc(user.uid).get();
setState(() {
name = userDoc['Name'];
points = userDoc['MyPoints'];
email = userDoc['email'];
});
}
}
이런 느낌