You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter页面传值问题:UserNavigationScreen接收值为null如何解决?

问题原因

你在UserNavigationScreen的State类里犯了两个关键错误:

  1. 重复定义了uid、name等变量,但构造函数没有把传入的参数赋值给这些变量,导致它们始终为null;
  2. 完全没必要在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 03:39:33