【问题标题】:The method '[]' can't be unconditionally invoked because the receiver can be 'null'. Flutter无法无条件调用方法“[]”,因为接收者可以为“null”。扑
【发布时间】:2022-01-06 17:41:17
【问题描述】:
      Post fromSnapShot(DataSnapshot snapshot) {
    return Post(
        content: snapshot.value['Content'],
        commentsCount: commentsCount,
        likesCount: likesCount,
        color: color,
        timestamp: timestamp,
        hashtags: hashtags);
  }

我正在尝试在我的数据类上创建 FromSnapShot 方法,我正在使用 firebase_database

但我不断得到这个

不能无条件调用方法“[]”,因为接收者可以为“null”。 尝试使调用有条件(使用'?.')或向目标添加空检查('!')。

我已经尝试使用 !但我得到另一个错误

没有为“对象”类型定义运算符“[]”。 尝试定义运算符'[]'

这是我的 pubspec.yaml

environment:
  sdk: ">=2.12.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  hooks_riverpod:
  flutter_hooks:
  firebase_auth:
  google_fonts: ^2.2.0
  flutter_glow: ^0.2.0
  cupertino_icons: ^1.0.2
  firebase_core: ^1.10.6
  firebase_database: ^9.0.4

dev_dependencies:
  flutter_test:
    sdk: flutter

【问题讨论】:

标签: firebase flutter dart


【解决方案1】:

将您的值转换为 Map

所以Map&lt;String,dynamic&gt; postData = snapshot.value!

然后它可能对你有用。

【讨论】:

  • 现在我得到这个“'Object'类型的值不能分配给'Map类型的变量?'。尝试更改变量的类型,或强制转换'Map?'" 的右侧类型
【解决方案2】:

我添加了一个空检查以确保变量不会为空。你可以试试这个吗?

Post fromSnapShot(DataSnapshot snapshot) {
var myContent = snapshot.value['Content']?? '';
return Post(
    content: myContent,
    commentsCount: commentsCount,
    likesCount: likesCount,
    color: color,
    timestamp: timestamp,
    hashtags: hashtags);

}

当您尝试使用 'value['Content']!' 进行空检查时类型会改变,因此会报错。

【讨论】:

  • 还是不行
猜你喜欢
  • 2021-10-05
  • 2023-03-05
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 2021-09-18
  • 2021-09-05
  • 2021-08-27
  • 1970-01-01
相关资源
最近更新 更多