【发布时间】:2021-04-17 17:15:01
【问题描述】:
我想在用户离开当前屏幕时调用函数或收到通知,无论他/她是否向后导航,即弹出屏幕或在应用程序中向前导航。
【问题讨论】:
标签: flutter dart navigation
我想在用户离开当前屏幕时调用函数或收到通知,无论他/她是否向后导航,即弹出屏幕或在应用程序中向前导航。
【问题讨论】:
标签: flutter dart navigation
你需要实现一个路由观察器。
首先你需要定义一个观察者:
final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();
那么您需要将观察者添加到您的材料应用程序中:
MaterialApp(
navigatorObservers: [routeObserver], ...
好的。现在,当您创建屏幕时,您可以将 RouteAware 添加到您的状态。您将需要订阅观察者,并同时处置它。因此,您需要一个有状态的小部件。假设您有一个名为 MyScreen 的屏幕,它看起来像这样:
class MyScreen extends StatefulWidget {
@override
_MyScreenState createState() => _MyScreenState();
}
class _MyScreenState extends State<MyScreen> with RouteAware{
@override
void didChangeDependencies() {
routeObserver.subscribe(this, ModalRoute.of(context));
super.didChangeDependencies();
}
@override
void dispose() {
routeObserver.unsubscribe(this);
super.dispose();
} ...
太棒了!现在您可以访问这些额外的事件,例如:
@override
void didPopNext() {
super.didPopNext();
}
@override
void didPush() {
super.didPush();
}
@override
void didPushNext() {
super.didPushNext();
}
@override
void didPop() {
super.didPop();
}
如果有什么不清楚的地方请告诉我。
【讨论】:
你可以使用dispose()生命周期函数
引用API
处理方法 当此对象从树中永久移除时调用。
例如,当用户离开屏幕时,我使用它来取消订阅 计时器
示例:
@override
void dispose() {
super.dispose();
timer.cancel();
}
【讨论】: