Flutter 错误在 null 上调用了方法“[]”。接收方:null 尝试调用:[]("videoId")

Posted

技术标签:

【中文标题】Flutter 错误在 null 上调用了方法“[]”。接收方:null 尝试调用:[]("videoId")【英文标题】:Flutter error The method '[]' was called on null. Receiver: null Tried calling: []("videoId") 【发布时间】:2022-01-22 23:17:40 【问题描述】:

我想为我的小组项目制作一个可以显示我的 Youtube 播放列表中的视频列表的应用。视频列表出现在模拟器上,但是当我单击(播放)视频时收到此错误。

The method '[]' was called on null.
Receiver: null
Tried calling: []("videoId")

这是我的代码

class ListVideos extends StatelessWidget 
  List list;
  ListVideos(this.list);
  @override
  Widget build(BuildContext context) 
    return ListView.builder(
      itemCount: list == null ? 0 : list.length,
      itemBuilder: (context, i)
        return Container(
          padding: const EdgeInsets.all(10.0),
          child: Column(
            children: <Widget>[
              GestureDetector(
                onTap: () => Navigator.of(context).push(MaterialPageRoute(
                  builder: (BuildContext context) => VideoPlays(
                    url: "https://youtube.com/embed/$list[i]['contentDetail']['videoId']",))),
                child: Container(
                  height: 210.0,
                  decoration: BoxDecoration(
                    image: DecorationImage(
                      image: NetworkImage(list[i]['snippet']['thumbnails']['high']['url']), 
                      fit: BoxFit.cover),),
                ),
              ),
                Padding(padding: const EdgeInsets.all(10.0),),
                Text(list[i]['snippet']['title'],style: TextStyle(fontSize: 18.0),),
                 Padding(padding: const EdgeInsets.all(10.0),),
                 Divider()
            ],
          ),
        );
      
    );
  

我不知道如何解决这个问题

【问题讨论】:

你能在创建这个对象时显示吗? list[i]['contentDetail']null 对不起,我不明白你的意思。我刚刚开始学习编程,因为我的项目需要我构建一个应用程序。我从 youtube 上的教程中学会了这样做 在***上发帖之前,请阅读您使用的工具的文档。 【参考方案1】:

由于错误指示您名为contentDetail 的密钥正在获取null 值,这就是您无法获取videoId 的原因。要解决此错误,请确保您在 contentDetail 键中获得正确的值,或者如果 contentDetailnull,您可以应用逻辑隐藏 Container,如下所示

Visibility(
            visible: list[i]['contentDetail'] == null ? false : true,
              child: Container(
            padding: const EdgeInsets.all(10.0),
            child: Column(
              children: <Widget>[
                GestureDetector(
                  onTap: () => Navigator.of(context).push(MaterialPageRoute(
                      builder: (BuildContext context) => VideoPlays(
                        url: "https://youtube.com/embed/$list[i]['contentDetail']['videoId']",))),
                  child: Container(
                    height: 210.0,
                    decoration: BoxDecoration(
                      image: DecorationImage(
                          image: NetworkImage(list[i]['snippet']['thumbnails']['high']['url']),
                          fit: BoxFit.cover),),
                  ),
                ),
                Padding(padding: const EdgeInsets.all(10.0),),
                Text(list[i]['snippet']['title'],style: TextStyle(fontSize: 18.0),),
                Padding(padding: const EdgeInsets.all(10.0),),
                Divider()
              ],
            ),
          ))

【讨论】:

如果我这样做,它不会显示 youtube 视频列表 你需要检查contentDetail是否有值,如果它没有值那么它会在调用函数时抛出一个错误。 成功了,谢谢 如果它对您有用,请将其标记为已回答并投票。

以上是关于Flutter 错误在 null 上调用了方法“[]”。接收方:null 尝试调用:[]("videoId")的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:在 null 上调用了方法“[]”

FLutter:迭代列表时在 null 上调用了方法“[]”

Flutter:无法从 firebase 读取数据。方法 '[]' 在 null 错误上被调用

Flutter Firebase 在 null 上调用了方法“数据”

Flutter - json_serializable fromJson:在 null 上调用了方法“[]”

Hive/Flutter 错误:在 null 上调用了“registerAdapter”