-
Notifications
You must be signed in to change notification settings - Fork 29.7k
Add AppLifecycleListener, with support for application exit handling
#123274
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add AppLifecycleListener, with support for application exit handling
#123274
Conversation
AppLifecycleListener, with support for application exit handling
bf62242 to
c966a53
Compare
a462310 to
6dc167c
Compare
5d2beec to
7559092
Compare
d649682 to
b062fa4
Compare
b062fa4 to
dfb1e04
Compare
486c31a to
94dff71
Compare
…tate. (#40542) ## Description This adds app lifecycle notification for macOS and Linux, and adds a new `hidden` state to the `AppLifecycleState` enum. To be functional, this needs a corresponding framework change: flutter/flutter#123274 ## Related Issues - flutter/flutter#30735 ## Tests - Added tests for state changes.
|
Okay, I think this is ready for another look, @goderbauer. |
goderbauer
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
examples/api/lib/widgets/app_lifecycle_listener/app_lifecycle_listener.0.dart
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For my own understanding (since this returns a Future): Am I allowed to delay responding to this for however long I want? Or do platforms impose a timeout here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As far as I can tell, you can delay as long as you want and they will wait for you to respond. I suppose they might put up a system dialog saying that you took too long and ask if your app should be forcefully killed, but that won't affect the way the API works from the developer's point of view.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The more I think about it, the stranger I find it that this optionally takes in a binding. I don't think we use this pattern elsewhere and would expect tests to just install their own (global) custom binding if they need some custom behavior. I also can't think of a testing scenario where you'd really need a custom binding here... I think all the tests you're adding in this PR would pass if you wouldn't pass in the binding manually....
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Okay, This was a suggestion that @Hixie had early on. It does seem convenient, and in normal usage it doesn't make any difference. It would be less complex to not have it, though.
865be95 to
9f90101
Compare
|
auto label is removed for flutter/flutter, pr: 123274, due to - The status or check suite Google testing has failed. Please fix the issues identified (or deflake) before re-applying this label. |
flutter/flutter@6e254a3...da127f1 2023-06-09 [email protected] Updated material button theme tests for Material3 (flutter/flutter#128543) 2023-06-09 [email protected] Roll Flutter Engine from cb93477008d6 to 93afba901b3b (2 revisions) (flutter/flutter#128573) 2023-06-09 [email protected] Improve defaults generation with logging, stats, and token validation (flutter/flutter#128244) 2023-06-09 [email protected] [testing] Make the FLUTTER_STORAGE_BASE_URL warning non-fatal (flutter/flutter#128335) 2023-06-09 [email protected] [flutter_tools] [DAP] Don't try to restart/reload if app hasn't started yet (flutter/flutter#128267) 2023-06-09 [email protected] Roll Flutter Engine from 8f9e608d39ab to cb93477008d6 (3 revisions) (flutter/flutter#128568) 2023-06-09 [email protected] Replace `MaterialButton` from test classes (flutter/flutter#128466) 2023-06-09 [email protected] Fix `showBottomSheet` doesn't remove scrim when draggable sheet is dismissed (flutter/flutter#128455) 2023-06-09 [email protected] Manual roll Flutter Engine from a5f7d5d75ff2 to 8f9e608d39ab (31 revisions) (flutter/flutter#128554) 2023-06-09 [email protected] Revert "test owners: cyanglaz -> vashworth" (flutter/flutter#128462) 2023-06-09 [email protected] [Android] Bump integration tests using `compileSdkVersion` 31 to 33 (flutter/flutter#128072) 2023-06-09 [email protected] Remove single view assumption from MouseTracker, and unify its hit testing code flow (flutter/flutter#127060) 2023-06-09 [email protected] [flutter_tools] Precache after channel switch (flutter/flutter#118129) 2023-06-08 [email protected] Adding migration guide for Material 3 colors (flutter/flutter#128429) 2023-06-08 [email protected] Add `AppLifecycleListener`, with support for application exit handling (flutter/flutter#123274) 2023-06-08 [email protected] Sliver Main Axis Group (flutter/flutter#126596) 2023-06-08 [email protected] Reduce `_DoubleClampVisitor` false positives (flutter/flutter#128539) 2023-06-08 [email protected] Advise developers to use OverflowBar instead of ButtonBar (flutter/flutter#128437) 2023-06-08 [email protected] Reland "Migrate benchmarks to package:web" (flutter/flutter#128266) 2023-06-08 [email protected] Navigator.pop before PopupMenuItem onTap call (flutter/flutter#127446) 2023-06-08 [email protected] Fix navigation rail with long labels misplaced highlights (flutter/flutter#128324) 2023-06-08 [email protected] Update `chip.dart` to use set of `MaterialState` (flutter/flutter#128507) 2023-06-08 [email protected] Update flutter to dartdoc 6.3.0 and hide Icons implementation from doc pages (flutter/flutter#128442) 2023-06-08 [email protected] Disable blinking cursor when `EditableText.showCursor` is false (flutter/flutter#127562) 2023-06-08 [email protected] [floating_cursor_selection]add more comments on the tricky part (flutter/flutter#127227) 2023-06-08 [email protected] Move RenderObjectElement.updateChildren to Element (flutter/flutter#128458) 2023-06-08 [email protected] Fix PointerEventConverter doc (flutter/flutter#128452) 2023-06-08 [email protected] Roll Packages from a84b2c2 to e13b8c4 (9 revisions) (flutter/flutter#128508) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://bugs.chromium.org/p/skia/issues/entry?template=Autoroller+Bug Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Description
This adds
AppLifecycleListener, a class for listening to changes in the application lifecycle, and responding to requests to exit the application.It depends on changes in the Engine that add new lifecycle states: flutter/engine#42418
Here's a diagram for the lifecycle states. I'll add a similar diagram to the documentation for these classes.
Related Issues
Tests
AppLifecycleListeneritself.