Flutter闹钟管理插件codenic_alarm的使用

Flutter闹钟管理插件codenic_alarm的使用

codenic_alarm 是一个用于在 Flutter 应用程序中管理和调度闹钟的插件。通过本指南,我们将了解如何安装和使用 codenic_alarm 插件,并提供一个完整的示例来演示其基本功能。

获取开始

首先,确保你的 Flutter 环境已经正确配置。你可以通过以下命令来创建一个新的 Flutter 项目:

flutter create codenic_alarm_example
cd codenic_alarm_example

接下来,在 pubspec.yaml 文件中添加 codenic_alarmflutter_local_notifications 依赖项:

dependencies:
  flutter:
    sdk: flutter
  codenic_alarm: ^版本号
  flutter_local_notifications: ^版本号

然后运行 flutter pub get 来获取这些依赖项。

初始化插件

在你的应用程序中初始化 codenic_alarm 插件。打开 main.dart 文件并添加以下代码:

import 'dart:io';

import 'package:codenic_alarm/codenic_alarm.dart';
import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';

FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await CodenicAlarm.instance.initialize();

  final initializationSettingsAndroid = AndroidInitializationSettings('ic_launcher');

  final initializationSettingsIOS = DarwinInitializationSettings(
    notificationCategories: [
      DarwinNotificationCategory(
        'demoCategory',
        options: {
          DarwinNotificationCategoryOption.customDismissAction,
        },
        actions: [
          DarwinNotificationAction.plain(
            'id_1',
            'Action 1',
            options: {
              DarwinNotificationActionOption.foreground,
            },
          ),
          DarwinNotificationAction.plain(
            'id_2',
            'Action 2',
          ),
        ],
      ),
    ],
  );

  final initializationSettings = InitializationSettings(
    android: initializationSettingsAndroid,
    iOS: initializationSettingsIOS,
  );

  await flutterLocalNotificationsPlugin.initialize(
    initializationSettings,
    onDidReceiveBackgroundNotificationResponse: notificationTapBackground,
  );

  runApp(const MyApp());
}

示例代码

下面是一个完整的示例代码,展示了如何使用 codenic_alarm 插件实现闹钟的调度、取消等操作。

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Wrap(
            children: [
              FilledButton(
                child: const Text('请求通知权限'),
                onPressed: () async {
                  if (Platform.isIOS)
                    await flutterLocalNotificationsPlugin
                        .resolvePlatformSpecificImplementation<IOSFlutterLocalNotificationsPlugin>()
                        ?.requestPermissions(
                          alert: true,
                          badge: true,
                          sound: true,
                        );
                  else if (Platform.isAndroid)
                    await flutterLocalNotificationsPlugin
                        .resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>()
                        ?.requestExactAlarmsPermission();
                },
              ),
              FilledButton(
                child: const Text('显示闹钟'),
                onPressed: () {
                  CodenicAlarm.instance.schedule(
                    delay: const Duration(seconds: 5),
                    alarmInfo: AlarmInfo(
                      id: 1,
                      title: '调查提醒',
                      content: '报告您的健康状况',
                    ),
                  );
                },
              ),
              FilledButton(
                child: const Text('检查是否有活动的闹钟'),
                onPressed: () async {
                  final alarm = await CodenicAlarm.instance.activeAlarm();

                  if (alarm == null) {
                    print('没有活动的闹钟');
                  } else {
                    print('活动的闹钟: ${alarm.title} ${alarm.content}');
                  }
                },
              ),
              FilledButton(
                child: const Text('隐藏闹钟'),
                onPressed: () {
                  CodenicAlarm.instance.dismissAlarm();
                },
              ),
              FilledButton(
                child: const Text('取消所有闹钟'),
                onPressed: () {
                  CodenicAlarm.instance.cancelAll();
                },
              ),
              FilledButton(
                onPressed: () async {
                  print('AAAA');
                  final notificationDetailsIOS = DarwinNotificationDetails(
                    presentBanner: true,
                    categoryIdentifier: 'demoCategory',
                    presentSound: true,
                    threadIdentifier: '1',
                    interruptionLevel: InterruptionLevel.critical,
                    presentAlert: true,
                    presentList: true,
                  );

                  await flutterLocalNotificationsPlugin.show(
                    1,
                    '调查提醒',
                    '(10:45PM 下次。长按以取消) 潜入您的问答问卷!',
                    NotificationDetails(
                      iOS: notificationDetailsIOS,
                    ),
                  );

                  print('AAAA2');
                },
                child: Text('发送通知'),
              ),
            ],
          ),
        ),
      ),
      builder: (context, child) {
        return child!;
      },
    );
  }
}

[@pragma](/user/pragma)('vm:entry-point')
void notificationTapBackground(NotificationResponse notificationResponse) {
  // 处理通知点击事件
}

更多关于Flutter闹钟管理插件codenic_alarm的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter闹钟管理插件codenic_alarm的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


codenic_alarm 是一个用于在 Flutter 应用中管理闹钟的插件。它允许你创建、更新、删除和取消闹钟,并且支持在指定的时间触发闹钟。以下是如何使用 codenic_alarm 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 codenic_alarm 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  codenic_alarm: ^1.0.0  # 请使用最新版本

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

2. 初始化插件

在你的 Flutter 应用中,你需要初始化 codenic_alarm 插件。通常,你可以在 main.dart 文件中进行初始化:

import 'package:codenic_alarm/codenic_alarm.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await CodenicAlarm.initialize();
  runApp(MyApp());
}

3. 创建闹钟

你可以使用 CodenicAlarm.setAlarm 方法来创建一个新的闹钟。以下是一个简单的例子:

import 'package:codenic_alarm/codenic_alarm.dart';

void setAlarm() async {
  DateTime alarmTime = DateTime.now().add(Duration(minutes: 1)); // 1分钟后触发
  int alarmId = 1; // 闹钟的唯一ID

  await CodenicAlarm.setAlarm(
    id: alarmId,
    dateTime: alarmTime,
    payload: "Alarm triggered!", // 可选参数,用于传递额外的信息
  );

  print("Alarm set for $alarmTime");
}

4. 处理闹钟触发事件

当闹钟触发时,你需要处理这个事件。你可以通过监听 CodenicAlarm.onAlarm 流来处理闹钟触发事件:

import 'package:codenic_alarm/codenic_alarm.dart';

void listenToAlarm() {
  CodenicAlarm.onAlarm.stream.listen((alarmId) {
    print("Alarm triggered with ID: $alarmId");
    // 在这里处理闹钟触发后的逻辑
  });
}

5. 更新或取消闹钟

你可以使用 CodenicAlarm.updateAlarm 方法来更新已有的闹钟,或者使用 CodenicAlarm.cancelAlarm 方法来取消闹钟:

import 'package:codenic_alarm/codenic_alarm.dart';

void updateAlarm() async {
  int alarmId = 1;
  DateTime newAlarmTime = DateTime.now().add(Duration(minutes: 5));

  await CodenicAlarm.updateAlarm(
    id: alarmId,
    dateTime: newAlarmTime,
  );

  print("Alarm updated to $newAlarmTime");
}

void cancelAlarm() async {
  int alarmId = 1;

  await CodenicAlarm.cancelAlarm(id: alarmId);

  print("Alarm with ID $alarmId canceled");
}

6. 获取所有闹钟

你可以使用 CodenicAlarm.getAllAlarms 方法来获取所有已设置的闹钟:

import 'package:codenic_alarm/codenic_alarm.dart';

void getAllAlarms() async {
  List<AlarmInfo> alarms = await CodenicAlarm.getAllAlarms();

  for (var alarm in alarms) {
    print("Alarm ID: ${alarm.id}, Time: ${alarm.dateTime}");
  }
}

7. 处理后台任务

如果你的应用在后台运行,你仍然可以处理闹钟触发事件。你可以使用 CodenicAlarm.initialize 方法来确保插件在后台也能正常工作。

8. 权限处理

在某些设备上,设置闹钟可能需要特定的权限。你需要在 AndroidManifest.xml 文件中添加以下权限:

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

9. 示例应用

以下是一个简单的示例应用,展示了如何使用 codenic_alarm 插件:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await CodenicAlarm.initialize();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Alarm Example')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: setAlarm,
                child: Text('Set Alarm'),
              ),
              ElevatedButton(
                onPressed: cancelAlarm,
                child: Text('Cancel Alarm'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  void setAlarm() async {
    DateTime alarmTime = DateTime.now().add(Duration(minutes: 1));
    int alarmId = 1;

    await CodenicAlarm.setAlarm(
      id: alarmId,
      dateTime: alarmTime,
      payload: "Alarm triggered!",
    );

    print("Alarm set for $alarmTime");
  }

  void cancelAlarm() async {
    int alarmId = 1;

    await CodenicAlarm.cancelAlarm(id: alarmId);

    print("Alarm with ID $alarmId canceled");
  }
}
回到顶部