Flutter Alarm Manager Schedule Task with Alaram
Last updated Dec 27, 2021In this Flutter example tutorial we will cover how to create Alarm in flutter and schedule a task with Alarm Manager. Alarm Manager acts as a link between the application and the Android system alarm service. It can send a broadcast to your app (which the user can entirely discontinue) at a certain time, and your app can then conduct any task as a result. The system can postpone any alarm in order to improve device performance.
In this example to use alarm we are using Android Alaram Manager plugin.
Let's get Started
Step 1: Create Flutter application
Step 2: Add required dependencies in pubspec.yaml file
dependencies: flutter: sdk: flutter android_alarm_manager: ^2.0.2 flutter_local_notifications: ^9.1.5 |
Step 3: Import package
import 'package:android_alarm_manager/android_alarm_manager.dart'; |
Step 4: AndroidAlarmManager has 3 types of events to execute task
-
AndroidAlarmManager.oneShot
- AndroidAlarmManager.oneShotAt
- AndroidAlarmManager.periodic
AndroidAlarmManager.oneShot():
This Schedules a one-shot timer to run `callback` at `time. The `callback` will run whether or not the main application is running or in the foreground
Below code will gives the example to how to work with Alarm Manager
import 'package:android_alarm_manager/android_alarm_manager.dart'; int alarmId = 1; // ignore: unused_element void _examples() { // runs alarm timer once with time delay AndroidAlarmManager.oneShot( Duration(seconds: 5), alarmId, fireAlarm, ); // runs alarm timer at exact time AndroidAlarmManager.oneShotAt( // date time format (year,month,date,hour,minutes,seconds) DateTime(2021, 02, 18, 14, 10), alarmId, fireAlarm, ); // runs callback function repeatedly AndroidAlarmManager.periodic( // must be higher than 60 seconds Duration(seconds: 60), alarmId, fireAlarm, ); } void fireAlarm() { print('Alarm Fired at${DateTime.now()}'); } |
If we want to run in android we should update manifest file with below permissions and receiver component inside application tag
|
|
We should initialize Alarm Manager with below code
|
Complete Flutter code to Schedule Task with Alarm Manager
import 'package:android_alarm_manager/android_alarm_manager.dart'; import 'package:flutter/material.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { bool isOn = false; int alarmId = 1; @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Transform.scale( scale: 2, child: Switch( value: isOn, onChanged: (value) { setState(() { isOn = value; }); if (isOn == true) { AndroidAlarmManager.oneShot( Duration(seconds: 6), alarmId, fireAlarm); } else { AndroidAlarmManager.cancel(alarmId); print('Alarm Timer Canceled'); } }, ), ), ), ); } } void fireAlarm() { print('Alarm Fired at ssadasd ${DateTime.now()}'); setNotification(); } |
This above code will execute a task after 6 seconds. And we can also set the Local Notification on particular time with Local Notification plugin
void setNotification() async { print('Alaram Tiggered trigger notification set'); //Read some more stuff from sharedpreference and/or firebase. Use that information for the notification text. FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin(); var initializationSettingsAndroid = new AndroidInitializationSettings('mipmap/ic_launcher'); var initializationSettingsIOS = new IOSInitializationSettings( onDidReceiveLocalNotification: (i, string1, string2, string3) { print("received notifications"); }); var initializationSettings = new InitializationSettings( android: initializationSettingsAndroid, iOS:initializationSettingsIOS); flutterLocalNotificationsPlugin.initialize(initializationSettings, onSelectNotification: (string) { print("selected notification"); }); var androidPlatformChannelSpecifics = AndroidNotificationDetails( '12', 'eqweqw', importance: Importance.max, priority: Priority.high); var iOSPlatformChannelSpecifics = IOSNotificationDetails(); var platformChannelSpecifics = NotificationDetails( android: androidPlatformChannelSpecifics, iOS:iOSPlatformChannelSpecifics); await flutterLocalNotificationsPlugin.show(1, 'Zugdfda', 'Android & Flutter Tutorialsfsd', platformChannelSpecifics, payload: 'item x'); } |
main.dart file
import 'package:android_alarm_manager/android_alarm_manager.dart'; import 'package:flutter/material.dart'; import 'package:flutter_alaram_manager/home_page.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:intl/intl.dart'; import 'dart:isolate'; import 'dart:math'; import 'dart:ui'; void main() async { await AndroidAlarmManager.initialize(); runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, title: 'Flutter Alarm Manager', theme: ThemeData( primarySwatch: Colors.blue, visualDensity: VisualDensity.adaptivePlatformDensity, ), home: HomePage(), ); } } |
Article Contributed By :
|
|
|
|
2443 Views |