【发布时间】:2021-07-28 15:49:56
【问题描述】:
我更新时 JSON 的结构是这样的=>>>
{
category:[
{
id:"1",
caseSearch:...
name:"Flutter"
},
{
id:"2",
caseSearch:...
name:"Java"
}
],
name:"Course Name"
}
我想要的是根据类别名称获取课程。
/// id : "file"
/// title : "File"
/// likes : 23
/// description : "asjd"
/// category : [{"id":"New","name":"New"}]
/// tags : [{"id":"New","name":"New"}]
/// networkImages : [{"src":"New"}]
class Course {
String? _id;
String? _title;
int? _likes;
String? _description;
List<Category>? _category;
List<Tags>? _tags;
List<NetworkImages>? _networkImages;
int? _timestamp;
String? _coupon;
String? _courseLink;
String? _validTill;
double? _regularPrice;
double? _salePrice;
int? get timestamp => _timestamp;
double? get regularPrice => _regularPrice;
double? get salePrice => _salePrice;
String? get id => _id;
String? get coupon => _coupon;
String? get validTill => _validTill;
String? get title => _title;
int? get likes => _likes;
String? get description => _description;
List<Category>? get category => _category;
List<Tags>? get tags => _tags;
List<NetworkImages>? get networkImages => _networkImages;
String? get courseLink => _courseLink;
Course({
String? id,
String? title,
int? likes,
String? description,
int? timestamp,
List<Category>? category,
List<Tags>? tags,
List<NetworkImages>? networkImages,
String? coupon,
String? validTill,
String? courseLink,
double? regularPrice,
double? salePrice,
}) {
_id = id;
_title = title;
_likes = likes;
_description = description;
_category = category;
_tags = tags;
_networkImages = networkImages;
_timestamp = timestamp;
_coupon = coupon;
_validTill = validTill;
_courseLink = courseLink;
_regularPrice = regularPrice;
_salePrice = salePrice;
}
Course.fromJson(dynamic json) {
_id = json["id"];
_regularPrice = json["regularPrice"];
_salePrice = json["salePrice"];
_title = json["title"];
_likes = json["likes"];
_timestamp = json["timestamp"];
_description = json["description"];
_validTill = json["validTill"];
_coupon = json["coupon"];
_courseLink = json["courseLink"];
if (json["category"] != null) {
_category = [];
json["category"].forEach((v) {
_category?.add(Category.fromJson(v));
});
}
if (json["tags"] != null) {
_tags = [];
json["tags"].forEach((v) {
_tags?.add(Tags.fromJson(v));
});
}
if (json["networkImages"] != null) {
_networkImages = [];
json["networkImages"].forEach((v) {
_networkImages?.add(NetworkImages.fromJson(v));
});
}
}
Course.copyWith(
Course _course, {
String? id,
String? title,
int? likes,
String? description,
List<Category>? category,
List<Tags>? tags,
List<NetworkImages>? networkImages,
int? timestamp,
String? coupon,
String? validTill,
String? courseLink,
double? regularPrice,
double? salePrice,
}) {
_id = id ?? _course.id;
_salePrice = salePrice ?? _course.salePrice;
_regularPrice = regularPrice ?? _course.regularPrice;
_title = title ?? _course.title;
_likes = likes ?? _course.likes;
_description = description ?? _course.description;
_category = category ?? _course.category;
_tags = tags ?? _course.tags;
_networkImages = networkImages ?? _course.networkImages;
_timestamp = timestamp ?? _course.timestamp;
_coupon = coupon ?? _course.coupon;
_validTill = validTill ?? _course.validTill;
_courseLink = courseLink ?? _course.courseLink;
}
Map<String, dynamic> toJson() {
var map = <String, dynamic>{};
map["id"] = _id;
map["regularPrice"] = _regularPrice;
map["salePrice"] = _salePrice;
map["title"] = _title;
map["likes"] = _likes;
map["description"] = _description;
map["timestamp"] = _timestamp;
map["coupon"] = _coupon;
map["validTill"] = _validTill;
map["courseLink"] = _courseLink;
if (_category != null) {
map["category"] = _category?.map((v) => v.toJson()).toList();
}
if (_tags != null) {
map["tags"] = _tags?.map((v) => v.toJson()).toList();
}
if (_networkImages != null) {
map["networkImages"] = _networkImages?.map((v) => v.toJson()).toList();
}
String caseNumber = _title!;
List<String> caseSearchList = [];
String temp = "";
for (int i = 0; i < caseNumber.length; i++) {
temp = temp + caseNumber[i];
caseSearchList.add(temp.toUpperCase());
}
map["caseSearch"] = caseSearchList;
return map;
}
}
/// src : "New"
class NetworkImages {
String? _src;
String? get src => _src;
NetworkImages({String? src}) {
_src = src;
}
NetworkImages.fromJson(dynamic json) {
_src = json["src"];
}
Map<String, dynamic> toJson() {
var map = <String, dynamic>{};
map["src"] = _src;
return map;
}
}
/// id : "New"
/// name : "New"
class Tags {
String? _id;
String? _name;
String? get id => _id;
String? get name => _name;
Tags({String? id, String? name}) {
_id = id;
_name = name;
}
Tags.fromJson(dynamic json) {
_id = json["id"];
_name = json["name"];
}
Map<String, dynamic> toJson() {
var map = <String, dynamic>{};
map["id"] = _id;
map["name"] = _name;
return map;
}
}
/// id : "New"
/// name : "New"
class Category {
String? _id;
String? _name;
String? get id => _id;
String? get name => _name;
Category({String? id, String? name}) {
_id = id;
_name = name;
}
Category.fromJson(dynamic json) {
_id = json["id"];
_name = json["name"];
}
Category.copyWith(Category cat, {id, name}) {
_id = id ?? cat.id;
_name = name ?? cat.name;
}
copyWith({id, name}) {
return Category(
id: id ?? this._id,
name: name ?? this._name,
);
}
Map<String, dynamic> toJson() {
var map = <String, dynamic>{};
map["id"] = _id;
map["name"] = _name;
String caseNumber = _name!;
List<String> caseSearchList = [];
String temp = "";
for (int i = 0; i < caseNumber.length; i++) {
temp = temp + caseNumber[i];
caseSearchList.add(temp.toUpperCase());
}
map["caseSearch"] = caseSearchList;
return map;
}
}
这是我在课程中使用的模型
This is Firestore Model Screenshot
I want to filter by category App Screenshot 我想通过类别过滤课程。如何在 JSON 中过滤或搜索数据?
我认为 arraycontains 会起作用,但没有运气。
Future getCourseFrom({String? queryString})async{
Query query =_collectionRef;
if(queryString != ""){
print("Inside if $queryString");
query= query.where("category",arrayContains: [queryString]);
}
QuerySnapshot snap=await query.get();
print("From here ${snap.docs.length}");
}
【问题讨论】:
标签: firebase flutter google-cloud-firestore