What problem does it solve? Async bugs in Flutter are silent: a dropped Future swallows its error, a dead BuildContext throws into a void, and a leaked subscription fires into a disposed widget. The arrow-callback pattern onTap: () => vm.save(x) passes every lint while discarding both the Future and its error, and no analyzer rule catches it. ## Core Features & Use Cases - Callback Future-drop prevention: Requires every onTap/onPressed/VoidCallback handler to return void, routing async work through a void method that wraps the call in unawaited(... .catchError(...)). - Async gap guards: Mandates a mounted/ref.mounted check after every await before touching BuildContext, or capturing Navigator/ScaffoldMessenger before the gap, with the guard placed after the last of multiple awaits. - Resource teardown and honest catches: Requires disposing every StreamSubscription, StreamController, Timer, and sink, typed catches that log stack traces and surface failures, rethrow over throw e, and no asserts on plugin return values. - Use Case: When reviewing a Flutter pull request that wires a save button, apply this Skill to rewrite onTap: () => vm.save(note) into a void handler with a catchError chain, add mounted guards after awaits, and verify dispose() cancels all subscriptions. ## Quick Start Review this Flutter widget's async code and fix any silent-failure patterns such as arrow callbacks returning Futures, missing mounted guards after awaits, or undisposed subscriptions.