Generic types in PopScope
Summary
#Added a generic type to the PopScope class and replaced the onPopInvoked with a new method onPopInvokedWithResult. The new method takes a boolean didPop and a result as position parameters.
Also replaced the Form.onPopInvoked with Form.onPopInvokedWithResult for the same reason.
Context
#Previously, PopScope didn't have a way to access the pop result when onPopInvoked was called. The generic type is added to the PopScope class so that the new method onPopInvokedWithResult can access the type-safe result.
Description of change
#Added a generic type (<T>) to the PopScope class and a new method onPopInvokedWithResult. The onPopInvoked property was deprecated in favor of onPopInvokedWithResult.
Also added a new method onPopInvokedWithResult to Form to replace onPopInvoked.
Migration guide
#Code before migration:
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
navigatorKey: nav,
home: Column(
children: [
Form(
canPop: false,
onPopInvoked: (bool didPop) {
if (didPop) {
return;
}
launchConfirmationDialog();
},
child: MyWidget(),
),
PopScope(
canPop: false,
onPopInvoked: (bool didPop) {
if (didPop) {
return;
}
launchConfirmationDialog();
},
child: MyWidget(),
),
],
),
),
);
}Code after migration:
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
navigatorKey: nav,
home: Column(
children: [
Form(
canPop: false,
onPopInvokedWithResult: (bool didPop, Object? result) {
if (didPop) {
return;
}
launchConfirmationDialog();
},
child: MyWidget(),
),
PopScope<Object?>(
canPop: false,
onPopInvokedWithResult: (bool didPop, Object? result) {
if (didPop) {
return;
}
launchConfirmationDialog();
},
child: MyWidget(),
),
],
),
),
);
}The generic type should match the generic type of the Route that the PopScope is in. For example, if the route uses int as its generic type, consider using PopScope<int>.
If the PopScope widgets are shared across multiple routes with different types, you can use PopScope<Object?> to catch all possible types.
Timeline
#Landed in version: 3.22.0-26.0.pre
In stable release: 3.24.0
References
#API documentation:
Relevant issue:
Relevant PR:
- Add generic type for result in PopScope (reverted)
- Reapply new PopScope API (final reland)
Unless stated otherwise, the documentation on this site reflects the latest stable version of Flutter. Page last updated on 2024-08-06. View source or report an issue.