This repository has been archived on 2023-08-16. You can view files and clone it, but cannot push or open issues or pull requests.
LocalSpend-Tracker/lib/common/apifunctions/categories.dart
2019-07-16 16:55:00 +01:00

78 lines
No EOL
2 KiB
Dart

import 'dart:convert';
import 'dart:async';
import 'package:http/http.dart' as http;
import 'package:local_spend/common/functions/get_token.dart';
class Category {
String name;
String index;
Category({
this.name,
this.index,
});
}
Future<List<Category>> getCategories() async {
const url = "https://dev.peartrade.org/api/search/category";
var token;
await getToken().then((result) {
token = result;
});
Map<String, String> body = {
"session_key":token,
};
final response = await http.post (
url,
body: json.encode(body),
);
// print(response.body);
if (response.statusCode == 200) {
//request successful
List<Category> categories = new List<Category>();
Map responseMap = json.decode(response.body);
var categoriesJSON = responseMap['categories'];
//nice.
// so the response needs to be decoded iteratively, like
// categories.add(new Category(name: categoriesJSON[i.toString()], index: i.toString()));
// print(categoriesJSON['11']); // prints "Banana"
int i = 1; // starts on 1. that was annoying to debug!
while (true) {
if (categoriesJSON[i.toString()] != null) {
// print("Iteration " + i.toString());
// print(categoriesJSON[i.toString()]);
categories.add(new Category(
name: categoriesJSON[i.toString()], index: i.toString()));
// print(categories.last);
i++;
} else {
// print("Number of categories: " + (i - 1).toString());
// print("categoriesJSON[" + i.toString() + ".toString()] == null");
break;
}
} // does this until error, which then tells it that there is no more JSON left
// print(categories[11].name);
// decodedResponse.forEach((key, value) {
//// print(key + ": " + value);
// categories.add(new Category(name: value, index: key));
// });
// print(categories[10].name.toString()); // prints "Banana"
return categories;
} else {
// not successful
return null;
}
}