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

初学Dart Async/Await 遇返回值非可空类型错误求助

问题排查与修复

核心错误原因

  • 函数缺少返回语句:toMap()声明返回Map<String, dynamic>,但你没有在函数末尾返回创建好的map变量,Dart会默认返回null,与非空的返回类型冲突,这就是报错的直接原因。
  • 无效的null判断:你用late int id修饰变量,late意味着该变量会被延迟初始化,一旦初始化后就不可能为null,未初始化时直接访问会抛出异常,所以if(id==null)这个判断完全没有意义。

修正后的代码

import 'dart:html';

class Product { // 类名首字母大写符合Dart命名规范
  int? id; // 若id可能为null,直接用可空类型替代late
  late String name;
  late String category;
  late int price; // 此处应为price(价格),原拼写prize意为“奖品”

  Map<String, dynamic> toMap() {
    var map = <String, dynamic>{
      "name": name,
      "category": category,
      "price": price,
    };
    // 仅当id不为null时,才将其加入map
    if (id != null) {
      map["id"] = id;
    }
    return map; // 必须返回构建完成的map
  }
}

额外说明

  • Dart命名规范:类名首字母大写,变量名采用小驼峰格式,能提升代码可读性。
  • 如果id是可选字段,使用可空类型int? id比late int id更合理,late更适合那些一定会被初始化、绝不会为null的变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:15:49