플러터와 DB
이미지 갤러리라면, DB를 구성하고 이미지를 저장하고 관리하는 것이 여간 귀찮은 일이 아닐 것이다.(해본 적이 없어서 추정) 🤭🤭🤭🤭
Firebase로 youtube 리스트를 구성한 적이 있었는데, 모바일로 경로를 등록하는 것도 firebase에서 수기로 입력하는 것도 상당히 귀찮다. 그래서, 엑셀처럼 구글 Sheets 로 테이블을 구성하여, DB로 사용하는 방법을 구성해 보았다.
GCP/Sheets 작업
당연히, GCP 프로젝트를 생성해야한다. 꽤 오래전에 만들어 놓은터라... 무슨 난관이 있었는지 기억나지 않는다.
서비스 계정을 생성한다. 누르기만 하면 된다.
구글 Sheets의 원하는 프로젝트에 들어가서, share 에다가 서비스 계정을 공유해준다. 서비스 계정이 뭔가 했더니, 내 껄 모니터링 하는 봇같은 느낌이다.
GCP로 다시 돌아와서 서비스 계정에 키를 생성한다. 키 생성 옵션에 JSON 파일을 선택하고, 다운 받도록 한다. JSON 파일은 다시는 다운 받을 수 없음에 유의해야 한다. 한참 찾았는데, 음... 다시 받을 순 없더라.
flutter 작업 : flutter-gsheets 호출
gsheets 패키지를 설치한다.
dependencies:
cupertino_icons: ^1.0.2
flutter:
sdk: flutter
gsheets: ^0.4.2
intl: ^0.18.1
gsheets 클래스를 만들어 준다. credetials 변수에 다운 받아놨던 JSON 키 파일의 내용을 복붙 해준다. 특별한 건 없다.
import 'package:gsheets/gsheets.dart';
class MyGsheet {
// create credentials
static const credentials = r'''
{
// your json code here from GCP
}
''';
// spreadsheet ID
static const spreadsheetID = '1FSTtTZ8VB9feu9f-0ZRMV16SZPzwK5ZGVUYMcP9PJ2g';
static late Worksheet? sheet;
static gsheetinit() async {
//init Google Sheets API
final gsheets = GSheets(credentials);
//fetches spreadsheet by its id
final ss = await gsheets.spreadsheet(spreadsheetID);
// get worksheet by its title - 'gal' is my own sheet name
sheet = ss.worksheetByTitle('gal');
}
//CRUD sample
//Read data functions
static Future<String> readSingleCellValue(int column, int row) async {
return await sheet!.values.value(column: column, row: row);
}
static Future<List> readCellByColumn(int fromRow) async {
return await sheet!.values.allColumns(fromRow: fromRow);
}
static cellUpdate(String rowKey, String newTxt) async {
await sheet!.values
.insertValueByKeys(newTxt, columnKey: 'title', rowKey: rowKey);
}
}
잠시 쉬는 시간..