Flutter日历添加插件add_2_calendar_new的使用

Flutter日历添加插件add_2_calendar_new的使用

简介

add_2_calendar_new 是一个非常简单的Flutter插件,用于将事件添加到各个平台(Android、iOS)的默认日历应用中。该插件源自 add_2_calendar_new 包。

安装

1. 在您的 pubspec.yaml 文件中添加依赖:

dependencies:
  add_2_calendar_new: ^1.0.1

2. Android 集成

  • 权限:默认情况下,该插件不需要任何特殊权限来添加日历事件。但如果您希望在不启动日历应用程序的情况下添加事件,则需要在 AndroidManifest.xml 中添加日历权限:
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
  • API 30 及以上:从 API 30 开始,Android 要求在 AndroidManifest.xml 中配置包可见性:
<queries>
  <intent>
    <action android:name="android.intent.action.INSERT" />
    <data android:mimeType="vnd.android.cursor.item/event" />
  </intent>
</queries>

3. iOS 集成

为了使此插件在 iOS 10+ 上正常工作,请确保在 info.plist 文件中添加以下内容:

<key>NSCalendarsUsageDescription</key>
<string>我们需要访问您的日历来添加活动</string>

如果需要支持位置自动补全功能,建议同时添加以下权限:

<key>NSContactsUsageDescription</key>
<string>我们需要访问您的联系人以提供位置自动补全</string>

使用示例

以下是完整的示例代码,展示了如何使用 add_2_calendar_new 插件将事件添加到日历中:

import 'package:flutter/material.dart';
import 'package:add_2_calendar_new/add_2_calendar_new.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  final GlobalKey<ScaffoldMessengerState> scaffoldMessengerKey = GlobalKey<ScaffoldMessengerState>();

  Event buildEvent({Recurrence? recurrence}) {
    return Event(
      title: '测试活动',
      description: '这是一个示例描述',
      location: 'Flutter 应用程序',
      startDate: DateTime.now(),
      endDate: DateTime.now().add(Duration(minutes: 30)),
      allDay: false,
      iosParams: IOSParams(
        reminder: Duration(minutes: 40),
        url: "http://example.com",
      ),
      androidParams: AndroidParams(
        emailInvites: ["test@example.com"],
      ),
      recurrence: recurrence,
    );
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      scaffoldMessengerKey: scaffoldMessengerKey,
      home: Scaffold(
        appBar: AppBar(
          title: const Text('添加事件到日历示例'),
        ),
        body: ListView(
          children: [
            ListTile(
              title: Text('添加普通事件'),
              trailing: Icon(Icons.calendar_today),
              onTap: () {
                Add2Calendar.addEvent2Cal(buildEvent());
              },
            ),
            Divider(),
            ListTile(
              title: const Text('添加每周重复事件'),
              subtitle: const Text("每周重复,持续60天"),
              trailing: Icon(Icons.calendar_today),
              onTap: () {
                Add2Calendar.addEvent2Cal(buildEvent(
                  recurrence: Recurrence(
                    frequency: Frequency.weekly,
                    endDate: DateTime.now().add(Duration(days: 60)),
                  ),
                ));
              },
            ),
            Divider(),
            ListTile(
              title: const Text('添加每两个月重复6次的事件'),
              subtitle: const Text("每两个月重复6次,总共一年"),
              trailing: Icon(Icons.calendar_today),
              onTap: () {
                Add2Calendar.addEvent2Cal(buildEvent(
                  recurrence: Recurrence(
                    frequency: Frequency.monthly,
                    interval: 2,
                    occurrences: 6,
                  ),
                ));
              },
            ),
            Divider(),
            ListTile(
              title: const Text('添加每年重复10年的事件 (仅限Android)'),
              subtitle: const Text("RRULE: 每年重复,持续10年"),
              trailing: Icon(Icons.calendar_today),
              onTap: () {
                Add2Calendar.addEvent2Cal(buildEvent(
                  recurrence: Recurrence(
                    frequency: Frequency.yearly,
                    rRule: 'FREQ=YEARLY;COUNT=10;WKST=SU',
                  ),
                ));
              },
            ),
            Divider(),
          ],
        ),
      ),
    );
  }
}

注意事项

  1. 日期时间格式:请参考 DateTime 文档 以确保日期时间格式正确。
  2. iOS语言支持:默认情况下,iOS 的保存事件界面会显示为英文。如需支持其他语言,请在 info.plist 中添加相应的语言设置:
<key>CFBundleLocalizations</key>
<array>
  <string>en</string>
  <string>es</string>
  <string>ja</string>
</array>

通过上述步骤和示例代码,您可以轻松地将事件添加到用户的日历中,并根据需要设置重复规则和其他参数。


更多关于Flutter日历添加插件add_2_calendar_new的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter日历添加插件add_2_calendar_new的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用add_2_calendar_new插件来添加事件到日历的示例代码。这个插件允许你将事件添加到设备的原生日历应用中。

首先,确保你已经在pubspec.yaml文件中添加了add_2_calendar_new依赖:

dependencies:
  flutter:
    sdk: flutter
  add_2_calendar_new: ^2.1.3  # 请检查最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤来使用这个插件:

  1. 导入插件
import 'package:add_2_calendar_new/add_2_calendar_new.dart';
  1. 配置权限

在你的AndroidManifest.xml文件中添加必要的权限:

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

对于iOS,你需要在Info.plist中添加日历访问权限:

<key>NSCalendarsUsageDescription</key>
<string>需要访问日历以添加事件</string>
  1. 请求权限

在添加事件之前,你需要请求用户的权限。这里是一个简单的权限请求示例:

Future<bool> requestCalendarPermissions() async {
  bool hasPermissions = await Add2Calendar.checkCalendarPermission();

  if (!hasPermissions) {
    bool result = await Add2Calendar.requestCalendarPermission();
    return result;
  }
  return true;
}
  1. 添加事件

使用Add2Calendar.addEvent2Calendar方法来添加事件:

Future<void> addEventToCalendar() async {
  bool hasPermissions = await requestCalendarPermissions();

  if (hasPermissions) {
    Event event = Event(
      title: 'Flutter Conference',
      description: 'Join us for the Flutter Conference!',
      startTime: DateTime(2023, 12, 1, 10, 0),
      endTime: DateTime(2023, 12, 1, 17, 0),
      location: 'Online',
      allDay: false,
      // 其他可选参数,如提醒等
    );

    Calendar calendar = Calendar(
      id: '1', // 这里的id通常不需要指定,除非你有特定的日历id
      accountId: null, // 这里的accountId通常不需要指定,除非你有特定的账户id
      name: 'Primary Calendar',
      accessLevel: 'owner',
    );

    Add2CalendarStatus status = await Add2Calendar.addEvent2Calendar(
      event: event,
      calendarId: calendar.id, // 如果需要指定特定日历,可以使用calendar.id
      saveToDefaultCalendar: true, // 如果不指定calendarId,则使用默认日历
    );

    if (status == Add2CalendarStatus.SUCCESS) {
      print('Event added successfully!');
    } else {
      print('Failed to add event: $status');
    }
  } else {
    print('Calendar permissions are denied.');
  }
}
  1. 调用添加事件函数

你可以在你的UI中调用这个函数来添加事件,例如在一个按钮点击事件中:

ElevatedButton(
  onPressed: () {
    addEventToCalendar();
  },
  child: Text('Add Event to Calendar'),
)

这个示例展示了如何在Flutter项目中使用add_2_calendar_new插件来请求日历权限并添加事件。注意,实际项目中可能需要更多的错误处理和用户交互逻辑。

回到顶部