'find organisations' nearly works...

This commit is contained in:
Felix 2019-07-08 15:03:11 +01:00
parent 6c9eb1c115
commit d4ca4a0534
4 changed files with 141 additions and 12 deletions

View file

@ -7,22 +7,70 @@ class Organisation {
var id = 0; var id = 0;
var name = ""; var name = "";
var postcode = ""; var postcode = "";
var street_name = ""; var streetName = ""; //street_name
var town = ""; var town = "";
Organisation(int id, String name, String postcode, String streetName, String town) {
this.id = id;
this.name = name;
this.postcode = postcode;
this.streetName = streetName; //street_name
this.town = town;
}
} }
List<Organisation> jsonToOrganisations(String json) { List<Organisation> jsonToOrganisations(String json) {
Map decoded = jsonDecode(json); Map decoded = jsonDecode(json);
print(decoded); // print(decoded);
List<dynamic> validated = decoded['validated']; List<dynamic> validated = decoded['unvalidated'];
// Map organisation = validated[0]; // Map organisation = validated[0];
List<Map> organisations = new List<Map>(); print("");
print("Response:");
for (var i = 0; i < validated.length; i++) {
print(validated[i]);
}
validated.forEach((element) => organisations.add(element)); List<Map> organisationsMaps = new List<Map>();
// print(organisations); validated.forEach((element) => organisationsMaps.add(element));
// print("");
// print("organisationsMaps:");
// print(organisationsMaps);
List<Organisation> organisations = new List<Organisation>();
// organisationsMaps[0].forEach((k,v) => print('${k}: ${v}'));
for (var i = 0; i < organisationsMaps.length; i++) {
final params = organisationsMaps[i].values.toList();
var newOrganisation = new Organisation(
params[0].toInt(),
params[1].toString(),
params[2].toString(), // oof
params[3].toString(), // this could be improved...
params[4].toString(),
);
organisations.add(newOrganisation);
}
// the reason some organizations do not show up is because they are not all validated
// option to 'show unvalidated' should be added along with maybe a settings section
print("");
print("Local:");
for (var i = 0; i < organisations.length; i++)
{
print(organisations[i].name);
}
print("");
return organisations;
} }
Future<List<Organisation>> findOrganisations(String search) async { Future<List<Organisation>> findOrganisations(String search) async {
@ -43,7 +91,7 @@ Future<List<Organisation>> findOrganisations(String search) async {
body: json.encode(body), body: json.encode(body),
); );
print(response.body); // print(response.body);
if (response.statusCode == 200) { if (response.statusCode == 200) {
//request successful //request successful

View file

@ -0,0 +1,52 @@
import 'package:flutter/material.dart';
class PopupListView {
List<String> options = new List<String>();
var context;
String listTitle;
List<SimpleDialogOption> simpleDialogOptions = new List<SimpleDialogOption>();
String result;
PopupListView(context, List<String> options, String title) {
this.context = context;
this.options = options;
this.listTitle = title;
}
List<SimpleDialogOption> getDialogOptions() {
var dialogOptionsList = new List<SimpleDialogOption>();
for (var i = 0; i < options.length; i++) {
dialogOptionsList.add(
new SimpleDialogOption(
child: Text(options[i]),
onPressed: () {
Navigator.of(this.context).pop();
// print("Chosen organisation is " + options[i]);
optionChosen(options[i]);
},
),
);
}
return dialogOptionsList;
}
Widget dialog() {
return new SimpleDialog(
title: Text(listTitle),
children : getDialogOptions(),
);
}
void optionChosen(String option) {
// this works at least...
}
}

View file

@ -18,8 +18,8 @@ class LoginPage extends StatefulWidget {
} }
class LoginPageState extends State<LoginPage> { class LoginPageState extends State<LoginPage> {
final TextEditingController _emailController = TextEditingController(); final TextEditingController _emailController = TextEditingController(text: 'test@example.com'); // remove
final TextEditingController _passwordController = TextEditingController(); final TextEditingController _passwordController = TextEditingController(text: 'abc123'); // remove
FocusNode focusNode; // added so focus can move automatically FocusNode focusNode; // added so focus can move automatically

View file

@ -11,6 +11,7 @@ import 'package:url_launcher/url_launcher.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:datetime_picker_formfield/datetime_picker_formfield.dart'; import 'package:datetime_picker_formfield/datetime_picker_formfield.dart';
import 'package:local_spend/common/apifunctions/find_organisations.dart'; import 'package:local_spend/common/apifunctions/find_organisations.dart';
import 'package:local_spend/common/widgets/popupListView.dart';
const URL = "https://flutter.io/"; const URL = "https://flutter.io/";
const demonstration = false; const demonstration = false;
@ -146,6 +147,32 @@ class ReceiptPageState extends State<ReceiptPage> {
// know that before writing this and it's done now so I'm keeping it. // know that before writing this and it's done now so I'm keeping it.
} }
String listOrganisations(List<Organisation> organisations, context) {
var optionsList = new List<String>();
for (var i = 0; i < organisations.length; i++) {
optionsList.add(organisations[i].name);
}
var popupListView = new PopupListView(context, optionsList, "Choose Organization");
popupListView.options = optionsList;
var dialog = popupListView.dialog();
// print(dialog);
showDialog(
context: context,
builder: (BuildContext context) {
return dialog;
},
);
print(popupListView.result);
return popupListView.result;
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var drawer = Drawer(); var drawer = Drawer();
@ -264,10 +291,12 @@ class ReceiptPageState extends State<ReceiptPage> {
padding: EdgeInsets.fromLTRB(5,0,0,4), // sorry about hardcoded constraints padding: EdgeInsets.fromLTRB(5,0,0,4), // sorry about hardcoded constraints
child: FlatButton( child: FlatButton(
onPressed: () { onPressed: () {
debugPrint("TODO: 'find organisation' dialog"); var organisations = findOrganisations(_orgController.text);
// some tasty async stuff here yum yum
findOrganisations(_orgController.text); // and a pretty little dialog too yay
var choice = organisations.then((data) => listOrganisations(data, context));
// choice is a Future<String>
}, },
child: Text("Find", child: Text("Find",
style: style: