Navigator基本用法

  • 路由最基本的使用-页面跳转和退出

    • 使用Navigator.push()来跳转页面
    • onPressed: () {
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => SecondRoute()),
        );
      }

      使用Navigator.pop()来返回上一个页面

    • onPressed: () {
        Navigator.pop(context);
      }

       

  • 通过Named Routes(路由表)来做跳转

    • 定义创建的route
    • MaterialApp(
        // 定义APP启动时第一个显示的页面,在本例中,initialRoute指代FirstScreen
        initialRoute: '/',
        routes: {
          // 当navigating到‘/’ route时,构建FirstScreen widget
          '/': (context) => FirstScreen(),
          // 当navigating 到"/second" route, 构建SecondScreen widget.
          '/second': (context) => SecondScreen(),
        },
      );

      Navigate到SecondScreen

    • onPressed: () {
        // 跳转到SecondScreen
        Navigator.pushNamed(context, '/second');
      }

       

  • 在跳转中传值

    • 准备传递的数据
    • class ScreenArguments {
        final String title;
        final String message;
       
        ScreenArguments(this.title, this.message);
      }

      接受传递的数据

    • class ExtractArgumentsScreen extends StatelessWidget {
        static const routeName = '/extractArguments';
       
        @override
        Widget build(BuildContext context) {
          //获取传递的参数
          final ScreenArguments args = ModalRoute.of(context).settings.arguments;
       
          return Scaffold(
            appBar: AppBar(
              title: Text(args.title),
            ),
            body: Center(
              child: Text(args.message),
            ),
          );
        }
      }

      将准备好的参数传递过去

    • RaisedButton(
        child: Text("使用pushNamed携带参数跳转"),
        onPressed: () {
          //点击事件,触发跳转
          Navigator.pushNamed(
            context,
            ExtractArgumentsScreen.routeName,
            arguments: ScreenArguments(
              '我是被传递的title',
              '我是被传递的message.',
            ),
          );
        },
      );

      PUSH传值

    • Navigator.push(
          context,
          MaterialPageRoute(
              builder: (context) => ExtractArgumentsScreen(),
              settings: RouteSettings(
                  arguments: ScreenArguments(
                      '我是title',
                      '我是message.',
                   ),
               ),
           ),
         );

      使用onGenerateRoute来进行跳转传值

    • MaterialApp(
        
        onGenerateRoute: (settings) {
          // 判断当前route,分别进行处理
          if (settings.name == PassArgumentsScreen.routeName) {
            // 将settings.arguments转换为正确的类型 ScreenArguments.
            final ScreenArguments args = settings.arguments;
       
            //通过构造方法传值
            return MaterialPageRoute(
              builder: (context) {
                return PassArgumentsScreen(
                  title: args.title,
                  message: args.message,
                );
              },
            );
          }
        },
      );
      Navigator.push(
          context,
          MaterialPageRoute(
              builder: (context) => ExtractArgumentsScreen(),
              settings: RouteSettings(
                  arguments: ScreenArguments(
                      '我是title',
                      '我是message.',
                   ),
               ),
           ),
         );

       

       
  • 携带参数退出

  • 结束

 

 

posted @ 2020-03-17 11:38  lai1322  阅读(1896)  评论(0编辑  收藏  举报