본문 바로가기

Dart & Flutter

[Flutter] 사용자의 Google Calendar 정보 가져오기

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 코드를 보면서 어떻게 쓰는지 파악했던 것 같다.