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

Flutter开发Dart报错:参数类型Object?无法赋值给String/int类型如何解决

问题根因
  • 你定义的cardData默认泛型为List<Map<String, Object?>>,通过item['xxx']读取到的值是可空的Object类型,无法直接赋值给CardModel构造函数要求的非空String/int类型,因此触发类型不匹配报错。
  • 额外注意:你当前代码中cards的初始化声明在cardData之前,还会触发变量未初始化的报错,需要调整两者的先后顺序。
解决方案

方案1:显式声明类型+强制类型转换(适合静态固定的测试数据)

显式指定Map的value类型,同时对每个取值做明确的类型转换即可,修改后代码如下:

// 先声明cardData
var cardData = <Map<String, dynamic>>[
  {
    "user": "Berfin Gürz",
    "cardNumber": "**** **** **** 1727",
    "cardExpired": "17-01-2022",
    "cardType": "assets/images/mastercard_logo.png",
    "cardBackground": 0xFF1E1E99,
    "cardElementTop": "assets/svg/ellipse_top_pink.svg",
    "cardElementBottom": "assets/svg/ellipse_bottom_pink.svg"
  },
  {
    "user": "Berfin Gürz",
    "cardNumber": "**** **** **** 8213",
    "cardExpired": "03-01-2024",
    "cardType": "assets/images/mastercard_logo.png",
    "cardBackground": 0xFFFF70A3,
    "cardElementTop": "assets/svg/ellipse_top_blue.svg",
    "cardElementBottom": "assets/svg/ellipse_bottom_blue.svg"
  }
];

List<CardModel> cards = cardData.map(
  (item) => CardModel(
    item['user'] as String,
    item['cardNumber'] as String,
    item['cardExpired'] as String,
    item['cardType'] as String,
    item['cardBackground'] as int,
    item['cardElementTop'] as String,
    item['cardElementBottom'] as String,
  ),
).toList();

class CardModel {
  String user;
  String cardNumber;
  String cardExpired;
  String cardType;
  int cardBackground;
  String cardElementTop;
  String cardElementBottom;

  CardModel(this.user, this.cardNumber, this.cardExpired, this.cardType,
      this.cardBackground, this.cardElementTop, this.cardElementBottom);
}

方案2:增加空安全校验(适合后端接口返回的动态数据)

如果数据来源是动态接口,不能保证字段一定存在或类型正确,可以增加兜底逻辑避免运行崩溃:

List<CardModel> cards = cardData.map(
  (item) => CardModel(
    item['user']?.toString() ?? '',
    item['cardNumber']?.toString() ?? '',
    item['cardExpired']?.toString() ?? '',
    item['cardType']?.toString() ?? '',
    item['cardBackground'] as int? ?? 0,
    item['cardElementTop']?.toString() ?? '',
    item['cardElementBottom']?.toString() ?? '',
  ),
).toList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:57:02