【问题标题】:How to solve ˜The getter 'documentID' was called on null.˜?如何解决〜在 null 上调用了 getter 'documentID'。〜?
【发布时间】:2020-04-25 12:19:43
【问题描述】:

我有这个函数的范围模型,我希望在按下按钮时有一个firebase增量来快照,但它返回〜在null上调用了getter'documentID'。〜,它改变了我的图标的状态但数字不会增加。如果我给出文档的名称,它可以正常工作,但我不想指定它。关于什么可能是解决方案的任何想法?

void main() {
runApp(EaiCasimiro());
}



class EaiCasimiro extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ScopedModel<LikesModel>(
    model: LikesModel(),
    child: MaterialApp(
      title: "E aí,  Casimiro?",
      home: HomeScreen(),
      debugShowCheckedModeBanner: false,
      )
    );
   }
}


class LikesModel extends Model {

DocumentSnapshot snapshot;




bool _liked = true;

static LikesModel of(BuildContext context) =>
  ScopedModel.of<LikesModel>(context, rebuildOnChange: true);


bool isLiked() => _liked;




void pressed(){
_liked = !_liked;
notifyListeners();
 }

void changeLikes() {
Firestore.instance
    .collection("lanchonetes")
    .document(snapshot.documentID)
    .updateData({'likes': FieldValue.increment(_liked ? -1 : 1)});


    }

}

【问题讨论】:

  • 请注意在您的问题中正确格式化您的代码,以便于阅读。看起来你已经失去了很多缩进,这使得它变得困难。您可以通过简单地用三个反引号开始和结束整个块来将整个文本块标记为代码:```
  • 感谢 Doug 的提示,下次发布代码时我会努力改进。
  • 您可以随时返回并立即编辑代码,方法是单击问题底部的“编辑”链接并在编辑器中进行更改。

标签: firebase flutter dart google-cloud-firestore scoped-model


【解决方案1】:

由于您这里有很多代码,但没有注意到发生错误的特定行,我猜它发生在这里:

Firestore.instance
    .collection("lanchonetes")
    .document(snapshot.documentID)
    .updateData({'likes': FieldValue.increment(_liked ? -1 : 1)});

我花了一段时间才找到你定义 snapshot 的位置,但我在这里找到了它:

DocumentSnapshot snapshot;

由于您在声明它时没有分配值,因此它的初始值将为 null。因此,当您在这样的查询中使用它时:snapshot.documentID,您将收到该错误。

确保在使用之前定义了snapshot

【讨论】:

  • 你知道我怎么定义它吗?我尝试了不同的方法,搜索了很多,但我得到的最接近的是 .forEach,但它增加了我所有的文档。
猜你喜欢
  • 2019-11-05
  • 2021-12-21
  • 2020-01-10
  • 2020-10-24
  • 2021-04-13
  • 2021-10-22
  • 2020-05-20
  • 2019-01-09
  • 2021-07-21
相关资源
最近更新 更多