我是dart的新手,我一直试图弄清楚如何使用googleapis
库更新日历事件,然后在网页上显示日历/事件。
到目前为止,我有这个代码,我希望只将#text
id的文本更改为所选日历ID中的事件列表:
import 'dart:html';
import 'package:googleapis/calendar/v3.dart';
import 'package:googleapis_auth/auth_io.dart';
final _credentials = new ServiceAccountCredentials.fromJson(r'''
{
"private_key_id": "myprivatekeyid",
"private_key": "myprivatekey",
"client_email": "myclientemail",
"client_id": "myclientid",
"type": "service_account"
}
''');
const _SCOPES = const [CalendarApi.CalendarScope];
void main() {
clientViaServiceAccount(_credentials, _SCOPES).then((http_client) {
var calendar = new CalendarApi(http_client);
String adminPanelCalendarId = 'mycalendarID';
var event = calendar.events;
var events = event.list(adminPanelCalendarId);
events.then((showEvents) {
querySelector("#text2").text = showEvents.toString();
});
});
}
但网页上没有显示任何内容。我想我误解了如何在飞镖中使用客户端和服务器端代码...我是否将文件分解为多个文件?我如何更新日历并在带有dart的网页上显示?
我熟悉browser
包,但这是我第一次用服务器端库编写任何内容(googleapis
使用dart:io
所以我认为它是服务器端?我无法在dartium中运行代码。
如果有人能指出我正确的方向,或提供一个如何实现这一目标的例子,我将非常感激!
答案 0 :(得分:2)
您可能正在寻找的是hybrid flow。这会产生两个项目
来自文档:
使用案例:Web应用程序可能希望获得代表用户访问数据的同意。客户端部分是一个动态的webapp,它想要打开一个弹出窗口,要求用户同意。 webapp可能希望使用凭据进行API调用,但服务器也可能希望对用户数据进行脱机访问。
页面Google+ Sign-In for server-side apps描述了此流程的工作原理。
答案 1 :(得分:1)
使用以下代码,您可以显示与记录的帐户关联的日历的事件。在此示例中,我使用 createImplicitBrowserFlow (请参阅https://pub.dartlang.org/packages/googleapis_auth中的文档),其中包含来自Google Cloud Console Project的ID和密钥。
import 'dart:html';
import 'package:googleapis/calendar/v3.dart';
import 'package:googleapis_auth/auth_browser.dart' as auth;
var id = new auth.ClientId("<yourID>", "<yourKey>");
var scopes = [CalendarApi.CalendarScope];
void main() {
auth.createImplicitBrowserFlow(id, scopes).then((auth.BrowserOAuth2Flow flow) {
flow.clientViaUserConsent().then((auth.AuthClient client) {
var calendar = new CalendarApi(client);
String adminPanelCalendarId = 'primary';
var event = calendar.events;
var events = event.list(adminPanelCalendarId);
events.then((showEvents) {
showEvents.items.forEach((Event ev) { print(ev.summary); });
querySelector("#text2").text = showEvents.toString();
});
client.close();
flow.close();
});
});
}