Flutter 后台闹钟触发

一个 Flutter 插件,用于在特定时间从后台启动应用程序,就像 Android 的原生闹钟应用程序一样

安装

flutter_alarm_background_trigger: ^1.0.0
# or
flutter pub add flutter_alarm_background_trigger

初始化

void main() {
  // Very important to call before initialize since it 
  // ensures the binding is available and ready before 
  // any native call
  WidgetsFlutterBinding.ensureInitialized();

  // initialize Required for alarm events to bind with flutter method channel
  FlutterAlarmBackgroundTrigger.initialize();

  runApp(const MyApp());
}

创建实例

var alarmPlugin = FlutterAlarmBackgroundTrigger();

设置闹钟

alarmPlugin.addAlarm(
      // Required
      DateTime.now().add(Duration(seconds: 10)),

      //Optional
      uid: "YOUR_APP_ID_TO_IDENTIFY",
      payload: {"YOUR_EXTRA_DATA":"FOR_ALARM"},

      // screenWakeDuration: For how much time you want 
      // to make screen awake when alarm triggered
      screenWakeDuration: Duration(minutes: 1)
  )

闹钟触发时接收事件

alarmPlugin.requestPermission().then((isGranted){
  if(isGranted){
    alarmPlugin.onForegroundAlarmEventHandler((alarm){
      // Perform your action here such as navigation
      // This event will be triggered on both cases, 
      // when app is in foreground or background!
      print(alarm.id)
    })
  }
})

附加方法

请求在其他应用程序之上绘制的权限

Future<bool> requestPermission()

添加

Future<AlarmItem> addAlarm(
  DateTime time, 
  {
    String? uid, 
    Map<String, dynamic>? payload, 
    Duration screenWakeDuration
  }
)

按 UID 获取闹钟

Future<List<AlarmItem>> getAlarmByUid(String uid)

获取所有已安排的闹钟

Future<List<AlarmItem>> getAllAlarms()

获取单个闹钟

Future<AlarmItem> getAlarm(int id)

按负载获取闹钟

Future<List<AlarmItem>> getAlarmByPayload(Map<String, dynamic> payload)

按时间获取闹钟

Future<List<AlarmItem>> getAlarmByTime(DateTime time)

闹钟触发事件

void onForegroundAlarmEventHandler(OnForegroundAlarmEvent alarmEvent)

删除单个闹钟

Future<void> deleteAlarm(int id)

按负载删除

Future<void> deleteAlarmsByPayload(Map<String, dynamic> payload)

按时间删除

Future<void> deleteAlarmsByTime(DateTime dateTime)

按 UID 删除

Future<void> deleteAlarmsByUid(String uid)

删除所有已安排的闹钟

Future<void> deleteAllAlarms()

GitHub

查看 Github