0

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);
        })();
      }
    } 
wirdil
  • 296
  • 3
  • 9

1 Answers1

0

I'm not sure you can run any code after the app is completely closed, unless you launched a background task as an Isolate: https://flutter.io/docs/development/packages-and-plugins/background-processes.

Randal Schwartz
  • 39,428
  • 4
  • 43
  • 70