import 'package:flutter/material.dart'; /// create by 张风捷特烈 on 2020/7/19 /// contact me by email 1981462002@qq.com /// 说明: /// // { // "widgetId": 232, // "name": 'Navigator基本用法', // "priority": 1, // "subtitle": // "【initialRoute】 : 最初显示路由 【String】\n" // "【onGenerateRoute】 : 路由生成器 【RouteFactory】\n" // "【observers】 : 路由监听器 【List】\n" // "【onPopPage】 : 出栈回调 【PopPageCallback】", // } class NavigatorDemo extends StatelessWidget { const NavigatorDemo({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return SizedBox( height: 200, width: 300, child: Navigator( onPopPage: _onPopPage, initialRoute: '/home-content', onGenerateRoute: _onGenerateRoute, observers: [TolyNavigatorObservers()], ), ); } Route _onGenerateRoute(RouteSettings settings) { switch (settings.name) { case '/home-content': return MaterialPageRoute( builder: (_) => const HomeContent(), settings: settings); case "/red": return MaterialPageRoute(builder: (_) => const RedPage(), settings: settings); case "/yellow": return MaterialPageRoute( builder: (_) => const YellowPage(), settings: settings); case "/green": return MaterialPageRoute( builder: (_) => const GreenPage(), settings: settings); default: return MaterialPageRoute( builder: (_) => const HomeContent(), settings: settings); } } bool _onPopPage(Route route, result) { print('----_onPopPage-----'); return true; } } //路由监听器 class TolyNavigatorObservers extends NavigatorObserver { @override void didPush(Route route, Route? previousRoute) { print( '--didPush:--route:--${route.settings}--previousRoute:--${previousRoute?.settings}'); } @override void didStopUserGesture() { print('--didStopUserGesture:--'); } @override void didStartUserGesture(Route route, Route? previousRoute) { print( '--didStartUserGesture:--route:--${route.settings}--previousRoute:--${previousRoute?.settings}'); } @override void didReplace({Route? newRoute, Route? oldRoute}) { print( '--didReplace:--newRoute:--${newRoute?.settings}--oldRoute:--${oldRoute?.settings}'); } @override void didRemove(Route? route, Route? previousRoute) { print( '--didRemove:--route:--${route?.settings}--previousRoute:--${previousRoute?.settings}'); } @override void didPop(Route route, Route? previousRoute) { print( '--didPop:--route:--${route.settings}--previousRoute:--${previousRoute?.settings}'); } } class HomeContent extends StatelessWidget { const HomeContent({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ RaisedButton( color: Colors.red, onPressed: () { Navigator.pushNamed(context, '/red'); }, ), RaisedButton( color: Colors.yellow, onPressed: () { Navigator.pushNamed(context, '/yellow'); }, ), RaisedButton( color: Colors.green, onPressed: () { Navigator.pushNamed(context, '/green'); }, ) ], ), ], ); } } class RedPage extends StatelessWidget { const RedPage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text("RedPage"), ), body: Container( color: Colors.red, ), ); } } class YellowPage extends StatelessWidget { const YellowPage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text("YellowPage"), ), body: Container( color: Colors.yellow, ), ); } } class GreenPage extends StatelessWidget { const GreenPage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text("GreenPage"), ), body: Container( color: Colors.green, ), ); } }