-
[Flutter] ๊ฒ์๊ธ ๊ธฐ๋ฅ์ ํ์ํ ํจ์๋ค(Firestore์ฌ์ฉ)Flutter ํ ํฌ 2022. 7. 22. 02:14
- ๊ตฌํ ๋ด์ฉ
- ๊ตฌํ ๋ฐฉ๋ฒ
๊ตฌํ ๋ด์ฉ
๊ฒ์๊ธ ๊ธฐ๋ฅ์ ํ์ํ ํจ์๋ค์ ์ ๋ฆฌํ์ต๋๋ค.
1. ๊ธ ์์ฑ
2. ๊ธ ์์
3. ๊ธ ์ญ์
4. ์ข์์ ๋ฐ ์ซ์ด์
๊ตฌํ ๋ฐฉ๋ฒ
๊ธ ์์ฑ
// docId๋ฅผ ์ง์ ํ๋ ๊ฒฝ์ฐ : UID๋ฅผ docId๋ก ์ฐ๊ฑฐ๋ ๋ฌธ์ID๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด ๊ด๋ฆฌํ๊ณ ์๋ณํด์ผ ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ setDocId() { FirebaseFirestore.instance .collection('collection name') .doc('docId') .set(DataToJson() .toJsonMethod()); } // docId๋ฅผ ์ง์ ํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ addPostToCollection() { FirebaseFirestore.instance .collection('collection name') .add(DataToJson() .toJsonMethod()); } // DataToJson()ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ set๋ฉ์๋๋ง๋ค ์ผ์ผ์ด ๊ฐ๋ค์ ์์ฑํ๋ ๊ฒ ๋ณด๋ค๋ ํด๋์ค๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ธฐ๊ฑฐ๋ ๊ณ ์ ๋ ๊ฐ๋ค์ ๋ฏธ๋ฆฌ ์ฑ์๋๊ณ ์ฌ์ฉํ๋ ํธ์ด ํธํ๊ธฐ ๋๋ฌธ์ด๋ค. class DataToJson { Map<String, dynamic> toJsonMethod() => { 'firestore์ ๋ฌธ์์ ์ถ๊ฐ๋ ํ๋ ์ด๋ฆ': '๊ฐ', 'firestore์ ๋ฌธ์์ ์ถ๊ฐ๋ ํ๋ ์ด๋ฆ': '๊ฐ', }; }
๊ธ ์์
// ์ ๋ฐ์ดํธ ๋ฉ์๋ updatePostMethod() { FirebaseFirestore.instance .collection('collection name') .doc('docId') .update(DataToJson() .toJsonMethod()); } // DataToJson()ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ set๋ฉ์๋๋ง๋ค ์ผ์ผ์ด ๊ฐ๋ค์ ์์ฑํ๋ ๊ฒ ๋ณด๋ค๋ ํด๋์ค๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ธฐ๊ฑฐ๋ ๊ณ ์ ๋ ๊ฐ๋ค์ ๋ฏธ๋ฆฌ ์ฑ์๋๊ณ ์ฌ์ฉํ๋ ํธ์ด ํธํ๊ธฐ ๋๋ฌธ์ด๋ค. class DataToJson { Map<String, dynamic> toJsonMethod() => { 'firestore์ ๋ฌธ์์ ์ถ๊ฐ๋ ํ๋ ์ด๋ฆ': '๊ฐ', 'firestore์ ๋ฌธ์์ ์ถ๊ฐ๋ ํ๋ ์ด๋ฆ': '๊ฐ', }; }
๊ธ ์ญ์
// ์ญ์ ๋ฉ์๋ deletePostMethod() { FirebaseFirestore.instance .collection('collection name') .doc('docId') .delete(); } // DataToJson()ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ set๋ฉ์๋๋ง๋ค ์ผ์ผ์ด ๊ฐ๋ค์ ์์ฑํ๋ ๊ฒ ๋ณด๋ค๋ ํด๋์ค๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ธฐ๊ฑฐ๋ ๊ณ ์ ๋ ๊ฐ๋ค์ ๋ฏธ๋ฆฌ ์ฑ์๋๊ณ ์ฌ์ฉํ๋ ํธ์ด ํธํ๊ธฐ ๋๋ฌธ์ด๋ค. class DataToJson { Map<String, dynamic> toJsonMethod() => { 'firestore์ ๋ฌธ์์ ์ถ๊ฐ๋ ํ๋ ์ด๋ฆ': '๊ฐ', 'firestore์ ๋ฌธ์์ ์ถ๊ฐ๋ ํ๋ ์ด๋ฆ': '๊ฐ', }; }
์ข์์ ๋ฐ ์ซ์ด์
// ์ข์์๊ฐ์ ๊ธฐ๋ฅ์๋ Transaction์ด๋ผ๋ ์ค๋ฅ๋ฐฉ์ง ๊ธฐ๋ฅ์ด ํ์ํ๋ค, ๋ค์์ ์ฌ์ฉ์๊ฐ ๋์์ ์ข์์๋ฅผ ๋๋ฅผ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋๋ฐ ์ด ์ค๋ฅ๋ฅผ ๋ง์์ฃผ๋๊ฒ Transaction์ด๋ค. // Transaction์ ๋ค์ํ ์ํฉ์์ ์ธ๋ชจ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ์์๋๋ ๊ฒ์ด ์ข๋ค. void runTransaction() { // ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ ๊ฐ์ ๋ฌธ์ DocumentReference doc = FirebaseFirestore.instance.collection('collectionName').doc('docId'); FirebaseFirestore.instance.runTransaction((transaction) async { DocumentSnapshot snapshot = await transaction.get(doc); if (!snapshot.exists) { throw Exception('Does not exist'); } var postMap = snapshot.data()! as Map; // firestore์ ์ข์์ ๊ธฐ๋ฅ๊ณผ ๊ด๋ จ๋ ํ๋์ ์ด๋ฆ์ likeNum์ด๋ผ๊ณ ๊ฐ์ // ์ข์์ ์ซ์๋ฅผ + 1 int postLikeNum = postMap['likeNum'] + 1; transaction.update(doc, {'likeNum': postLikeNum}); }); }
'Flutter ํ ํฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Flutter Fastlane CI/CD(1) - iOS (0) 2023.03.07 [Flutter] YouTube player (0) 2022.08.25 [Flutter] host platform ๊ตฌ๋ณ (Web, Phone) (0) 2022.07.26 [Flutter] ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ๋ ํ ์คํธ ์ธ์, ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ ๋ฐ ํ์ฉ (0) 2022.07.12 Flutter firestore stream pagination (firestore ์ฟผ๋ฆฌ ํ์ด์งํํ๊ธฐ) (0) 2022.03.19