fixed uri escaping [] characters when loading tasks
This commit is contained in:
parent
347bd6cd66
commit
0eb941bfb1
|
@ -81,13 +81,16 @@ class Client {
|
||||||
[Map<String, List<String>>? queryParameters]) {
|
[Map<String, List<String>>? queryParameters]) {
|
||||||
Uri uri = Uri.tryParse('${this.base}$url')!;
|
Uri uri = Uri.tryParse('${this.base}$url')!;
|
||||||
// why are we doing it like this? because Uri doesnt have setters. wtf.
|
// why are we doing it like this? because Uri doesnt have setters. wtf.
|
||||||
|
print(uri.toString());
|
||||||
|
|
||||||
uri = Uri(
|
uri = Uri(
|
||||||
scheme: uri.scheme,
|
scheme: uri.scheme,
|
||||||
userInfo: uri.userInfo,
|
userInfo: uri.userInfo,
|
||||||
host: uri.host,
|
host: uri.host,
|
||||||
port: uri.port,
|
port: uri.port,
|
||||||
path: uri.path,
|
path: uri.path,
|
||||||
queryParameters: {...uri.queryParameters, ...?queryParameters},
|
//queryParameters: {...uri.queryParameters, ...?queryParameters},
|
||||||
|
queryParameters: queryParameters,
|
||||||
fragment: uri.fragment
|
fragment: uri.fragment
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -90,11 +90,23 @@ class TaskAPIService extends APIService implements TaskService {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<List<Task>?> getByOptions(TaskServiceOptions options) {
|
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
|
return client
|
||||||
.get('/tasks/all$optionString')
|
.get('/tasks/all', optionsMap)
|
||||||
.then((response) {
|
.then((response) {
|
||||||
if (response == null) return null;
|
if (response == null) return null;
|
||||||
|
print(response.body);
|
||||||
|
print(response.headers);
|
||||||
return convertList(response.body, (result) => Task.fromJson(result));
|
return convertList(response.body, (result) => Task.fromJson(result));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -229,20 +229,24 @@ class LandingPageState extends State<LandingPage>
|
||||||
.taskService
|
.taskService
|
||||||
.getByOptions(TaskServiceOptions(
|
.getByOptions(TaskServiceOptions(
|
||||||
newOptions: [
|
newOptions: [
|
||||||
|
TaskServiceOption<TaskServiceOptionSortBy>("sort_by", ["due_date", "id"]),
|
||||||
|
TaskServiceOption<TaskServiceOptionSortBy>("order_by", ["asc", "desc"]),
|
||||||
TaskServiceOption<TaskServiceOptionFilterBy>("filter_by", "done"),
|
TaskServiceOption<TaskServiceOptionFilterBy>("filter_by", "done"),
|
||||||
TaskServiceOption<TaskServiceOptionFilterValue>("filter_value", "false"),
|
TaskServiceOption<TaskServiceOptionFilterValue>("filter_value", "false"),
|
||||||
|
TaskServiceOption<TaskServiceOptionFilterComparator>("filter_comparator", "equals"),
|
||||||
|
TaskServiceOption<TaskServiceOptionFilterConcat>("filter_concat", "and"),
|
||||||
],
|
],
|
||||||
clearOther: true
|
clearOther: true
|
||||||
))
|
))
|
||||||
.then<Future<void>?>((taskList) => _handleTaskList(taskList, showOnlyDueDateTasks));
|
.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) {
|
Future<void> _handleTaskList(List<Task>? taskList, bool showOnlyDueDateTasks) {
|
||||||
if(showOnlyDueDateTasks)
|
if(showOnlyDueDateTasks)
|
||||||
taskList?.removeWhere((element) => element.dueDate == null || element.dueDate!.year == 0001);
|
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) {
|
if (taskList != null && taskList.isEmpty) {
|
||||||
setState(() {
|
setState(() {
|
||||||
|
|
|
@ -55,10 +55,17 @@ enum TaskServiceOptionFilterConcat { and, or }
|
||||||
|
|
||||||
class TaskServiceOption<T> {
|
class TaskServiceOption<T> {
|
||||||
String name;
|
String name;
|
||||||
dynamic value;
|
String? value;
|
||||||
|
List<String>? valueList;
|
||||||
dynamic defValue;
|
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) {
|
String handleValue(dynamic input) {
|
||||||
if (input is String) return input;
|
if (input is String) return input;
|
||||||
|
@ -66,8 +73,8 @@ class TaskServiceOption<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
dynamic getValue() {
|
dynamic getValue() {
|
||||||
if (value is List)
|
if (valueList != null)
|
||||||
return value.map((elem) => handleValue(elem)).toList();
|
return valueList!.map((elem) => handleValue(elem)).toList();
|
||||||
else
|
else
|
||||||
return handleValue(value);
|
return handleValue(value);
|
||||||
}
|
}
|
||||||
|
@ -116,23 +123,24 @@ class TaskServiceOptions {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
String getOptions() {
|
Map<String, List<String>> getOptions() {
|
||||||
String result = '';
|
Map<String, List<String>> queryparams = {};
|
||||||
if (options.length == 0) return '';
|
|
||||||
for (TaskServiceOption option in options) {
|
for (TaskServiceOption option in options) {
|
||||||
dynamic value = option.getValue();
|
dynamic value = option.getValue();
|
||||||
if (value is List) {
|
if (value is List) {
|
||||||
for (dynamic valueEntry in value) {
|
queryparams[option.name+"[]"] = value as List<String>;
|
||||||
result += '&' + option.name + '[]=' + valueEntry;
|
//for (dynamic valueEntry in value) {
|
||||||
}
|
// result += '&' + option.name + '[]=' + valueEntry;
|
||||||
|
//}
|
||||||
} else {
|
} else {
|
||||||
result += '&' + option.name + '=' + value;
|
queryparams[option.name] = [value as String];
|
||||||
|
//result += '&' + option.name + '[]=' + value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.startsWith('&')) result = result.substring(1);
|
//if (result.startsWith('&')) result = result.substring(1);
|
||||||
result = "?" + result;
|
//result = "?" + result;
|
||||||
return result;
|
return queryparams;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue