Flutter + Firestore 동일한 문서 ID가 있는지 확인한 다음 저장

문서 ID를 지정하고 저장할 때 더빙되지 않았는지 확인하고 싶습니다.



Firestore에서 문서 ID를 지정하고 저장할 때가 있습니까?

예를 들면 영화 정보를 취득할 수 있는 API를 사용하고 있었을 경우, API중에서 이미 영화에 대해서 할당되고 있는 ID를 그대로 문서 ID로서 사용하고 싶다고 하는 패턴이 있을까 생각합니다.

그 때 "문서 ID가 이미 존재하는지 확인한 다음 저장"이라는 처리를 원하고 조사했습니다.

전제



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로 하면 좋을까

참고

좋은 웹페이지 즐겨찾기