API календаря Google Flutter - clientViaServiceAccount не отвечает - PullRequest
2 голосов
/ 10 июля 2020

Я знаю, что на этот вопрос уже есть ответы, но я не мог решить свою проблему, глядя на них,
поэтому я надеюсь, что вы сможете мне помочь или, по крайней мере, посоветовать мне, что попробовать, потому что я не уверен, что делать или как отлаживать, чтобы решить мою проблему.

Я пытаюсь перечислить все события в календаре моей компании, используя Google Calendar Api .
Я использовал тот же код в этом вопросе : Используя dart и flutter с API календаря Google, чтобы получить список событий в календаре пользователя
И я выполнил все 6 шагов из ответа в вопросе выше.

По какой-то причине вызов clientViaServiceAccount не возвращает никаких результатов и ошибок.
Кажется, что он выполняет бесконечность l oop.

Это код, который я я использую, и я могу видеть только напечатанные "getCalendarEvents". Я не вижу сообщения «ЗДЕСЬ» или каких-либо ошибок. Таким образом, проблема наверняка возникает в clientViaServiceAccount.

Я редактировал код с учетом предложения Iamblichus , но проблема в том, что я даже не могу добраться до CalendarApi. Код размещен на clientViaServiceAccount.

import 'package:flutter/material.dart';
import 'package:googleapis_auth/auth_io.dart';
import 'package:googleapis/calendar/v3.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    CalendarAPI.getCalendarEvents();
    return MaterialApp(
      title: 'Flutter Demo',
      home: Container(),
    );
  }
}

class CalendarAPI {
  static final _accountCredentials = new ServiceAccountCredentials.fromJson(r'''
  {
    "private_key_id": myPrivatekeyId,
    "private_key": myPrivateKey,
    "client_email": myClientEmail,
    "client_id": myClientId,
    "type": "service_account"
  }
  ''');
  
  static final _scopes = [CalendarApi.CalendarScope];

  static void getCalendarEvents() {
    print('getCalendarEvents');
    clientViaServiceAccount(_accountCredentials, _scopes).then((client) {
      print('HERE');
      var calendar = new CalendarApi(client);
      print(calendar);

      // Added iamblichus answer
      var calendarListEntry = CalendarListEntry();
      calendarListEntry.id = calendarId;
      calendar.calendarList.insert(calendarListEntry).then((_) {
        print('CALENDAR ADDED');

        var calEvents = calendar.events.list(calendarId);
        calEvents.then((Events events) {
          events.items.forEach((Event event) {
            print(event.summary);
          });
        }).catchError((e) => print(e));
      }).catchError((e) => print(e));
    }).catchError((e) => print(e));
  }
}

РЕДАКТИРОВАТЬ ДЛЯ ОТВЕТА НА КОММЕНТАРИЙ iamblichus 15 июля в 12:31

Я создал службу Учетные данные учетной записи на странице изображения, показанного ниже.
Как только я создал ключ, я загрузил файл . json был загружен с учетными данными.
Я скопировал содержимое этого файла и вставьте в функцию ServiceAccountCredentials.from Json, чтобы учетные данные не могли быть неправильными.
И даже если учетные данные были неправильными, почему я не вижу ошибку, что вызов clientViaServiceAccount не получается?
Я ловлю любую ошибку и печатаю ее на экране с последним }).catchError((e) => print(e));.
По какой-то причине вызов clientViaServiceAccount ничего не делает, и я не могу понять, как найти причину этого. введите описание изображения здесь

...