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]),
);
}
}
}
댓글