fixed uri escaping [] characters when loading tasks

This commit is contained in:
Benimautner 2023-11-28 17:06:07 +01:00
parent 347bd6cd66
commit 0eb941bfb1
4 changed files with 46 additions and 19 deletions

View File

@ -81,13 +81,16 @@ class Client {
[Map<String, List<String>>? queryParameters]) {
Uri uri = Uri.tryParse('${this.base}$url')!;
// why are we doing it like this? because Uri doesnt have setters. wtf.
print(uri.toString());
uri = Uri(
scheme: uri.scheme,
userInfo: uri.userInfo,
host: uri.host,
port: uri.port,
path: uri.path,
queryParameters: {...uri.queryParameters, ...?queryParameters},
//queryParameters: {...uri.queryParameters, ...?queryParameters},
queryParameters: queryParameters,
fragment: uri.fragment
);

View File

@ -90,11 +90,23 @@ class TaskAPIService extends APIService implements TaskService {
@override
Future<List<Task>?> getByOptions(TaskServiceOptions options) {
String optionString = options.getOptions();
Map<String, List<String>> optionsMap = options.getOptions();
//optionString = "?sort_by[]=due_date&sort_by[]=id&order_by[]=asc&order_by[]=desc&filter_by[]=done&filter_value[]=false&filter_comparator[]=equals&filter_concat=and&filter_include_nulls=false&page=1";
//print(optionString);
Map<String, List<String>> queryparams = {
"sort_by[]":["due_date", "id"],
"order_by[]":["asc", "desc"],
"filter_by[]": ["done"],
"filter_value[]":["false"],
"filter_comparator[]":["equals"],
"filter_concat[]":["and"],
};
return client
.get('/tasks/all$optionString')
.get('/tasks/all', optionsMap)
.then((response) {
if (response == null) return null;
print(response.body);
print(response.headers);
return convertList(response.body, (result) => Task.fromJson(result));
});
}

View File

@ -229,20 +229,24 @@ class LandingPageState extends State<LandingPage>
.taskService
.getByOptions(TaskServiceOptions(
newOptions: [
TaskServiceOption<TaskServiceOptionSortBy>("sort_by", ["due_date", "id"]),
TaskServiceOption<TaskServiceOptionSortBy>("order_by", ["asc", "desc"]),
TaskServiceOption<TaskServiceOptionFilterBy>("filter_by", "done"),
TaskServiceOption<TaskServiceOptionFilterValue>("filter_value", "false"),
TaskServiceOption<TaskServiceOptionFilterComparator>("filter_comparator", "equals"),
TaskServiceOption<TaskServiceOptionFilterConcat>("filter_concat", "and"),
],
clearOther: true
))
.then<Future<void>?>((taskList) => _handleTaskList(taskList, showOnlyDueDateTasks));
}).onError((error, stackTrace) {print("error");});
});//.onError((error, stackTrace) {print("error");});
}
Future<void> _handleTaskList(List<Task>? taskList, bool showOnlyDueDateTasks) {
if(showOnlyDueDateTasks)
taskList?.removeWhere((element) => element.dueDate == null || element.dueDate!.year == 0001);
taskList?.forEach((element) {print(element.dueDate);});
taskList?.forEach((element) {print(element.title);});
if (taskList != null && taskList.isEmpty) {
setState(() {

View File

@ -55,10 +55,17 @@ enum TaskServiceOptionFilterConcat { and, or }
class TaskServiceOption<T> {
String name;
dynamic value;
String? value;
List<String>? valueList;
dynamic defValue;
TaskServiceOption(this.name, this.value);
TaskServiceOption(this.name, dynamic input_values) {
if(input_values is List<String>) {
valueList = input_values;
} else if(input_values is String) {
value = input_values;
}
}
String handleValue(dynamic input) {
if (input is String) return input;
@ -66,8 +73,8 @@ class TaskServiceOption<T> {
}
dynamic getValue() {
if (value is List)
return value.map((elem) => handleValue(elem)).toList();
if (valueList != null)
return valueList!.map((elem) => handleValue(elem)).toList();
else
return handleValue(value);
}
@ -116,23 +123,24 @@ class TaskServiceOptions {
}
String getOptions() {
String result = '';
if (options.length == 0) return '';
Map<String, List<String>> getOptions() {
Map<String, List<String>> queryparams = {};
for (TaskServiceOption option in options) {
dynamic value = option.getValue();
if (value is List) {
for (dynamic valueEntry in value) {
result += '&' + option.name + '[]=' + valueEntry;
}
queryparams[option.name+"[]"] = value as List<String>;
//for (dynamic valueEntry in value) {
// result += '&' + option.name + '[]=' + valueEntry;
//}
} else {
result += '&' + option.name + '=' + value;
queryparams[option.name] = [value as String];
//result += '&' + option.name + '[]=' + value;
}
}
if (result.startsWith('&')) result = result.substring(1);
result = "?" + result;
return result;
//if (result.startsWith('&')) result = result.substring(1);
//result = "?" + result;
return queryparams;
}
}