如何在Flutter中将用户ID值传递到多个不同页面?
解决方案
Flutter的Navigator.pushNamed方法本身支持通过arguments参数传递任意类型的数据,你可以按以下步骤修改代码实现ID传递:
1. 修改HomePage跳转逻辑
在点击按钮触发跳转时,把用户ID作为参数传入arguments:
// HomePage里ElevatedButton的onPressed修改为 onPressed: () { // 这里的1是User 1对应的ID,你换成实际动态的用户ID即可 Navigator.pushNamed(context, 'pageOne', arguments: 1); },

2. 修改PageOne接收参数并继续传递
在PageOne的build方法中获取传递过来的ID,需要继续传递到PageTwo的话同样走arguments参数即可:
import 'package:flutter/material.dart'; class PageOne extends StatefulWidget { const PageOne({Key? key}) : super(key: key); @override _PageOneState createState() => _PageOneState(); } class _PageOneState extends State<PageOne> { @override Widget build(BuildContext context) { // 获取传递过来的ID final int? userId = ModalRoute.of(context)?.settings.arguments as int?; return Scaffold( appBar: AppBar( title: const Text('PageOne'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // 显示获取到的ID,为空时显示占位符 Text('Id: ${userId ?? '未获取到ID'}'), ElevatedButton( child: const Text('Send id to page two'), onPressed: () { // 继续把ID传递到PageTwo Navigator.pushNamed(context, 'pageTwo', arguments: userId); }, ), ], ), ), ); } }

可选:路由表注册时强校验参数类型
如果你希望在路由跳转时就校验参数类型避免类型转换错误,可以在MaterialApp的onGenerateRoute配置中处理:
MaterialApp( // 其他配置... onGenerateRoute: (settings) { switch (settings.name) { case 'pageOne': // 校验参数是否为int类型 final int userId = settings.arguments as int; return MaterialPageRoute( builder: (context) => PageOne(), settings: RouteSettings(arguments: userId), ); // 其他路由配置... default: return MaterialPageRoute(builder: (context) => const HomePage()); } }, );
内容的提问来源于stack exchange,提问作者Miguel Patiño
相关产品推荐
相关产品推荐

