返回

Navigator的使用:Flutter 路由跳转及传值详解

前端

Flutter 路由跳转及传值详解(Navigator 的使用)

在 Flutter 中,想要实现页面间的跳转和传值的话,离不开两种路由:基本路由和命名式路由。官方说的是静态路由和动态路由,不过我习惯了这样叫,所以就暂且这样说吧!

基本路由

基本跳转

基本路由的跳转方式很简单,直接使用 Navigator.push() 方法即可。例如:

Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => SecondPage()),
);

其中,context 是当前页面的 BuildContext,SecondPage 是要跳转到的页面。

带参数的跳转

如果需要在页面之间传递参数,可以使用 Navigator.push() 方法的第二个参数,即 RouteSettings。例如:

Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => SecondPage(),
    settings: RouteSettings(arguments: {'data': 'hello'}),
  ),
);

在 SecondPage 中,可以使用 ModalRoute.of(context).settings.arguments 来获取传递过来的参数。例如:

final data = ModalRoute.of(context).settings.arguments as String;

命名式路由

命名式路由是一种更灵活的路由方式,它允许您使用字符串来指定要跳转到的页面。例如,您可以这样定义一个命名路由:

routes: {
  '/second_page': (context) => SecondPage(),
},

然后,您可以使用 Navigator.pushNamed() 方法来跳转到这个页面:

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

命名式路由还可以传递参数,方法与基本路由类似。例如:

Navigator.pushNamed(context, '/second_page', arguments: {'data': 'hello'});

在 SecondPage 中,可以使用 ModalRoute.of(context).settings.arguments 来获取传递过来的参数。

在 StatelessWidget 和 StatefulWidget 中使用 Navigator

在 StatelessWidget 中,可以使用 Navigator.push() 和 Navigator.pushNamed() 方法来进行页面跳转。例如:

class FirstPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('First Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => SecondPage()),
            );
          },
          child: Text('Go to Second Page'),
        ),
      ),
    );
  }
}

在 StatefulWidget 中,可以使用 Navigator.push() 和 Navigator.pushNamed() 方法来进行页面跳转。例如:

class FirstPage extends StatefulWidget {
  @override
  _FirstPageState createState() => _FirstPageState();
}

class _FirstPageState extends State<FirstPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('First Page'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => SecondPage()),
            );
          },
          child: Text('Go to Second Page'),
        ),
      ),
    );
  }
}

总结

以上就是 Flutter 中路由跳转及传值的使用方法。希望这篇博客对您有所帮助。如果您有任何问题,可以在评论区留言。