我的目标是跟踪出于分析目的而呈现和关闭的路线,如本文所述:https : //medium.com/flutter-community/how-to-track-screen-transitions-in-flutter-with-routeobserver-733984a90dea
我正在推送 aCupertinoPageRoute并向它传递一个实现RouteAwareMixin的小部件。
final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();
return CupertinoApp(
...
navigatorObservers: [routeObserver],
}
Run Code Online (Sandbox Code Playgroud)
像这样推:
Navigator.of(context).push(
CupertinoPageRoute(builder: (context) => MyWidget()),
);
Run Code Online (Sandbox Code Playgroud)
小部件
class MyWidget extends StatefulWidget {
MyWidget({Key key}) : super(key: key);
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> with RouteAware {
@override
void didChangeDependencies() {
super.didChangeDependencies();
routeObserver.subscribe(this, ModalRoute.of(context));
}
@override
void dispose() {
routeObserver.unsubscribe(this);
super.dispose();
}
@override
void didPop() {
print('never called');
}
@override
void didPopNext() {
print('never called');
}
@override
Widget build(BuildContext context) {
return Container(
child: Column(
children: [
CupertinoNavigationBar(
middle: Text('42'),
),
],
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
使用后退按钮didPop()弹出 a 时CupertinoPageRoute,永远不会调用该方法,除非我按下rootNavigator = true这不是我想要的。
我怎样才能解决这个问题?
编辑:此行为仅在从 CupertinoTabView 推送路由时发生,因为它创建了一个新的嵌套导航器。
如果我理解正确的话,Medium 文章中显示的最终解决方案不会扩展 every StatefulWidgetwith RouteAware。相反,它扩展了自己的实现,RouteObserver以获取有关每次路由更改的通知。
使用这种方法,您应该能够将自定义插入RouteObserver到您的主应用程序以及您的应用程序中CupertinoTabView以实现您的需要。
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |