UI looking FANTASTIC
new organisations dialog added with very sexy listView
This commit is contained in:
parent
59f69b102f
commit
eaf7a06f52
4 changed files with 173 additions and 57 deletions
|
@ -2,6 +2,7 @@ import 'dart:convert';
|
|||
import 'dart:async';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:local_spend/common/functions/get_token.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class Category {
|
||||
String name;
|
||||
|
@ -13,6 +14,24 @@ class Category {
|
|||
});
|
||||
}
|
||||
|
||||
Future<List<DropdownMenuItem<String>>> getCategoriesList() async {
|
||||
//TODO: Return a list of [String, String] where {1} is categoryName and {2} is categoryValue for request
|
||||
var categoriesList = List<DropdownMenuItem>();
|
||||
|
||||
var categories = await getCategories();
|
||||
|
||||
categories.forEach((thisCategory) {
|
||||
var thisMap = new DropdownMenuItem(
|
||||
child: new Text(thisCategory.name),
|
||||
value: thisCategory.index,
|
||||
);
|
||||
|
||||
categoriesList.add(thisMap);
|
||||
});
|
||||
|
||||
return categoriesList;
|
||||
}
|
||||
|
||||
Future<List<Category>> getCategories() async { // confusing name
|
||||
const url = "https://dev.peartrade.org/api/search/category";
|
||||
var token;
|
||||
|
|
|
@ -4,6 +4,7 @@ import 'package:http/http.dart' as http;
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:local_spend/common/functions/get_token.dart';
|
||||
|
||||
|
||||
class Organisation {
|
||||
var id = 0;
|
||||
var name = "";
|
||||
|
@ -11,40 +12,22 @@ class Organisation {
|
|||
var streetName = ""; //street_name
|
||||
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;
|
||||
}
|
||||
Organisation(
|
||||
this.id,
|
||||
this.name,
|
||||
this.postcode,
|
||||
this.streetName,
|
||||
this.town,
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
List<Organisation> jsonToOrganisations(String json) {
|
||||
Map decoded = jsonDecode(json);
|
||||
// print(decoded);
|
||||
|
||||
List<dynamic> validated = decoded['validated'];
|
||||
// Map organisation = validated[0];
|
||||
//
|
||||
// print("");
|
||||
// print("Response:");
|
||||
// for (var i = 0; i < validated.length; i++) {
|
||||
// print(validated[i]);
|
||||
// }
|
||||
|
||||
List<Map> organisationsMaps = new List<Map>();
|
||||
|
||||
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();
|
||||
|
@ -60,17 +43,6 @@ List<Organisation> jsonToOrganisations(String json) {
|
|||
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;
|
||||
}
|
||||
|
||||
|
@ -92,8 +64,6 @@ Future<List<Organisation>> findOrganisations(String search) async {
|
|||
body: json.encode(body),
|
||||
);
|
||||
|
||||
// print(response.body);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
//request successful
|
||||
return jsonToOrganisations(response.body);
|
||||
|
|
79
lib/common/widgets/organisations_dialog.dart
Normal file
79
lib/common/widgets/organisations_dialog.dart
Normal file
|
@ -0,0 +1,79 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:local_spend/common/apifunctions/find_organisations.dart';
|
||||
|
||||
class FindOrganisations {
|
||||
|
||||
TextField getSearchBar(TextEditingController controller, String hintText) {
|
||||
return TextField(
|
||||
controller: controller,
|
||||
decoration: InputDecoration(
|
||||
hintText: hintText,
|
||||
icon: Icon(Icons.search),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
List<Text> getStuff() {
|
||||
var numItems = 200;
|
||||
var itemsList = new List<Text>();
|
||||
|
||||
for (int i = 0; i < numItems; i++) {
|
||||
itemsList.add(Text(
|
||||
"Payee " + (i + 1).toString(),
|
||||
style: new TextStyle(fontSize: 18),
|
||||
));
|
||||
}
|
||||
|
||||
return itemsList;
|
||||
}
|
||||
|
||||
Future<Organisation> dialog(context) {
|
||||
var searchBar = getSearchBar(null, "Payee Name");
|
||||
var stuff = getStuff();
|
||||
return showDialog<Organisation>(
|
||||
context: context,
|
||||
barrierDismissible: true,
|
||||
|
||||
builder: (BuildContext context) {
|
||||
return SimpleDialog(
|
||||
children: <Widget>[
|
||||
Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 10),
|
||||
child: searchBar,
|
||||
),
|
||||
|
||||
Container(
|
||||
padding: EdgeInsets.all(10),
|
||||
width: MediaQuery.of(context).size.width * 0.7,
|
||||
height: MediaQuery.of(context).size.height * 0.7,
|
||||
|
||||
child: Material(
|
||||
shadowColor: Colors.transparent,
|
||||
color: Colors.transparent,
|
||||
child: ListView.builder(
|
||||
itemCount: stuff.length,
|
||||
itemBuilder: (context, index) {
|
||||
return Card(
|
||||
child: ListTile(
|
||||
leading: Icon(Icons.person),
|
||||
title: stuff[index],
|
||||
trailing: Icon(Icons.arrow_forward_ios),
|
||||
)
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
|
||||
// help button for if org not listed
|
||||
// cancel and ok buttons
|
||||
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
Reference in a new issue