乐闻世界logo
搜索文章和话题

How do I pass non-string data to a named route in Flutter?

2 个月前提问
2 个月前修改
浏览次数17

1个答案

1

在Flutter中,要将非字符串数据传递给命名路由,我们一般会使用路由设置(RouteSettings)中的arguments参数。这里我将通过一个具体的例子来说明如何实现这一功能。

首先,假设我们有一个用户对象User,我们需要在不同的页面之间传递这个对象。

dart
class User { final String name; final int age; User(this.name, this.age); }

接下来,在定义命名路由时,我们为目标页面设置参数传递。

dart
// 定义路由 MaterialApp( routes: { '/': (context) => HomePage(), '/user': (context) => UserPage(), }, onGenerateRoute: (settings) { if (settings.name == '/user') { final User user = settings.arguments as User; return MaterialPageRoute( builder: (context) { return UserPage(user: user); }, ); } // 其他路由处理 return null; }, );

在上面的代码中,我们在onGenerateRoute方法中对特定的路由'/user'进行处理。通过路由设置中的arguments属性接收传递的User对象。

然后我们可以在UserPage页面的构造函数中接收这个用户对象:

dart
class UserPage extends StatelessWidget { final User user; UserPage({required this.user}); Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('User Profile'), ), body: Center( child: Text('Name: ${user.name}, Age: ${user.age}'), ), ); } }

最后,在需要跳转到UserPage页面并传递用户数据的位置,我们这样操作:

dart
Navigator.pushNamed( context, '/user', arguments: User('John Doe', 30), );

这样,我们就可以从一个页面通过命名路由传递一个User对象到另一个页面,并在目标页面中使用这个对象的数据了。

总结来说,通过使用路由设置中的arguments参数,我们可以方便地在Flutter应用中的不同页面之间传递复杂的数据对象。

2024年7月19日 13:17 回复

你的答案