super.dispose();

routeObserver.unsubscribe(this);

}

四 路由堆栈示例


4.1 示例一(从A页面跳转路由监听页面)

** MaterialApp组件中添加**

RouteObserver routeObserver=RouteObserver();

class MyApp extends StatelessWidget {

@override

Widget build(BuildContext context) {

return MaterialApp(

routes: <String, WidgetBuilder>{

“/M”:(context)=>MyApp(),

“/B”:(context)=>BPage(),

“/C”:(context)=>CPage(),

“/D”:(context)=>DPage(),

“/P”:(context)=>ProductDetail(),

“/ARouteObserver”:(context)=>ARouteObserverDemo(),

“/BRouteObserver”:(context)=>BRouteObserverDemo(),

},

navigatorObservers: [routeObserver],

title: ‘Flutter Demo’,

theme: ThemeData(primarySwatch: Colors.blue,),

home: MyHomePage(title: ‘Flutter Demo Home Page’),

);

}

}

路由监听

class ARouteObserverDemo extends StatefulWidget {

@override

_RouteObserverDemoState createState() => _RouteObserverDemoState();

}

class _RouteObserverDemoState extends State with RouteAware {

@override

void didChangeDependencies() {

super.didChangeDependencies();

routeObserver.subscribe(this, ModalRoute.of(context));

}

@override

Widget build(BuildContext context) {

return Scaffold(

body: Container(

alignment: Alignment.center,

child: RaisedButton(

child: Text(‘A RouteObserver’),

onPressed: () {

Navigator.of(context).pushNamed(‘/BRouteObserver’);

},

),

),

);

}

@override

void dispose() {

super.dispose();

routeObserver.unsubscribe(this);

}

@override

void didPush() {

final route = ModalRoute.of(context).settings.name;

print(‘A-didPush route: $route’);

}

@override

void didPopNext() {

final route = ModalRoute.of(context).settings.name;

print(‘A-didPopNext route: $route’);

}

@override

void didPushNext() {

final route = ModalRoute.of(context).settings.name;

print(‘A-didPushNext route: $route’);

}

@override

void didPop() {

final route = ModalRoute.of(context).settings.name;

print(‘A-didPop route: $route’);

}

}

其中 didPush、didPushNext、didPopNext、didPop 为路由堆栈变化的回调。

页面跳转及打印

从 A 页面跳转到 ARouteObserverDemo 页面,日志输出如下

flutter: A-didPush route: /ARouteObserver

进入此页面只调用了 didPush

4.2 示例二(从路由监听A页面跳转路由监听B页面)

路由监听B页面(MaterialApp及A页面同上)

class _BRouteObserverDemo extends State with RouteAware {

@override

void didChangeDependencies() {

super.didChangeDependencies();

routeObserver.subscribe(this, ModalRoute.of(context));

}

@override

Widget build(BuildContext context) {

return Scaffold(

body: Container(

alignment: Alignment.center,

child: RaisedButton(

child: Text(‘B RouteObserver’),

onPressed: () {

//Navigator.of(context).pushNamed(‘/ARouteObserver’);

Navigator.of(context).pop();

},

),

),

);

}

@override

void dispose() {

super.dispose();

routeObserver.unsubscribe(this);

}

@override

void didPush() {

final route = ModalRoute.of(context).settings.name;

print(‘B-didPush route: $route’);

}

@override

void didPopNext() {

final route = ModalRoute.of(context).settings.name;

print(‘B-didPopNext route: $route’);

}

@override

void didPushNext() {

final route = ModalRoute.of(context).settings.name;

print(‘B-didPushNext route: $route’);

}

@override

void didPop() {

final route = ModalRoute.of(context).settings.name;

print(‘B-didPop route: $route’);

}

}

** 从 ARouteObserverDemo 页面跳转到 BRouteObserverDemo 页面**

flutter: A-didPushNext route: /ARouteObserver

flutter: B-didPush route: /BRouteObserver

先调用了 ARouteObserverDemo 页面的 didPushNext,然后调用了 BRouteObserverDemo 页面的 didPush。

最后送福利了,现在关注我可以获取包含源码解析,自定义View,动画实现,架构分享等。
内容难度适中,篇幅精炼,每天只需花上十几分钟阅读即可。
大家可以跟我一起探讨,有flutter—底层开发—性能优化—移动架构—资深UI工程师 —NDK相关专业人员和视频教学资料,还有更多面试题等你来拿

录播视频图.png
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
rverDemo 页面的 didPushNext,然后调用了 BRouteObserverDemo 页面的 didPush。

最后送福利了,现在关注我可以获取包含源码解析,自定义View,动画实现,架构分享等。
内容难度适中,篇幅精炼,每天只需花上十几分钟阅读即可。
大家可以跟我一起探讨,有flutter—底层开发—性能优化—移动架构—资深UI工程师 —NDK相关专业人员和视频教学资料,还有更多面试题等你来拿

[外链图片转存中…(img-0VgPf9AD-1715043666714)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐