I'm trying to run the AlarmManager when the dispose() method is called. But it looks like dispose() is never called. I don't get any output logs and debuger doesn't break inside this method. When should the dispose() be called. When I hit the BACK/HOME button (onStop() equivalent), or only when the app is killed by the system? I want to run the AlarmManager when the app is completely closed.
Is it the right way to do it in Flutter?:
class MyApp extends StatefulWidget {
@override
MyAppState createState() {
return new MyAppState();
}
}
class MyAppState extends State<MyApp> {
MailSenderController controller = MailSenderController(...);
@override
void initState() {
super.initState();
controller.init();
}
@override
void dispose() {
log.info("Disposing MailSenderController"); // All levels, print(rec.message)
controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return ServicesInheritedWidget(
controller,
child: MaterialApp(
title: 'Mail Sender',
home: MyHomePage(title: 'Mail Sender'),
),
);
}
}
class MailSenderController {
// (...)
void dispose() {
(() async {
await sendDelayedSubscription?.cancel();
log.info("AndroidAlarmManager sending");
AndroidAlarmManager.periodic(_DELAY_LONG,
_ALARM_MANAGER_ID,
alarmManagerSendMails,
rescheduleOnReboot: true);
})();
}
}