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

Flutter开发遇Dart空安全错误:Null check operator used on a null value求助

错误根因

你触发报错的核心原因有两个:

  1. 你把类型为GlobalKey<_ProfilPickerState>的signUpKey绑定到了普通Padding组件上,Padding对应的状态类和_ProfilPickerState完全无关,导致signUpKey.currentState永远为null,你用!强制解包直接触发空异常
  2. 你通过Navigator.pushNamed跳转打开ProfilPicker,两个页面属于不同的路由栈节点,父页面的GlobalKey根本无法获取到新路由中组件的状态,属于逻辑设计错误

修复步骤

1. 替换跨页面传值逻辑,废弃GlobalKey方案

你需要通过路由传值的方式接收ProfilPicker返回的用户信息,先修改MyDrawerPages中头像的点击逻辑:

leading: GestureDetector(
  onTap: () async {
    // 等待ProfilPicker页面返回提交的用户数据
    final userInfo = await Navigator.pushNamed(context, '/profil_picker') as Map?;
    if (userInfo != null) {
      setState(() {
        stringName = userInfo['name'];
        stringTeam = userInfo['team'];
      });
    }
  },
  child: const CircleAvatar(
    backgroundColor: Color(0xFF463E3E),
    child: Icon(
      Icons.person,
      size: 40,
      color: Colors.white,
    ),
    radius: 22,
  ),
),

2. 清理MyDrawerPages中无效代码

删除下面无用代码:

// 删除这行全局Key定义
final signUpKey = GlobalKey<_ProfilPickerState>();
// 删除build方法开头的三行取值逻辑
final name = signUpKey.currentState!.name;
final team = signUpKey.currentState!.team;
final bool isSignin = signUpKey.currentState!.isSignin;

同时删除Padding组件上绑定的key: signUpKey属性。

3. 修改ProfilPicker页面提交逻辑,回传用户数据

找到_ProfilPickerState中OK按钮的onPressed回调,修改为:

onPressed: () {
  final inputName = nameController.text.trim();
  final inputTeam = teamController.text.trim();
  // 简单加个非空判断避免提交空数据
  if (inputName.isEmpty || inputTeam.isEmpty) return;
  setState(() {
    name = inputName;
    team = inputTeam;
  });
  // 打包数据回传给上一级页面
  Navigator.pop(context, {
    'name': name,
    'team': team,
    'isSignin': isSignin
  });
},

4. 调整展示逻辑

把原来展示名称和团队的判断逻辑简化即可:

title: Text(
  stringName.isNotEmpty ? stringName.toUpperCase() : '请登录',
  style: const TextStyle(color: Colors.white),
),
subtitle: Text(
  stringTeam.isNotEmpty ? stringTeam : '请选择团队',
  style: const TextStyle(color: Colors.white)
),

额外优化建议

你当前_ProfilPickerState中定义的late String name和late String team存在未初始化就访问的风险,建议直接改为普通可空类型String? name、String? team,或者给默认初始值避免late初始化异常。


内容的提问来源于stack exchange,提问作者user17310705

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:27:01