PopScope 中的泛型
摘要
#为 PopScope
类添加了一个泛型,并用新方法 onPopInvokedWithResult
替换了 onPopInvoked
。新方法将布尔值 didPop
和 result
作为位置参数。
出于同样的原因,还用 Form.onPopInvokedWithResult
替换了 Form.onPopInvoked
。
上下文
#之前,当调用 onPopInvoked
时,PopScope
无法访问弹出结果。为 PopScope
类添加了泛型,以便新方法 onPopInvokedWithResult
可以访问类型安全的返回值。
更改说明
#为 PopScope
类添加了一个泛型(<T>
)和一个新方法 onPopInvokedWithResult
。onPopInvoked
属性已弃用,建议使用 onPopInvokedWithResult
。
还为 Form
添加了一个新方法 onPopInvokedWithResult
来替换 onPopInvoked
。
迁移指南
#迁移前的代码
dart
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(),
),
],
),
),
);
}
迁移后的代码
dart
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(),
),
],
),
),
);
}
泛型类型应与 PopScope
所在的 Route
的泛型类型匹配。例如,如果路由使用 int
作为其泛型类型,请考虑使用 PopScope<int>
。
如果 PopScope
组件在多个具有不同类型的路由之间共享,则可以使用 PopScope<Object?>
来捕获所有可能的类型。
时间线
#集成版本:3.22.0-26.0.pre
稳定版本:3.24.0
参考文献
#API 文档
相关问题
相关 PR
- 为 PopScope 中的结果添加泛型 (已回退)
- 重新应用新的 PopScope API (最终重新合并)
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面最后更新于 2024-08-06。 查看源代码 或 报告问题.