Flutter闹钟管理插件cfn_alarm的使用

Flutter闹钟管理插件cfn_alarm的使用

cfn_alarm 是一个用于 Flutter 应用程序的闹钟管理插件。目前该插件仅支持 iOS 平台,并且能够实现音频在前台播放的功能。

特性

  • 目前仅在 iOS 平台上可用。
  • 支持前台音频下载和播放。

接下来,我们通过一个完整的示例来展示如何使用 cfn_alarm 插件。

示例代码

import 'package:cfn_alarm/app_enums.dart';
import 'package:flutter/material.dart';

import 'package:cfn_alarm/cfn_alarm.dart';
import 'package:cfn_alarm/models/alarm_setting.dart';
import 'package:intl/intl.dart';

void main() {
  // 确保 Flutter 框架已经初始化
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化 cfn_alarm 插件
  CfnAlarm.init();

  // 启动应用程序
  runApp(const MyApp());
}

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  // 用于显示平台版本信息
  String _platformVersion = '未知';
  String _platformVersion1 = '未知';

  @override
  void initState() {
    super.initState();
    
    // 初始化回调
    initCallBack();

    // 初始化平台状态
    initPlatformState();
  }

  /// 设置日期时间格式为 yyyy-MM-dd HH:mm:ss
  Future<void> initPlatformState() async {
    // 初始化并设置闹钟
    var initScheduleAlarm = await CfnAlarm.initScheduleAlarm(
      setting: AlarmSetting(
        id: 123,
        dateTime: DateFormat('yyyy-MM-dd HH:mm:ss').format(DateTime.now().copyWith(second: 0, minute: 6)),
        audioPath: "https://samplelib.com/lib/preview/mp3/sample-15s.mp3",
        title: "通知",
        body: "通知内容",
        audioType: AudioType.network,
      ),
    );

    // 更新界面状态
    setState(() {
      _platformVersion = initScheduleAlarm!.toString();
    });
  }

  @override
  void dispose() {
    // 取消闹钟
    CfnAlarm.onCancel();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Column(
            children: [
              // 显示当前平台版本信息
              Text('运行在: $_platformVersion\n'),
              const SizedBox(height: 35),
              
              // 停止调度闹钟按钮
              TextButton(
                onPressed: () async {
                  // 移除已设置的闹钟
                  var initScheduleAlarm = await CfnAlarm.removeScheduleAlarm(id: 123);

                  // 更新界面状态
                  setState(() {
                    _platformVersion1 = initScheduleAlarm!.toString();
                  });
                },
                child: Text("停止调度闹钟: $_platformVersion1"),
              )
            ],
          ),
        ),
      ),
    );
  }

  Future<void> initCallBack() async {
    // 监听闹钟接收事件
    CfnAlarm.onReceived.stream.listen((event) {
      // 处理接收到的闹钟事件
    });

    // 监听闹钟点击事件
    CfnAlarm.onTapReceived.stream.listen((event) {
      // 处理点击闹钟事件
    });
  }
}

代码解释

  1. 初始化插件

    WidgetsFlutterBinding.ensureInitialized();
    CfnAlarm.init();
    

    在启动应用之前,确保 Flutter 框架已经初始化,并调用 CfnAlarm.init() 方法初始化插件。

  2. 设置闹钟

    var initScheduleAlarm = await CfnAlarm.initScheduleAlarm(
      setting: AlarmSetting(
        id: 123,
        dateTime: DateFormat('yyyy-MM-dd HH:mm:ss').format(DateTime.now().copyWith(second: 0, minute: 6)),
        audioPath: "https://samplelib.com/lib/preview/mp3/sample-15s.mp3",
        title: "通知",
        body: "通知内容",
        audioType: AudioType.network,
      ),
    );
    

    使用 CfnAlarm.initScheduleAlarm 方法设置闹钟,参数包括闹钟 ID、日期时间、音频路径等。

  3. 移除闹钟

    var initScheduleAlarm = await CfnAlarm.removeScheduleAlarm(id: 123);
    

    使用 CfnAlarm.removeScheduleAlarm 方法移除已设置的闹钟。

  4. 监听闹钟事件

    CfnAlarm.onReceived.stream.listen((event) {
      // 处理接收到的闹钟事件
    });
    
    CfnAlarm.onTapReceived.stream.listen((event) {
      // 处理点击闹钟事件
    });
    

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

1 回复

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


cfn_alarm 是一个用于 Flutter 的闹钟管理插件,允许开发者在 Flutter 应用中轻松设置和管理闹钟。这个插件提供了跨平台的支持,可以在 Android 和 iOS 上使用。以下是关于如何使用 cfn_alarm 插件的基本指南。

1. 添加依赖

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

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

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

2. 导入插件

在你的 Dart 文件中导入 cfn_alarm 插件:

import 'package:cfn_alarm/cfn_alarm.dart';

3. 设置闹钟

你可以使用 CfnAlarm 类来设置闹钟。以下是一个简单的示例,展示如何设置一个闹钟:

void setAlarm() async {
  // 设置闹钟的时间
  DateTime alarmTime = DateTime.now().add(Duration(minutes: 1)); // 1分钟后触发

  // 设置闹钟
  await CfnAlarm.setAlarm(
    alarmTime: alarmTime,
    alarmTitle: 'My Alarm',
    alarmMessage: 'This is my alarm message',
    alarmId: 1, // 唯一的闹钟ID
  );

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

4. 取消闹钟

你可以通过 cancelAlarm 方法来取消已经设置的闹钟:

void cancelAlarm() async {
  await CfnAlarm.cancelAlarm(alarmId: 1);
  print('Alarm canceled');
}

5. 处理闹钟触发

当闹钟触发时,你可以在应用中进行相应的处理。通常,你可以在 main.dart 中监听闹钟触发事件:

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

  // 监听闹钟触发事件
  CfnAlarm.onAlarmTriggered.listen((alarmId) {
    print('Alarm $alarmId triggered');
    // 在这里处理闹钟触发后的逻辑
  });
}

6. 权限处理

在 Android 上,设置闹钟需要 SCHEDULE_EXACT_ALARM 权限。你需要在 AndroidManifest.xml 中添加以下权限:

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

在 iOS 上,你需要在 Info.plist 中添加通知权限:

<key>UIBackgroundModes</key>
<array>
  <string>audio</string>
  <string>voip</string>
</array>

7. 测试

运行你的应用并测试闹钟的设置和触发功能。确保在不同平台上(Android 和 iOS)都能正常工作。

8. 更多功能

cfn_alarm 插件还提供了其他功能,如重复闹钟、自定义铃声等。你可以查看插件的 官方文档 来了解更多详细信息。

示例代码

以下是一个完整的示例代码,展示了如何使用 cfn_alarm 插件设置和取消闹钟:

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

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

  // 监听闹钟触发事件
  CfnAlarm.onAlarmTriggered.listen((alarmId) {
    print('Alarm $alarmId triggered');
    // 在这里处理闹钟触发后的逻辑
  });
}

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'),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: cancelAlarm,
                child: Text('Cancel Alarm'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  void setAlarm() async {
    DateTime alarmTime = DateTime.now().add(Duration(minutes: 1)); // 1分钟后触发
    await CfnAlarm.setAlarm(
      alarmTime: alarmTime,
      alarmTitle: 'My Alarm',
      alarmMessage: 'This is my alarm message',
      alarmId: 1,
    );
    print('Alarm set for $alarmTime');
  }

  void cancelAlarm() async {
    await CfnAlarm.cancelAlarm(alarmId: 1);
    print('Alarm canceled');
  }
}
回到顶部