Sample code for 30+ languages & platforms
Dart

MS Graph Calendar List Events

See more Microsoft Calendar Examples

Retrieve a list of events in a calendar. The list contains single instance meetings and series masters.

For more details, see https://docs.microsoft.com/en-us/graph/api/calendar-list-events?view=graph-rest-1.0

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // This example requires the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  final http = CkHttp();

  // Use your previously obtained access token as shown here:
  //    Get Microsoft Graph OAuth2 Access Token with Calendars.ReadWrite scope.

  final jsonToken = CkJsonObject();
  try {
    jsonToken.loadFile('qa_data/tokens/msGraphCalendar.json');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  http.authToken = jsonToken.stringOf('access_token');

  // Specify the calendar id
  http.setUrlVar('id', 'AQMkADAwATM0MDAAMS1iNTcwLWI2NTEtMDACLTAwCgBGAAADsVyfxjDU406Ic4X7ill8xAcA5_vF7TKKdE6bGCRqXyl2PQAAAgEGAAAA5_vF7TKKdE6bGCRqXyl2PQAClEpRTgAAAA==');
  // Send a GET request to https://graph.microsoft.com/v1.0/me/calendars/{$id}/events
  final String strResponse;
  try {
    strResponse = http.quickGetStr('https://graph.microsoft.com/v1.0/me/calendars/{\$id}/events');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  final json = CkJsonObject();
  json.load(strResponse);
  json.emitCompact = false;

  if (http.lastStatus != 200) {
    print(json.emit());
    print('Failed, response status code = ${http.lastStatus}');
    return;
  }

  print(json.emit());

  // Sample output:
  // (See parsing code below..)

  // {
  //   "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('admin%40chilkat.io')/calendars('AQMkADAwATM0MDAAMS1i ... AClEpRTgAAAA%3D%3D')/events",
  //   "value": [
  //     {
  //       "@odata.etag": "W/\"5+vF7TKKdE6bGCRqXyl2PQAClIgmmw==\"",
  //       "id": "AQMkADAwATM0MDAAM ... AApRZ7JkAAAA=",
  //       "createdDateTime": "2019-04-26T14:31:39.8791929Z",
  //       "lastModifiedDateTime": "2019-04-26T14:31:41.2753537Z",
  //       "changeKey": "5+vF7TKKdE6bGCRqXyl2PQAClIgmmw==",
  //       "categories": [
  //       ],
  //       "originalStartTimeZone": "Pacific Standard Time",
  //       "originalEndTimeZone": "Pacific Standard Time",
  //       "iCalUId": "040000008200E ... A230FEBFE5F7486A",
  //       "reminderMinutesBeforeStart": 15,
  //       "isReminderOn": true,
  //       "hasAttachments": false,
  //       "subject": "Let's go for lunch",
  //       "bodyPreview": "Does mid month work for you?",
  //       "importance": "normal",
  //       "sensitivity": "normal",
  //       "isAllDay": false,
  //       "isCancelled": false,
  //       "isOrganizer": true,
  //       "responseRequested": true,
  //       "seriesMasterId": null,
  //       "showAs": "busy",
  //       "type": "singleInstance",
  //       "webLink": "https://outlook.live.com/owa/?itemid=AQMkADAwATM0MDAAMS1iNTcwLWI2NT ... gkal8pdj0AApRZ7JkAAAA%3D&exvsurl=1&path=/calendar/item",
  //       "onlineMeetingUrl": null,
  //       "recurrence": null,
  //       "responseStatus": {
  //         "response": "organizer",
  //         "time": "0001-01-01T00:00:00Z"
  //       },
  //       "body": {
  //         "contentType": "html",
  //         "content": "<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n<meta content=\"text/html; charset=us-ascii\">\r\n</head>\r\n<body>\r\nDoes mid month work for you?\r\n</body>\r\n</html>\r\n"
  //       },
  //       "start": {
  //         "dateTime": "2019-11-15T20:00:00.0000000",
  //         "timeZone": "UTC"
  //       },
  //       "end": {
  //         "dateTime": "2019-11-15T22:00:00.0000000",
  //         "timeZone": "UTC"
  //       },
  //       "location": {
  //         "displayName": "Harry's Bar",
  //         "locationType": "default",
  //         "uniqueId": "Harry's Bar",
  //         "uniqueIdType": "private"
  //       },
  //       "locations": [
  //         {
  //           "displayName": "Harry's Bar",
  //           "locationType": "default",
  //           "uniqueId": "Harry's Bar",
  //           "uniqueIdType": "private"
  //         }
  //       ],
  //       "attendees": [
  //         {
  //           "type": "required",
  //           "status": {
  //             "response": "none",
  //             "time": "0001-01-01T00:00:00Z"
  //           },
  //           "emailAddress": {
  //             "name": "Adele Vance",
  //             "address": "adelev@contoso.onmicrosoft.com"
  //           }
  //         }
  //       ],
  //       "organizer": {
  //         "emailAddress": {
  //           "name": "Matt",
  //           "address": "outlook_3A33FCEB9B74CC15@outlook.com"
  //         }
  //       }
  //     }
  //   ]
  // }

  // Use this online tool to generate parsing code from sample JSON: 
  // Generate Parsing Code from JSON

  var i = 0;
  var odataEtag = '';
  var id = '';
  var createdDateTime = '';
  var lastModifiedDateTime = '';
  var changeKey = '';
  var originalStartTimeZone = '';
  var originalEndTimeZone = '';
  var iCalUId = '';
  var reminderMinutesBeforeStart = 0;
  var subject = '';
  var bodyPreview = '';
  var importance = '';
  var sensitivity = '';
  var seriesMasterId = '';
  var showAs = '';
  var vType = '';
  var webLink = '';
  var onlineMeetingUrl = '';
  var recurrence = '';
  var responseStatusResponse = '';
  var responseStatusTime = '';
  var bodyContentType = '';
  var bodyContent = '';
  var startDateTime = '';
  var startTimeZone = '';
  var endDateTime = '';
  var endTimeZone = '';
  var locationDisplayName = '';
  var locationLocationType = '';
  var locationUniqueId = '';
  var locationUniqueIdType = '';
  var organizerEmailAddressName = '';
  var organizerEmailAddressAddress = '';
  var j = 0;
  var countJ = 0;
  var displayName = '';
  var locationType = '';
  var uniqueId = '';
  var uniqueIdType = '';
  var statusResponse = '';
  var statusTime = '';
  var emailAddressName = '';
  var emailAddressAddress = '';

  final odataContext = json.stringOf('"@odata.context"');
  i = 0;
  final countI = json.sizeOfArray('value');
  while (i < countI) {
    json.i = i;
    odataEtag = json.stringOf('value[i]."@odata.etag"');
    id = json.stringOf('value[i].id');
    createdDateTime = json.stringOf('value[i].createdDateTime');
    lastModifiedDateTime = json.stringOf('value[i].lastModifiedDateTime');
    changeKey = json.stringOf('value[i].changeKey');
    originalStartTimeZone = json.stringOf('value[i].originalStartTimeZone');
    originalEndTimeZone = json.stringOf('value[i].originalEndTimeZone');
    iCalUId = json.stringOf('value[i].iCalUId');
    reminderMinutesBeforeStart = json.intOf('value[i].reminderMinutesBeforeStart');
    json.boolOf('value[i].isReminderOn');
    json.boolOf('value[i].hasAttachments');
    subject = json.stringOf('value[i].subject');
    bodyPreview = json.stringOf('value[i].bodyPreview');
    importance = json.stringOf('value[i].importance');
    sensitivity = json.stringOf('value[i].sensitivity');
    json.boolOf('value[i].isAllDay');
    json.boolOf('value[i].isCancelled');
    json.boolOf('value[i].isOrganizer');
    json.boolOf('value[i].responseRequested');
    seriesMasterId = json.stringOf('value[i].seriesMasterId');
    showAs = json.stringOf('value[i].showAs');
    vType = json.stringOf('value[i].type');
    webLink = json.stringOf('value[i].webLink');
    onlineMeetingUrl = json.stringOf('value[i].onlineMeetingUrl');
    recurrence = json.stringOf('value[i].recurrence');
    responseStatusResponse = json.stringOf('value[i].responseStatus.response');
    responseStatusTime = json.stringOf('value[i].responseStatus.time');
    bodyContentType = json.stringOf('value[i].body.contentType');
    bodyContent = json.stringOf('value[i].body.content');
    startDateTime = json.stringOf('value[i].start.dateTime');
    startTimeZone = json.stringOf('value[i].start.timeZone');
    endDateTime = json.stringOf('value[i].end.dateTime');
    endTimeZone = json.stringOf('value[i].end.timeZone');
    locationDisplayName = json.stringOf('value[i].location.displayName');
    locationLocationType = json.stringOf('value[i].location.locationType');
    locationUniqueId = json.stringOf('value[i].location.uniqueId');
    locationUniqueIdType = json.stringOf('value[i].location.uniqueIdType');
    organizerEmailAddressName = json.stringOf('value[i].organizer.emailAddress.name');
    organizerEmailAddressAddress = json.stringOf('value[i].organizer.emailAddress.address');
    j = 0;
    countJ = json.sizeOfArray('value[i].categories');
    while (j < countJ) {
      json.j = j;
      // ...
      j++;
    }

    j = 0;
    countJ = json.sizeOfArray('value[i].locations');
    while (j < countJ) {
      json.j = j;
      displayName = json.stringOf('value[i].locations[j].displayName');
      locationType = json.stringOf('value[i].locations[j].locationType');
      uniqueId = json.stringOf('value[i].locations[j].uniqueId');
      uniqueIdType = json.stringOf('value[i].locations[j].uniqueIdType');
      j++;
    }

    j = 0;
    countJ = json.sizeOfArray('value[i].attendees');
    while (j < countJ) {
      json.j = j;
      vType = json.stringOf('value[i].attendees[j].type');
      statusResponse = json.stringOf('value[i].attendees[j].status.response');
      statusTime = json.stringOf('value[i].attendees[j].status.time');
      emailAddressName = json.stringOf('value[i].attendees[j].emailAddress.name');
      emailAddressAddress = json.stringOf('value[i].attendees[j].emailAddress.address');
      j++;
    }

    i++;
  }

  print('Success.');
}