Flutter에서 사용자의 Goolge 정보를 가져오는 방법을 알아보자.
이 글에서는 그중에서도 Google Calendar 정보를 가져오는 방법을 알아볼 것이다.
0. 필요한 flutter package들을 먼저 설치해주자.
$ flutter pub add googleapis
$ flutter pub add google_sign_in
$ flutter pub add extension_google_sign_in_as_googleapis_auth
1. 내가 원하는 google api를 선택하여 import 한다. https://pub.dev/documentation/googleapis/latest/
import 'package:googleapis/calendar/v3.dart' as calendar;
2. 내가 만들고 있는 프로젝트에 google calendar api를 사용 설정한다. https://console.cloud.google.com/apis/library/browse?hl=ko&_ga=2.262763849.435929475.1706059666-1689831539.1706059649
Google Cloud console
console.cloud.google.com
- 내 구글 계정으로 프로젝트가 여러 개 있다면, 좌측 상단에서 프로젝트를 선택할 수 있다.

- Google Calendar를 검색하고 "사용" 버튼을 클릭해 준다.
- 내 앱에 잘 등록된 것을 확인할 수 있다.

3. google_sign_in과 extension_google_sign_in_as_googleapis_auth 패키지를 이용해서 사용자 인증을 해야 한다.
import 'package:google_sign_in/google_sign_in.dart';
import 'package:extension_google_sign_in_as_googleapis_auth/extension_google_sign_in_as_googleapis_auth.dart';
final GoogleSignIn _googleSignIn = GoogleSignIn(
scopes: [
CalendarApi.calendarScope,
],
);
final GoogleSignInAccount? googleUser = await _googleSignIn.signIn();
if (googleUser == null) {
logger.e('Google Sign In failed or was cancelled by user.');
return;
}
final httpClient = await _googleSignIn.authenticatedClient();
if (httpClient == null) {
logger.e('Failed to obtain authenticated HTTP client.');
return;
}
여기까지 진행하면 구글 사용자 로그인/정보 이용 권한 허용 화면이 뜬다.
4. 이제 진짜 Google Calendar 정보를 가져와 보자.
아래 예제는 각 Calendar의 "오늘" 이벤트들을 가져와서 로그를 찍는 예제이다.
import 'package:logger/logger.dart';
var logger = Logger();
var calendarApi = calendar.CalendarApi(httpClient);
DateTime now = DateTime.now();
DateTime startDate = DateTime(now.year, now.month, now.day);
DateTime endDate = DateTime(now.year, now.month, now.day + 1)
.subtract(const Duration(microseconds: 1));
var calendarList = await calendarApi.calendarList.list();
for (var calendarEntry in calendarList.items!) {
if (calendarEntry.id != null) {
dynamic events = await calendarApi.events.list(
calendarEntry.id!,
timeMin: startDate.toUtc(),
timeMax: endDate.toUtc(),
singleEvents: true,
orderBy: 'startTime',
);
events = events.items!.map((event) {
logger.d("Title: ${event.summary}");
logger.d("Start Time: ${event.start!}");
logger.d("End Time: ${event.end!}");
logger.d("Event ID: ${event.id}");
};
}
}
5. Google Calendar API로 다른 정보를 가져오고 싶다면 API 문서를 참고하자.
Google Calendar API 개요 | Google for Developers
Google Calendar API 개요 | Google for Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 의견 보내기 Google Calendar API 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Google Cal
developers.google.com
calendar_v3 library - Dart API (pub.dev)
calendar_v3 library - Dart API
calendar/v3 library Exceptions / Errors ApiRequestError Represents a general error reported by the API endpoint. DetailedApiRequestError Represents a specific error reported by the API endpoint.
pub.dev
나는 Google Calendar에서 이벤트들을 가져오기만 하는 간단한 작업을 했던 터라, 대충 API에서 어떤 걸 제공하는지만 파악하고 calendar_v3 library 코드를 보면서 어떻게 쓰는지 파악했던 것 같다.