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
相关产品推荐
相关产品推荐

