如何从解析后的CourseLessonsModel中获取全部YoutubeId生成列表?
解决获取全部YoutubeId的问题
你当前代码的核心问题是循环时没有使用迭代的当前项data,而是一直访问固定的widget.courseLessons对象,导致每次都添加第一个条目的YoutubeId,重复三次。
修改后的代码(基础循环版)
List<String> youTubeIds = []; // 遍历courseLessonDetailsData中的每一项 for(var data in widget.courseLessonsModel.courseLessonDetailsData as Iterable){ // 从当前项data中获取LessonContentDetails的第一个元素 var lessonContent = data.lessonContentDetails?.first; // 从lessonContent中获取Video的第一个元素的YoutubeId var youtubeId = lessonContent?.video?.first.youtubeId; // 避免空值加入列表 if(youtubeId != null){ youTubeIds.add(youtubeId); } } print(youTubeIds); // 输出:[yt_id1, yt_id2, yt_id3]
更简洁的写法(空安全版本)
如果你使用的是Dart 2.12+(空安全版本),可以用链式调用简化代码:
List<String> youTubeIds = (widget.courseLessonsModel.courseLessonDetailsData as Iterable) // 从每个data项中提取YoutubeId .map((data) => data.lessonContentDetails?.first?.video?.first?.youtubeId) // 过滤掉空值 .whereNotNull() // 转换为列表 .toList(); print(youTubeIds);
关键说明
- 循环变量
data代表courseLessonDetailsData数组中的每一个CourseLessonDetailsData对象,必须从data中获取对应条目的lessonContentDetails和video信息,而不是固定的widget.courseLessons。 - 加入空值判断是为了避免JSON中某个条目缺少Video或YoutubeId时触发空指针异常。
内容的提问来源于stack exchange,提问作者Tahir
相关产品推荐
相关产品推荐

