Flutter闹钟管理插件flutter_alarm_clock的使用

发布于 1周前 作者 yibo5220 来自 Flutter

Flutter闹钟管理插件flutter_alarm_clock的使用

Android Alarm Clock Plugin for Flutter

pub package

此插件允许Flutter应用程序在平台为Android时与默认的时钟应用程序进行交互。它提供了一个轻量级的包装器,用于包装时钟应用程序意图。通过Android意图与默认的时钟应用程序通信。

当前支持的功能

  • 创建新的闹钟
  • 创建新的定时器
  • 打开默认的时钟应用程序显示闹钟
  • 打开默认的时钟应用程序显示定时器

使用方法

创建一个闹钟

创建一个新的闹钟。函数参数:

  • 'hour' 指定闹钟的小时
  • 'minutes' 指定闹钟的分钟
  • 'title' 指定闹钟标题 - 可选
  • 'skipUi' 指定时钟应用程序是否应该打开 - 可选
// 在23:59创建一个闹钟
FlutterAlarmClock.createAlarm(hour: 23, minutes: 59);

创建一个定时器

创建一个新的定时器。函数参数:

  • 'length' 指定定时器长度(以秒为单位)
  • 'title' 指定定时器标题 - 可选
  • 'skipUi' 指定时钟应用程序是否应该打开 - 可选
// 创建一个42秒的定时器
FlutterAlarmClock.createTimer(length: 42);

显示闹钟

打开默认的时钟应用程序显示闹钟。

FlutterAlarmClock.showAlarms();

显示定时器

打开默认的时钟应用程序显示定时器。

FlutterAlarmClock.showTimers();

注意:目前iOS平台上没有类似的方法。

平台支持

平台 支持情况
Android ✔️

示例应用

截图

screenshot

完整示例代码

以下是完整的示例代码,展示了如何使用flutter_alarm_clock插件:

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

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

/// {@template myApp}
/// 主类,用于Flutter闹钟示例应用程序。
/// {@endtemplate}
class MyApp extends StatefulWidget {
  /// @{@macro myApp}
  const MyApp({Key? key}) : super(key: key);

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

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Flutter闹钟示例'),
        ),
        body: Center(
          child: Column(
            children: <Widget>[
              Container(
                margin: const EdgeInsets.all(25),
                child: TextButton(
                  child: const Text(
                    '在23:59创建闹钟',
                    style: TextStyle(fontSize: 20),
                  ),
                  onPressed: () {
                    FlutterAlarmClock.createAlarm(hour: 23, minutes: 59);
                  },
                ),
              ),
              Container(
                margin: const EdgeInsets.all(25),
                child: const TextButton(
                  onPressed: FlutterAlarmClock.showAlarms,
                  child: Text(
                    '显示所有闹钟',
                    style: TextStyle(fontSize: 20),
                  ),
                ),
              ),
              Container(
                margin: const EdgeInsets.all(25),
                child: TextButton(
                  child: const Text(
                    '创建一个42秒的定时器',
                    style: TextStyle(fontSize: 20),
                  ),
                  onPressed: () {
                    FlutterAlarmClock.createTimer(length: 42);
                  },
                ),
              ),
              Container(
                margin: const EdgeInsets.all(25),
                child: const TextButton(
                  onPressed: FlutterAlarmClock.showTimers,
                  child: Text(
                    '显示所有定时器',
                    style: TextStyle(fontSize: 20),
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

这个示例应用程序展示了如何使用flutter_alarm_clock插件来创建和管理闹钟和定时器。您可以根据需要调整时间、标题等参数。希望这对您有所帮助!如果有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_alarm_clock插件的一个基本示例。请注意,由于flutter_alarm_clock这个插件的具体API和功能可能会随着时间发生变化,因此以下代码仅作为示例,并可能需要根据实际插件版本进行调整。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_alarm_clock: ^最新版本号  # 请替换为实际可用的最新版本号

然后,运行flutter pub get来获取依赖。

接下来,在你的Flutter项目中,你可以使用以下代码来设置和管理闹钟。

1. 导入插件

在你的Dart文件中,导入flutter_alarm_clock插件:

import 'package:flutter_alarm_clock/flutter_alarm_clock.dart';

2. 设置闹钟

你可以使用AlarmManager.setAlarm方法来设置一个闹钟。以下是一个设置简单闹钟的示例:

import 'package:flutter/material.dart';
import 'package:flutter_alarm_clock/flutter_alarm_clock.dart';
import 'package:android_alarm_manager/android_alarm_manager.dart';

void main() {
  // 初始化Android Alarm Manager(仅Android平台需要)
  AndroidAlarmManager.initialize();

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Alarm Clock Example'),
        ),
        body: Center(
          child: AlarmSetter(),
        ),
      ),
    );
  }
}

class AlarmSetter extends StatefulWidget {
  @override
  _AlarmSetterState createState() => _AlarmSetterState();
}

class _AlarmSetterState extends State<AlarmSetter> {
  Future<void> _setAlarm() async {
    int requestId = 1; // 请求ID,用于标识闹钟
    DateTime alarmTime = DateTime.now().add(Duration(minutes: 5)); // 5分钟后

    // 设置闹钟
    await AlarmManager.setAlarm(
      requestId,
      alarmTime,
      pendingIntent: AlarmManager.createPendingIntent(requestId),
      alarmClockInfo: AlarmClockInfo(
        title: 'Wake Up Alarm',
        description: 'It\'s time to wake up!',
        ringtoneUri: AndroidUri.parse('android.resource://' + packageName + '/' + R.raw.alarm_sound), // 需要替换为实际音频资源URI
      ),
    );

    // 对于Android,还需要注册一个BroadcastReceiver来处理闹钟触发事件
    // 请注意,这里需要额外的配置和代码,具体请参考插件文档
    // 例如,你可能需要在AndroidManifest.xml中注册Receiver,并在你的Flutter代码中处理接收到的广播
  }

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: _setAlarm,
      child: Text('Set Alarm'),
    );
  }
}

注意事项

  1. Android权限:对于Android平台,你可能需要请求相关的权限(如WAKE_LOCKVIBRATE等)来确保闹钟能够正常工作。

  2. 音频资源:在上面的示例中,ringtoneUri被设置为一个示例URI。你需要替换为实际存在于你的Android项目中的音频资源URI。

  3. 广播接收器:对于Android,当闹钟触发时,你需要一个BroadcastReceiver来处理这个事件。你可能需要在你的AndroidManifest.xml中注册这个BroadcastReceiver,并在Flutter代码中编写相应的逻辑来处理接收到的广播。

  4. iOS支持flutter_alarm_clock插件可能不支持iOS平台,或者需要额外的配置和代码来在iOS上工作。请查阅插件的官方文档以获取更多信息。

  5. 插件版本:由于插件的API和功能可能会随着版本更新而变化,请确保查阅最新的插件文档和示例代码。

这个示例代码提供了一个基本的框架,但你可能需要根据你的具体需求进行进一步的修改和扩展。

回到顶部