codenic_alarm 0.0.1-dev.5 codenic_alarm: ^0.0.1-dev.5 copied to clipboard
A Flutter plugin for scheduling alarms on Android and IOS.
example/lib/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());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: Wrap(
children: [
FilledButton(
child: const Text('Request Notification permission'),
onPressed: () async {
// Permission.notification.request();
if (Platform.isIOS)
await flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<
IOSFlutterLocalNotificationsPlugin>()
?.requestPermissions(
alert: true,
badge: true,
sound: true,
);
else if (Platform.isAndroid)
await flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<
AndroidFlutterLocalNotificationsPlugin>()
?.requestPermission();
},
),
FilledButton(
child: const Text('Show alarm'),
onPressed: () {
CodenicAlarm.instance.schedule(
delay: const Duration(seconds: 5),
alarmInfo: AlarmInfo(
id: 1,
title: 'Survey Reminder',
content: 'Report your health status',
),
);
},
),
FilledButton(
child: const Text('Has active alarm'),
onPressed: () async {
final alarm = await CodenicAlarm.instance.activeAlarm();
if (alarm == null) {
print('No active alarm');
} else {
print('Active alarm: ${alarm.title} ${alarm.content}');
}
},
),
FilledButton(
child: const Text('Hide alarm'),
onPressed: () {
CodenicAlarm.instance.dismissAlarm();
},
),
FilledButton(
child: const Text('Cancel all alarm'),
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,
'Survey Reminder',
'(10:45PM next. Long press to dismiss) Dive into your Q&A Questionnaires!',
NotificationDetails(
iOS: notificationDetailsIOS,
),
);
print('AAAA2');
},
child: Text('Send notification'),
),
],
),
),
),
builder: (context, child) {
return child!;
},
);
}
}
@pragma('vm:entry-point')
void notificationTapBackground(NotificationResponse notificationResponse) {
// handle action
}