【问题标题】:How do I get list of course based on category name from firestore in Flutter如何根据 Flutter 中的 Firestore 中的类别名称获取课程列表
【发布时间】: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


    【解决方案1】:

    你必须像这样传递整个地图对象 -

    query = query.where("category",arrayContains: {
    caseSearch:['xyz','abc'..],
    id: 'scnsjksna...',
    name: 'Binary Options'
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      • 2023-03-16
      • 2012-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      相关资源
      最近更新 更多