#flutter #dart #parse-platform #query-builder #back4app
Вопрос:
Я использую back4app.com сервисы (Prase SDK) в моем проекте flutter для обработки моего бэкенда.
в этом методе я пытаюсь выполнить запрос к определенному объекту :
Future<List> getList(String date) async {
final QueryBuilder<ParseObject> parseQuery =
QueryBuilder<ParseObject>(ParseObject('UsersEaten'));
parseQuery
..whereContains('eatenBy', getUsrName!)
..whereEqualTo('eatenDate', date);
final ParseResponse apiResponse = await parseQuery.query();
if (apiResponse.success amp;amp; apiResponse.results != null) {
List<dynamic>? apiRes = apiResponse.results;
и у меня есть все данные об этом объекте в виде списка карт :
[{"className":"UsersEaten","objectId":"OmrLz358Cb","createdAt":"2021-09-12T11:27:41.824Z","updatedAt":"2021-09-12T11:27:41.824Z","eatenTitle":"egg roll","eatenCal":180,"eatenFat":40,"eatenProtein":30,"eatenCarb":10,"eatenBy":"usr45","eatenDate":"2021-09-12"}, {"className":"UsersEaten","objectId":"lWIeMw54mH","createdAt":"2021-09-12T12:37:21.389Z","updatedAt":"2021-09-12T12:37:21.389Z","eatenTitle":"meat butter","eatenCal":235,"eatenFat":34,"eatenProtein":34,"eatenCarb":9,"eatenBy":"usr45","eatenDate":"2021-09-12"}]
но мне не нужны целые данные , мне просто нужен конкретный ключ, Значения из этой карты, например, мне просто нужны значения ключей, доступные пользователям, как я должен применить этот фильтр в своем запросе???
Ответ №1:
В случае, если я правильно понял ваш вопрос, вы хотите уменьшить количество ключей, возвращаемых сервером. Этого можно достичь с помощью keysToReturn(List<String> keys)
.
/// Define which keys in an object to return. /// /// [String] keys will only return the columns of a result you want the data for, /// this is useful for large objects void keysToReturn(List<String> keys) { limiters['keys'] = concatenateArray(keys); }
Таким образом, ваш запрос может выглядеть примерно так:
parseQuery
..whereContains('eatenBy', getUsrName!)
..whereEqualTo('eatenDate', date)
keysToReturn(['YOUR_KEY_THAT_SHOULD_BE_RETURNED']);
Существует также полная противоположность этому доступному методу, называемому excludeKeys(List<String> keys)
.
Комментарии:
1. Я ценю это , это прекрасно работает с этим методом.
Ответ №2:
Создайте класс данных, я выбрал Example
для него имя
class Example {
String? className;
String? objectId;
String? createdAt;
String? updatedAt;
String? eatenTitle;
int? eatenCal;
int? eatenFat;
int? eatenProtein;
int? eatenCarb;
String? eatenBy;
String? eatenDate;
Example({
this.className,
this.objectId,
this.createdAt,
this.updatedAt,
this.eatenTitle,
this.eatenCal,
this.eatenFat,
this.eatenProtein,
this.eatenCarb,
this.eatenBy,
this.eatenDate,
});
Map<String, dynamic> toMap() {
return {
'className': className,
'objectId': objectId,
'createdAt': createdAt,
'updatedAt': updatedAt,
'eatenTitle': eatenTitle,
'eatenCal': eatenCal,
'eatenFat': eatenFat,
'eatenProtein': eatenProtein,
'eatenCarb': eatenCarb,
'eatenBy': eatenBy,
'eatenDate': eatenDate,
};
}
factory Example.fromMap(Map<String, dynamic> map) {
return Example(
className: map['className'],
objectId: map['objectId'],
createdAt: map['createdAt'],
updatedAt: map['updatedAt'],
eatenTitle: map['eatenTitle'],
eatenCal: map['eatenCal'],
eatenFat: map['eatenFat'],
eatenProtein: map['eatenProtein'],
eatenCarb: map['eatenCarb'],
eatenBy: map['eatenBy'],
eatenDate: map['eatenDate'],
);
}
String toJson() => json.encode(toMap());
factory Example.fromJson(String source) => Example.fromMap(json.decode(source));
}
К сожалению, я не знаю, как пользоваться этой услугой back4app.com, но это должно выглядеть так
if (apiResponse.success amp;amp; apiResponse.results != null) {
final maps = jsonDecode(apiResponse.results).cast<Map<String, dynamic>>();
var exampleList = List.generate(maps.length, (i) {
return Example.fromMap(maps[i]);
});
//sum of calories
num sum = 0;
exampleList.forEach((element){sum = element.eatenCal;});
print(sum);
}
Комментарии:
1. большое спасибо , теперь есть ли какой-нибудь способ суммировать эти элементы? Я имею в виду exampleList.forEach((элемент) {печать(элемент.eatenCal);}); возвращаемые числа теперь как мне собрать и суммировать эти числа?
2. Например, какое-то поле
eatenCal
с цифрами.. Я исправил свой ответ и добавил расчет суммы в последних 3 строках. Таким образом, вы можете рассчитать все, что захотите, исходя из поступившей к вам информации.3. Я действительно ценю это . все это хорошо, но в моей консоли у меня есть два числа: первое-
eatenCal
номер первого элемента в списке, а второе-сумма всего списка. почему у меня первый номер?