본문 바로가기
웹공뷰/flutter

flutter 플러터 firestore에 데이터 추가하기

by 이노키_ 2023. 6. 27.

1. cloud_firestore 의존성 추가

터미널에서 

flutter pub add cloud_firestore

2. firebase 콘솔에서 firestore 사용하게 하기 

우선 테스트 모드로 시작

 

3. project/android/app/build.gradle 파일의 minsdkVersion을 21로 변경 

 

4. upload할 모델 클래스 생성

class Category{
  int id;
  String name;

  Category({
    required this.id,
    required this.name
  });

  //firestore에서 데이터를 받을 때는 json으로 받음
 factory Category.fromJson(Map<String, dynamic> json){
   return Category(
       id: json['id'] as int,
       name: json['name'] as String
   );
 }

 Map<String, dynamic> toJson(){
   return{
     'id': id,
     'name': name,
   };
 }
}

 

5. upload 기능 구현

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:csv/csv.dart';

import 'package:flutter/services.dart';
import 'package:uddutsi/constants.dart';

import '../../model/category.dart';

class UploadModel{
  Future<List<List<dynamic>>> loadCategoryCsv(String path) async {
    final _rawData = await rootBundle.loadString(path);
    List<List<dynamic>> _listData =
    const CsvToListConverter().convert(_rawData);

    return _listData;
  }

  Future<void> uploadCategory(List<List<dynamic>> fields) async{
    //collection은 디렉토리라고 생각하자
    final categoriesRef = FirebaseFirestore.instance.collection(Constants().categories)
        .withConverter<Category>(
          fromFirestore: (snapshot, _) => Category.fromJson(snapshot.data()!),
          toFirestore: (category, _) => category.toJson(),
    );

    //TODO: batch로 한번에 작업할 수 있는 방법이 있을텐데
    for(final item in fields){
      categoriesRef.add(
        Category(id: item[0], name: item[1]),
      );
    }
  }
}

댓글