Flutter报错:CastList<dynamic,String>无法转为Map<String,dynamic>
解决Flutter类型转换错误:
CastList<dynamic, String> is not a subtype of type Map<String, dynamic> 错误原因分析
你在UI代码中尝试通过popularBooks.books[index]['bookImage']访问书籍图片,说明你预期books列表中的元素是Map<String, dynamic>类型,但当前BooksModel的实现存在冲突:
books字段定义为List<dynamic>,未明确元素类型booksNamegetter通过cast<String>()将books强制转为List<String>,导致实际存储类型和你访问时期望的Map类型不匹配,触发类型转换异常。
解决方案
1. 创建子模型表示单个书籍项
定义BookItem类封装单本书籍的属性:
class BookItem { String? bookName; String? bookImage; String? bookDes; String? id; BookItem({this.bookName, this.bookImage, this.bookDes, this.id}); factory BookItem.fromJson(Map<String, dynamic> json) { return BookItem( bookName: json['bookName'] as String?, bookImage: json['bookImage'] as String?, bookDes: json['bookDes'] as String?, id: json['id'] as String?, ); } }
2. 修改BooksModel解析逻辑
将books字段类型改为List<BookItem>,并在fromJson中正确解析API返回的数组:
class BooksModel { late List<BookItem> books; String? bookName; String? bookImage; String? bookDes; String? id; BooksModel({ this.bookName, this.bookImage, this.bookDes, this.id, }) : books = []; factory BooksModel.fromJson(Map<String, dynamic> json) { var model = BooksModel( bookName: json['bookName'] as String?, bookImage: json['bookImage'] as String?, bookDes: json['bookDes'] as String?, id: json['id'] as String?, ); // 解析books数组,将每个元素转为BookItem对象 var booksList = json['books'] as List? ?? []; model.books = booksList .map((item) => BookItem.fromJson(item as Map<String, dynamic>)) .toList(); return model; } // 调整booksName getter,从BookItem中提取书名 List<String> get booksName => books.map((book) => book.bookName ?? '').toList(); }
3. 修正UI中的图片访问逻辑
现在books列表中的元素是BookItem对象,直接通过属性访问bookImage:
Container( height:220, margin: EdgeInsets.only(left: 10, right: 10), decoration: BoxDecoration( borderRadius: BorderRadius.circular(30), color: index.isEven ? Color(0xFF69c5df) : Color(0xFF9294cc), image: DecorationImage( fit: BoxFit.cover, image: NetworkImage("https://641ec13fad55ae01ccaf4ebf.mockapi.io/book/uploads/${popularBooks.books[index].bookImage!}"), ), ), ),
内容的提问来源于stack exchange,提问作者Chaitali Shah
相关产品推荐
相关产品推荐

