当前位置:实例文章 » HTML/CSS实例» [文章]Flutter中Navigator 跳转传参数和反向传参数

Flutter中Navigator 跳转传参数和反向传参数

发布人:shili8 发布时间:2025-03-10 02:07 阅读次数:0

**Flutter 中 Navigator 的跳转传参和反向传参**

在 Flutter 中,Navigator 是一个非常重要的 widget,它负责管理应用程序的路由。通过使用 Navigator,我们可以实现页面之间的跳转和参数传递。在本文中,我们将详细介绍如何在 Flutter 中使用 Navigator 跳转传参和反向传参。

**1. 使用 Navigator.push() 方法跳转**

首先,让我们看一下如何使用 Navigator.push() 方法跳转到一个新页面。下面是一个简单的例子:

dartimport 'package:flutter/material.dart';

void main() {
 runApp(MyApp());
}

class MyApp extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return MaterialApp(
 home: Home(),
 );
 }
}

class Home extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return Scaffold(
 appBar: AppBar(
 title: Text('Home'),
 ),
 body: Center(
 child: ElevatedButton(
 onPressed: () {
 Navigator.push(
 context,
 MaterialPageRoute(builder: (context) => DetailPage()),
 );
 },
 child: Text('跳转到DetailPage'),
 ),
 ),
 );
 }
}

class DetailPage extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return Scaffold(
 appBar: AppBar(
 title: Text('DetailPage'),
 ),
 body: Center(
 child: Text('这是DetailPage'),
 ),
 );
 }
}


在上面的例子中,我们使用 Navigator.push() 方法跳转到 DetailPage 页面。

**2. 使用 Navigator.pushReplacement() 方法跳转**

除了使用 Navigator.push() 方法之外,我们还可以使用 Navigator.pushReplacement() 方法跳转到一个新页面。下面是一个简单的例子:

dartimport 'package:flutter/material.dart';

void main() {
 runApp(MyApp());
}

class MyApp extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return MaterialApp(
 home: Home(),
 );
 }
}

class Home extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return Scaffold(
 appBar: AppBar(
 title: Text('Home'),
 ),
 body: Center(
 child: ElevatedButton(
 onPressed: () {
 Navigator.pushReplacement(
 context,
 MaterialPageRoute(builder: (context) => DetailPage()),
 );
 },
 child: Text('跳转到DetailPage'),
 ),
 ),
 );
 }
}

class DetailPage extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return Scaffold(
 appBar: AppBar(
 title: Text('DetailPage'),
 ),
 body: Center(
 child: Text('这是DetailPage'),
 ),
 );
 }
}


在上面的例子中,我们使用 Navigator.pushReplacement() 方法跳转到 DetailPage 页面,并且会将当前页面从栈中移除。

**3. 使用 Navigator.pushNamed() 方法跳转**

除了使用 Navigator.push() 和 Navigator.pushReplacement() 方法之外,我们还可以使用 Navigator.pushNamed() 方法跳转到一个新页面。下面是一个简单的例子:

dartimport 'package:flutter/material.dart';

void main() {
 runApp(MyApp());
}

class MyApp extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return MaterialApp(
 home: Home(),
 routes: {
 '/detail': (context) => DetailPage(),
 },
 );
 }
}

class Home extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return Scaffold(
 appBar: AppBar(
 title: Text('Home'),
 ),
 body: Center(
 child: ElevatedButton(
 onPressed: () {
 Navigator.pushNamed(context, '/detail');
 },
 child: Text('跳转到DetailPage'),
 ),
 ),
 );
 }
}

class DetailPage extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return Scaffold(
 appBar: AppBar(
 title: Text('DetailPage'),
 ),
 body: Center(
 child: Text('这是DetailPage'),
 ),
 );
 }
}


在上面的例子中,我们使用 Navigator.pushNamed() 方法跳转到 DetailPage 页面。

**4. 使用 Navigator.pop() 方法反向传参**

除了使用 Navigator.push() 和 Navigator.pushReplacement() 方法之外,我们还可以使用 Navigator.pop() 方法反向传参。下面是一个简单的例子:

dartimport 'package:flutter/material.dart';

void main() {
 runApp(MyApp());
}

class MyApp extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return MaterialApp(
 home: Home(),
 );
 }
}

class Home extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return Scaffold(
 appBar: AppBar(
 title: Text('Home'),
 ),
 body: Center(
 child: ElevatedButton(
 onPressed: () {
 Navigator.push(
 context,
 MaterialPageRoute(builder: (context) => DetailPage()),
 );
 },
 child: Text('跳转到DetailPage'),
 ),
 ),
 );
 }
}

class DetailPage extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return Scaffold(
 appBar: AppBar(
 title: Text('DetailPage'),
 ),
 body: Center(
 child: ElevatedButton(
 onPressed: () {
 Navigator.pop(context, '参数');
 },
 child: Text('反向传参'),
 ),
 ),
 );
 }
}

class Home extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return Scaffold(
 appBar: AppBar(
 title: Text('Home'),
 ),
 body: Center(
 child: Text(context.arguments),
 ),
 );
 }
}


在上面的例子中,我们使用 Navigator.pop() 方法反向传参,传递一个参数 '参数'。

**5. 使用 Navigator.of() 方法获取当前页面**

除了使用 Navigator.push() 和 Navigator.pop() 方法之外,我们还可以使用 Navigator.of() 方法获取当前页面。下面是一个简单的例子:

dartimport 'package:flutter/material.dart';

void main() {
 runApp(MyApp());
}

class MyApp extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return MaterialApp(
 home: Home(),
 );
 }
}

class Home extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return Scaffold(
 appBar: AppBar(
 title: Text('Home'),
 ),
 body: Center(
 child: ElevatedButton(
 onPressed: () {
 Navigator.push(
 context,
 MaterialPageRoute(builder: (context) => DetailPage()),
 );
 },
 child: Text('跳转到DetailPage'),
 ),
 ),
 );
 }
}

class DetailPage extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return Scaffold(
 appBar: AppBar(
 title: Text('DetailPage'),
 ),
 body: Center(
 child: ElevatedButton(
 onPressed: () {
 Navigator.of(context).pop();
 },
 child: Text('反向传参'),
 ),
 ),
 );
 }
}


在上面的例子中,我们使用 Navigator.of() 方法获取当前页面。

**6. 使用 Navigator.pushReplacementNamed() 方法跳转**

除了使用 Navigator.push() 和 Navigator.pushReplacement() 方法之外,我们还可以使用 Navigator.pushReplacementNamed() 方法跳转到一个新页面。下面是一个简单的例子:

dartimport 'package:flutter/material.dart';

void main() {
 runApp(MyApp());
}

class MyApp extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return MaterialApp(
 home: Home(),
 routes: {
 '/detail': (context) => DetailPage(),
 },
 );
 }
}

class Home extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return Scaffold(
 appBar: AppBar(
 title: Text('Home'),
 ),
 body: Center(
 child: ElevatedButton(
 onPressed: () {
 Navigator.pushReplacementNamed(context, '/detail');
 },
 child: Text('跳转到DetailPage'),
 ),
 ),
 );
 }
}

class DetailPage extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return Scaffold(
 appBar: AppBar(
 title: Text('DetailPage'),
 ),
 body: Center(
 child: Text('这是DetailPage'),
 ),
 );
 }
}


在上面的例子中,我们使用 Navigator.pushReplacementNamed() 方法跳转到 DetailPage 页面。

**7. 使用 Navigator.popUntil() 方法反向传参**

除了使用 Navigator.pop() 方法之外,我们还可以使用 Navigator.popUntil() 方法反向传参。下面是一个简单的例子:

dartimport 'package:flutter/material.dart';

void main() {
 runApp(MyApp());
}

class MyApp extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return MaterialApp(
 home: Home(),
 );
 }
}

class Home extends StatelessWidget {
 @override Widget build(BuildContext context) {
 return Scaffold(
 appBar: AppBar(
 title: Text('Home'),
 ),
 body: Center(
 child: ElevatedButton(
 onPressed: () {
 Navigator.push(
 context,
 MaterialPageRoute(builder: (context) => DetailPage()),
 );
 },
 child: Text('跳转到DetailPage'),
 ),
 ),
 );
 }
}

class DetailPage extends StatelessWidget {
 @override Widget

其他信息

其他资源

Top