从Firebase到列表的数据获取为空(Flutter)

时间:2019-12-06 04:10:20

标签: firebase flutter google-cloud-firestore

我想将数据从Firebase获取到List,我不想使用StreamBuilder,我只想将数据获取到List以供以后使用。我尝试执行此操作,但是它显示方法'add'在null上被调用。

 List<Map <dynamic, dynamic>> maps;
 Firestore.instance
    .collection('users')
    .snapshots()
    .listen((data) => data.documents.forEach((doc) =>  maps.add(doc.data) ));

1 个答案:

答案 0 :(得分:0)

您没有初始化$ docker image rm --no-prune my:image Untagged: my:image Deleted: sha256:9f6a7f60fd0ddf06d079e9d1a5bd608a7dd85f6f00e7bacc79082a8ea4dc6601 变量,因此$ docker build --tag my:image . Sending build context to Docker daemon 2.048kB Step 1/3 : FROM alpine ---> 965ea09ff2eb Step 2/3 : RUN echo "hello" ---> Using cache ---> bffa49d7d012 Step 3/3 : RUN echo "world" ---> Running in f09302ce5295 world Removing intermediate container f09302ce5295 ---> 224a0d5007dd Successfully built 224a0d5007dd Successfully tagged my:image 实际上是在未初始化的变量(maps)上调用的。

要解决此问题,请在声明maps.add(doc.data)时对其进行初始化:

null

关于您在评论中提到的问题:我的猜测是您正在将地图长度打印在maps之外,这是行不通的,因为数据加载是异步发生的。

针对该问题的最简单的解决方法是使用var maps = List<Map <dynamic, dynamic>>(); .listen((data) => data.documents.forEach((doc) => maps.add(doc.data) ))

get

或者,您可以继续使用await,但是将打印操作移至回调中:

var data = await Firestore.instance
    .collection('users')
    .snapshots()
    .get()
data.documents.forEach((doc) =>  maps.add(doc.data) ));
print(maps.length)

或更简单:

listen