728x90
반응형
이부분 때문에 나던 오류를 드디어 해결했다!
파티를 신청/취소 하는 기능을 구현하는데 자꾸 가져오는 party의 데이터가 null 이라고 하는 문제였었다.
팀원이 내 실수를 잡아줬는데 내가 firebase에 파티 데이터를 생성해서 넣을때
id 값을 랜덤으로 생성해서 넣게 코드를 썼기 때문이었다..
이렇게 되면 데이터가 저장될 때 firebase 측에서 자동으로 생성해주는 id와
내가 코드로 구현해서 랜덤으로 생성되는 id가 다르게 된다.
그래서 party의 id가 달라서 생기는 문제였다.
party를 생성하는 부분은 이 영상을 조금 참고했다.
https://www.youtube.com/watch?v=ErP_xomHKTw&ab_channel=JohannesMilke
먼저 파티를 생성하는 부분부터 수정해야했다.
일단 crontroller 를 만들어 준다.
각각의 form 에다가 controller로 내용을 받아서
이 controller 안의 내용들을 변수들에 담고
이 변수들을 createParty 라는 함수에 파라미터로 전송해서 데이터를 생성하도록 했다.
아래는 생성하기 버튼을 눌렀을 때 실행되는 코드이다.
ElevatedButton(
child: const Text('생성하기'),
onPressed: () {
final docParty = firestore.collection('party').doc();
final partytitle = controllerPartyTitle.text;
final datetime = dateTime;
final place = controllerPlace.text;
final info = controllerInfo.text;
id:
docParty.id;
final author = FirebaseAuth.instance.currentUser!.uid;
final partymember = [];
createParty(
partytitle: partytitle,
datetime: datetime,
place: place,
info: info,
author: author,
partymember: partymember);
showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0)),
//Dialog Main Title
title: Column(
children: const <Widget>[
Text("파티 생성"),
],
),
//
content: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: const <Widget>[
Text(
"완료되었습니다.",
),
],
),
actions: <Widget>[
ElevatedButton(
child: const Text("확인"),
onPressed: () {
Navigator.pop(context);
},
),
],
);
});
}),
따로 만든 createParty 함수이다.
Future createParty({
required String partytitle,
required DateTime datetime,
required String place,
required String info,
required String author,
required List partymember,
}) async {
final docParty = FirebaseFirestore.instance.collection('party').doc();
final json = {
'id': docParty.id,
'partytitle': partytitle,
'datetime': datetime,
'place': place,
'info': info,
'author': author,
'partymember': partymember,
};
await docParty.set(json);
}
이부분에서 중요했던게 id를 docParty.id 로 설정해줘야 한다는 거였다.
결과화면은 다음과 같다.
순간 무심하게 쓴 코드가 나중까지 큰 문제를 만들 수 있다는걸 알게된 경험이었다..😭
앞으로 코드는 신중하게 짜야겠다고 다짐했다
728x90
반응형