创建一个空数组,然后在Flutter中使用空值将其发送到Firestore?

问题描述

我想在构成Feed的同时在Firestore中创建一个空数组。但是该数组在Firestore中显示为null。这是我的代码。请帮忙。

   class FeedModel {
    
      final String imgurl;
      final String desc;
      final String authorName;
      final String profileImg;
      final String title;
      final int likeCount;
      List<String> strArr = [];   // this the array i want to create it in firestore
    
      FeedModel({this.imgurl,this.desc,this.authorName,this.profileImg,this.title,this.likeCount,this.strArr});
    
      Map<String,dynamic> toMap(){
        return {
         "imgurl" : this.imgurl,"desc" : this.desc,"authorName" : this.authorName,"profileImg" : this.profileImg,"like_count" : this.likeCount,"liked_user_id" : this.strArr
        };
      }
   
    }

这是发送数据代码

Future<void> _sendData() async {

    try {
      final StorageReference firebaseStorageRef = FirebaseStorage.instance.ref().child('myimage.jpg');
      final StorageUploadTask task = firebaseStorageRef.putFile(_image);
      StorageTaskSnapshot taskSnapshot = await task.onComplete;
      String downloadUrl = await taskSnapshot.ref.getDownloadURL();
      final String pname = myController.text;
      final  String pimgurl = downloadUrl;
      final String pauthorName = "Sachin Tendulkar";
      final String pprofileImg = "https://i.picsum.photos/id/564/200/200.jpg?hmac=uExb18W9rplmCwAJ9SS5NVsLaurpaCTCBuHZdhsW25I";
      final String ptitle = "Demo Data";
      final int plikeCount= 0;
      List<String> pLikeduserId;  // This line returning null as show in image
      print(pimgurl);
      final FeedModel Feeds = FeedModel(imgurl: pimgurl,desc: pname,authorName: pauthorName,profileImg: pprofileImg,title: ptitle,likeCount: plikeCount,strArr : pLikeduserId );
      insertData(Feeds.toMap());

    }  catch (e) {
      print(e);
    }

  }

空白图片

enter image description here

想要得到下图所示的图像:

enter image description here

创建供稿时,如何发送像上一张图​​片一样的数组?

解决方法

如果要在字段中使用数组,甚至是空数组,则必须为其分配一个实际的列表值。现在,通过根本不分配任何实际的列表值,您实际上是在为Liked_user_id分配了一个空值。

所以,给它一个值:

List<String> pLikeduserId = [];

这将写一个空的列表字段。

,

没有太多理由将其存储为值为''的数组。取而代之的是,在使用类似liked_userid = /*insert method of getting firebase user ID*/??[]

的方法从firebase接收值时最好进行空检查。

这样,当您使用Liked_userid时,它不会为null,而是一个空列表。

如果您真的想要一个内部值为''的列表,而不要更改toMap函数的内部:

Map<String,dynamic> toMap(){
    return {
     "imgUrl" : this.imgUrl,"desc" : this.desc,"authorName" : this.authorName,"profileImg" : this.profileImg,"like_count" : this.likeCount,"liked_user_id" : this.strArr=[]?['']:this.strArr//line that was changed
    };
  }

这样做可以使您拥有一个内部带有['']的数组,但我仍然建议您显示的第一种方法。

,

执行此操作以创建带有空字符串的数组。

Map<String,dynamic> toMap() {
    return {
        'liked_user_id': List.generate(1,(r) => "")
    };
}
,

等待_fireStore.collection(“ COLLECTION_NAME”)。document(“ DOUCUMENT_NAME”)。setData({ “核心价值”: [], });

这会在Cloud FireStore中创建一个空数组。