Flutter + Firestore 동일한 문서 ID가 있는지 확인한 다음 저장
문서 ID를 지정하고 저장할 때 더빙되지 않았는지 확인하고 싶습니다.
Firestore에서 문서 ID를 지정하고 저장할 때가 있습니까?
예를 들면 영화 정보를 취득할 수 있는 API를 사용하고 있었을 경우, API중에서 이미 영화에 대해서 할당되고 있는 ID를 그대로 문서 ID로서 사용하고 싶다고 하는 패턴이 있을까 생각합니다.
그 때 "문서 ID가 이미 존재하는지 확인한 다음 저장"이라는 처리를 원하고 조사했습니다.
전제
Flutter와 Firebase의 연계 부분은 생략합니다.
환경은 다음과 같습니다.
pubspec.yamlenvironment:
sdk: ">=2.7.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
firebase_core: "0.7.0"
firebase_auth: "^0.20.1"
cloud_firestore: "^0.16.0+1"
firebase_storage: "^7.0.0"
cloud_functions: ^0.9.0
문서 ID가 이미 존재하는지 확인하고 존재하지 않으면 새 데이터를 저장합니다.
여기서는 API에서 얻은 movieId
값을 그대로 문서 ID로 사용합니다.
「영화를 마이리스트에 보존한다」같은 처리를 이미지 해 주실 수 있으면 알기 쉬울까라고!
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
class AddMovieButton extends StatelessWidget {
final int movieId;
final title;
AddMovieButton(this.movieId, this.title);
final FirebaseFirestore firestore = FirebaseFirestore.instance;
final FirebaseAuth auth = FirebaseAuth.instance;
void _addMovie(BuildContext ctx) async {
final uid = auth.currentUser.uid;
final _userRef = firestore.collection('users/${uid}/movies');
final _movieRef =
firestore.collection('users/${uid}/movies').doc(movieId.toString());
await _movieRef.get().then((docSnapshot) => {
if (docSnapshot.exists)
{
// 既に登録されているドキュメントの場合
print('追加しない')
}
else
{
// 登録されてない新しいドキュメントの場合
_userRef
.doc(movieId.toString())
.set({'id': movieId, 'title': title})
.then(
(value) => print('追加しました'),
)
.catchError((error) {
print('追加失敗!')
}),
}
});
}
// 省略
}
나머지는 print
의 부분을 기호에 맞추어, 경고나 SnackBar로 하면 좋을까
참고
Reference
이 문제에 관하여(Flutter + Firestore 동일한 문서 ID가 있는지 확인한 다음 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kokogento/items/1105aa8829ca942a24d9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Flutter와 Firebase의 연계 부분은 생략합니다.
환경은 다음과 같습니다.
pubspec.yaml
environment:
sdk: ">=2.7.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
firebase_core: "0.7.0"
firebase_auth: "^0.20.1"
cloud_firestore: "^0.16.0+1"
firebase_storage: "^7.0.0"
cloud_functions: ^0.9.0
문서 ID가 이미 존재하는지 확인하고 존재하지 않으면 새 데이터를 저장합니다.
여기서는 API에서 얻은 movieId
값을 그대로 문서 ID로 사용합니다.
「영화를 마이리스트에 보존한다」같은 처리를 이미지 해 주실 수 있으면 알기 쉬울까라고!
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
class AddMovieButton extends StatelessWidget {
final int movieId;
final title;
AddMovieButton(this.movieId, this.title);
final FirebaseFirestore firestore = FirebaseFirestore.instance;
final FirebaseAuth auth = FirebaseAuth.instance;
void _addMovie(BuildContext ctx) async {
final uid = auth.currentUser.uid;
final _userRef = firestore.collection('users/${uid}/movies');
final _movieRef =
firestore.collection('users/${uid}/movies').doc(movieId.toString());
await _movieRef.get().then((docSnapshot) => {
if (docSnapshot.exists)
{
// 既に登録されているドキュメントの場合
print('追加しない')
}
else
{
// 登録されてない新しいドキュメントの場合
_userRef
.doc(movieId.toString())
.set({'id': movieId, 'title': title})
.then(
(value) => print('追加しました'),
)
.catchError((error) {
print('追加失敗!')
}),
}
});
}
// 省略
}
나머지는 print
의 부분을 기호에 맞추어, 경고나 SnackBar로 하면 좋을까
참고
Reference
이 문제에 관하여(Flutter + Firestore 동일한 문서 ID가 있는지 확인한 다음 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kokogento/items/1105aa8829ca942a24d9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
class AddMovieButton extends StatelessWidget {
final int movieId;
final title;
AddMovieButton(this.movieId, this.title);
final FirebaseFirestore firestore = FirebaseFirestore.instance;
final FirebaseAuth auth = FirebaseAuth.instance;
void _addMovie(BuildContext ctx) async {
final uid = auth.currentUser.uid;
final _userRef = firestore.collection('users/${uid}/movies');
final _movieRef =
firestore.collection('users/${uid}/movies').doc(movieId.toString());
await _movieRef.get().then((docSnapshot) => {
if (docSnapshot.exists)
{
// 既に登録されているドキュメントの場合
print('追加しない')
}
else
{
// 登録されてない新しいドキュメントの場合
_userRef
.doc(movieId.toString())
.set({'id': movieId, 'title': title})
.then(
(value) => print('追加しました'),
)
.catchError((error) {
print('追加失敗!')
}),
}
});
}
// 省略
}
Reference
이 문제에 관하여(Flutter + Firestore 동일한 문서 ID가 있는지 확인한 다음 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kokogento/items/1105aa8829ca942a24d9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)