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

Flutter try catch访问err.errormessage提示getter未定义报错

报错信息

类型'Object'上未定义getter 'errormessage'。请尝试导入定义了'errormessage'的库、将名称修正为现有getter的正确名称,或定义名为'errormessage'的getter或字段。

问题根因

这个报错是多个问题叠加导致的:

  • 你用catch (err)捕获异常时没有指定具体异常类型,Dart会默认把err推断为最顶层的Object类型,Object类根本没有errormessage这个属性,静态类型检查阶段就会直接报错。
  • Firebase Auth抛出的认证异常为FirebaseAuthException类型,存储错误提示文本的属性叫message,你写的errormessage是错误的属性名,根本不存在。
  • 额外说明:你原有代码把signInWithEmailAndPassword的返回值直接强转成User也是错的,这个方法返回的是UserCredential对象,要取它的.user属性才是登录后的用户实例,就算异常问题修复,这里也会触发类型转换错误。
修复方案
  1. 用on FirebaseAuthException catch精准捕获认证类异常,同时加通用catch兜底处理其他意外错误
  2. 用正确的message属性读取错误文本,加空值兜底避免空指针异常
  3. 把已经废弃的FlatButton替换为新版Flutter推荐的TextButton,避免编译警告
  4. 修正用户实例的获取逻辑,从返回的UserCredential里取.user属性

修复后的完整代码:

try {
  UserCredential userCred = await auth.signInWithEmailAndPassword(
    email: _email,
    password: _password
  );
  User? user = userCred.user;
  // 登录成功后的业务逻辑写在这里
} on FirebaseAuthException catch (err) {
  showError(err.message ?? '登录失败,请稍后重试');
} catch (err) {
  showError(err.toString());
}

void showError(String errMsg) {
  showDialog(
    context: context,
    builder: (BuildContext context) {
      return AlertDialog(
        title: const Text('Error'),
        content: Text(errMsg),
        actions: <Widget>[
          TextButton(
            onPressed: () => Navigator.of(context).pop(),
            child: const Text('Ok')
          )
        ],
      );
    }
  );
}

内容的提问来源于stack exchange,提问作者Aliyan shahid satti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:39:37