'find organisations' nearly works...
This commit is contained in:
parent
6c9eb1c115
commit
d4ca4a0534
4 changed files with 141 additions and 12 deletions
|
@ -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
|
||||||
|
|
52
lib/common/widgets/popupListView.dart
Normal file
52
lib/common/widgets/popupListView.dart
Normal 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...
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Reference in a new issue