如何获取最热门屏幕的路由名称



我正在使用命名路线进行导航。我正在传递路线名称以查看新屏幕。

Navigator.pushNamed(context, '/second');

所以,我需要的是最上面的屏幕routeName。在这种情况下为CCD_ 1。我怎样才能拿到它?

除了Modal.of(context),flutter没有提供任何更容易的方法来获取最新的路由名称。但是任何使用onRouteGenerated属性进行路由处理的人都可以执行此

class AllRoutes{
static String _lastRoute = "/";
static Route onGenerated(RouteSettings settings){
_lastRoute = settings.name;
//handle route changes here rather passing the route Map to the App
}  
static String get lastRoute=>_lastRoute;
}

并添加静态方法作为App 的onGenerateRoute属性值

MaterialApp(
onGenerateRoute: AllRoutes.onGenerated,
)

然后得到最后一条像一样的路线

var lastRoute = AllRoutes.lastRoute

你可以将其添加为Navigator的扩展,这样你就可以有宾至如归的感觉;(

您可以在MaterialApp的navigatorObserver中注册为观察员,以便在路线更改时收到通知,并保留最后一个:

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'test',
home: const MyHomePage(),
navigatorObservers: [
RouteObserver(),
],
);
}
}
class RouteObserver extends NavigatorObserver {
String? lastRoute;
@override
void didReplace({Route? newRoute, Route? oldRoute}) {
lastRoute = newRoute?.settings.name;
}
@override
void didPush(Route route, Route? previousRoute) {
lastRoute = route.settings.name;
}
@override    
void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {
lastRoute = previousRoute?.settings.name;
}
@override    
void didRemove(Route<dynamic> route, Route<dynamic>? previousRoute) {
lastRoute = previousRoute?.settings.name;
}
}
String? getTopRouteName (BuildContext context) {
String? top;
Navigator.popUntil(context, (route) {
top = route.settings.name;
return true;
});
return top;
}

遗憾的是,Navigator没有提供这样的API。但是最顶端的路由名称可以通过这个棘手的方法找到,该方法试图弹出最顶端的路径,但被返回值true阻止。

相关内容

  • 没有找到相关文章

最新更新