Navigator 页面 API 更改
摘要
#The Navigator
页面 API 已重构,以便它们可以与 Flutter 的其他弹出机制集成。
上下文
#onPopPage
属性已添加,用于在页面即将弹出后清理页面。 要否决弹出,您可以在回调中返回false
。 这与框架中的其他弹出机制(例如 PopScope
和 iOS 后退手势)配合使用效果不佳。
为了将框架的弹出机制集成在一起,需要重构页面 API。
更改说明
#onDidRemovePage
属性取代了 onPopPage
属性。您不再可以在 onDidRemovePage
属性中否决弹出操作。相反,您只需要负责更新 pages
。
否决机制现在由 Page.canPop
和 Page.onPopInvoked
属性管理。它们的功能类似于您使用 PopScope
组件的方式。
迁移指南
#迁移前的代码
dart
import 'package:flutter/material.dart';
final MaterialPage<void> page1 = MaterialPage<void>(child: Placeholder());
final MaterialPage<void> page2 = MaterialPage<void>(child: Placeholder());
final MaterialPage<void> page3 = MaterialPage<void>(child: Placeholder());
void main() {
final List<Page<void>> pages = <Page<void>>[page1, page2, page3];
runApp(
MaterialApp(
home: Navigator(
pages: pages,
onPopPage: (Route<Object?> route, Object? result) {
if (route.settings == page2) {
return false;
}
if (route.didPop) {
pages.remove(route.settings);
return true;
}
return false;
},
),
),
);
}
迁移后的代码
dart
import 'package:flutter/material.dart';
final MaterialPage<void> page1 = MaterialPage<void>(child: Placeholder());
final MaterialPage<void> page2 = MaterialPage<void>(canPop: false, child: Placeholder());
final MaterialPage<void> page3 = MaterialPage<void>(child: Placeholder());
void main() {
final List<Page<void>> pages = <Page<void>>[page1, page2, page3];
runApp(
MaterialApp(
home: Navigator(
pages: pages,
onDidRemovePage: (Page<Object?> page) {
pages.remove(page);
},
),
),
);
}
时间线
#包含于版本:3.22.0-32.0.pre
稳定版发布:3.24.0
参考
#API 文档
相关问题
相关 PR
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面上次更新于 2024-08-08。 查看源代码 或 报告问题.