Flutter页面传值问题:UserNavigationScreen接收值为null如何解决?
问题原因
你在UserNavigationScreen的State类里犯了两个关键错误:
- 重复定义了
uid、name等变量,但构造函数没有把传入的参数赋值给这些变量,导致它们始终为null; - 完全没必要在State类里重新声明这些变量——StatefulWidget的State可以直接通过
widget.xxx访问父组件的属性。
解决方案
直接删除State类里的冗余变量和带参构造函数,改用widget.uid、widget.name等方式获取传递的值。
修改后的完整接收端代码:
class UserNavigationScreen extends StatefulWidget { int uid; String name, username, email; UserNavigationScreen( {Key? key, required this.uid, required this.name, required this.username, required this.email}) : super(key: key); static const String id = 'user_navigation_screen'; @override State<UserNavigationScreen> createState() => _UserNavigationScreenState(); // 移除构造参数传递 } class _UserNavigationScreenState extends State<UserNavigationScreen> { int currentIndex = 0; // 只保留自身需要的状态变量 @override Widget build(BuildContext context) { print(widget.uid); // 正确获取传递的值 print(widget.name); final screens = [ UserPostsScreen( uid: widget.uid, name: widget.name, username: widget.username, email: widget.email), //UserAlbumScreen(), UserPhotosScreen(), //UserTodosScreen(), ]; // 后续build逻辑... } }
补充说明
- 如果需要在
initState方法中使用这些传递的值,同样直接用widget.xxx即可,因为initState执行时widget已完成初始化; - 传递端的代码没有问题,无需修改。
内容的提问来源于stack exchange,提问作者learnflutter
相关产品推荐
相关产品推荐

