搜尋套件、儲存庫與 APP 分類

套件詳情v4.3.3

device_calendar

一個跨平台插件,用於修改使用者裝置上的日曆。

AndroidiOS
近 30 天下載
9.5萬
喜歡數
281
Pub 分數
130

安裝套件

flutter pub add device_calendar

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

device_calendar 套件是一個跨平台的 Flutter 插件,可在 Android 與 iOS 上讓應用程式與使用者的裝置日曆進行互動。它允許直接從裝置的原生日曆系統讀取、建立、更新和刪除日曆事件與日曆。此套件設計用於順暢整合,在各平台提供一致的 API,同時尊重平台特定的行為與權限。這使其非常適合需要直接存取日曆的生產力、排程與提醒類應用程式。

適用情境

  • 安排預約
  • 建立事件提醒
  • 與裝置日曆同步
  • 管理日曆事件
  • 建構任務管理應用

主要特色

  • 跨平台相容性
  • 原生日曆整合
  • 事件創建和刪除
  • 日曆權限處理
  • 平台特定行為支援

適合對象

  • 生產力應用
  • 基於日曆的提醒
  • 任務管理工具
  • 活動規劃軟體
  • 需要日曆同步的應用

使用建議

  • 兩個平台都需要使用者權限
  • 僅限原生日曆系統
  • 在 Android 與 iOS 上的行為可能有所不同
  • 不支援 Web 或桌面端
  • 依賴於裝置日曆的可用性

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

Device Calendar Plugin

pub package Pub Version (including pre-releases) build

A cross platform plugin for modifying calendars on the user's device.

Breaking changes at v4

  • If you're upgrading from previous versions, your code will need to be modified (slightly), otherwise it will not run after update. See Timezone support for more details.
  • There are some changes to event JSON formats at v4. Pay extra care if you handle event JSONs. Directly calling to and from device calendars should be unaffected.

Features

  • Request permissions to modify calendars on the user's device
  • Check if permissions to modify the calendars on the user's device have been granted
  • Add or retrieve calendars on the user's device
  • Retrieve events associated with a calendar
  • Add, update or delete events from a calendar
  • Set up, edit or delete recurring events
    • NOTE: Editing a recurring event will currently edit all instances of it
    • NOTE: Deleting multiple instances in Android takes time to update, you'll see the changes after a few seconds
  • Add, modify or remove attendees and receive if an attendee is an organiser for an event
  • Setup reminders for an event
  • Specify a time zone for event start and end date
    • NOTE: Due to a limitation of iOS API, single time zone property is used for iOS (event.startTimeZone)
    • NOTE: For the time zone list, please refer to the TZ database name column on Wikipedia

Timezone support with TZDateTime

Due to feedback we received, starting from 4.0.0 we will be using the timezone package to better handle all timezone data.

This is already included in this package. However, you need to add this line whenever the package is needed.

import 'package:timezone/timezone.dart';

If you don't need any timezone specific features in your app, you may use flutter_native_timezone to get your devices' current timezone, then convert your previous DateTime with it.

import 'package:flutter_native_timezone/flutter_native_timezone.dart';

initializeTimeZones();

// As an example, our default timezone is UTC.
Location _currentLocation = getLocation('Etc/UTC');

Future setCurentLocation() async {
  String timezone = 'Etc/UTC';
  try {
    timezone = await FlutterNativeTimezone.getLocalTimezone();
  } catch (e) {
    print('Could not get the local timezone');
  }
  _currentLocation = getLocation(timezone);
  setLocalLocation(_currentLocation);
}

...

event.start = TZDateTime.from(oldDateTime, _currentLocation);

For other use cases, feedback or future developments on the feature, feel free to open a discussion on GitHub.

Null-safety migration

From v3.9.0, device_calendar is null-safe. However, not all workflows have been checked and bugs from older versions still persist.

You are strongly advised to test your workflow with the new package before shipping. Better yet, please leave a note for what works and what doesn't, or contribute some bug fixes!

Android Integration

The following will need to be added to the AndroidManifest.xml file for your application to indicate permissions to modify calendars are needed

<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
Proguard / R8 exceptions

NOTE: From v4.3.2 developers no longer need to add proguard rule in their app.

By default, all android apps go through R8 for file shrinking when building a release version. Currently, it interferes with some functions such as retrieveCalendars().

You may add the following setting to the ProGuard rules file proguard-rules.pro (thanks to Britannio Jarrett). Read more about the issue here

-keep class com.builttoroam.devicecalendar.** { *; }

See here for an example setup.

For more information, refer to the guide at Android Developer

AndroidX migration

Since v.1.0, this version has migrated to use AndroidX instead of the deprecated Android support libraries. When using 0.10.0 and onwards for this plugin, please ensure your application has been migrated following the guide here

iOS Integration

For iOS 10+ support, you'll need to modify the Info.plist to add the following key/value pair

<key>NSCalendarsUsageDescription</key>
<string>Access most functions for calendar viewing and editing.</string>

<key>NSContactsUsageDescription</key>
<string>Access contacts for event attendee editing.</string>

For iOS 17+ support, add the following key/value pair as well.

<key>NSCalendarsFullAccessUsageDescription</key>
<string>Access most functions for calendar viewing and editing.</string>

Note that on iOS, this is a Swift plugin. There is a known issue being tracked here by the Flutter team, where adding a plugin developed in Swift to an Objective-C project causes problems. If you run into such issues, please look at the suggested workarounds there.

所屬分類

依賴

依賴清單 3 項

原始碼儲存庫

使用此套件的專案