class _AutoCompleteDemoState extends State < AutoCompleteDemo > {
AutoCompleteTextField searchTextField;
List < DoAwaitedList > doawaitedlist;
String query = '';
TextEditingController tc;
bool loading = true;
List < DoAwaitedList > autocomFromJson(String str) =>
List < DoAwaitedList > .from(
json.decode(str).map((x) => DoAwaitedList.fromJson(x)));
String payloadToJson(List < DoAwaitedList > data) =>
json.encode(List < dynamic > .from(data.map((x) => x.toJson())));
Future < List < DoAwaitedList >> requestMethodtest() async {
var url = "";
var body = json.encode({ });
Map < String, String > headers = {
'Content-type': 'application/json',
'Accept': 'application/json',
};
final response = await http.post(url, body: body, headers: headers);
final responseJson = json.decode(response.body);
setState(() {
loading = true;
doawaitedlist = autocomFromJson(response.body);
loading = false;
});
if (response.statusCode == 200) {
print('USerrrlist$responseJson');
} else {
throw Exception('Failed to load internet');
}
return doawaitedlist;
}
@override
void initState() {
requestMethodtest();
super.initState();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
resizeToAvoidBottomInset: false, // set it to false
resizeToAvoidBottomPadding: false,
appBar: new AppBar(
iconTheme: IconThemeData(
color: Colors.white, //change your color here
),
title: new Text('AutoComplte'),
backgroundColor: Color(getColorHexFromStr("#00324B")),
),
body: Container(
child: Column(
children: < Widget > [
new AutoCompleteTextField < > (
decoration: new InputDecoration(
hintText: "Search:",
suffixIcon: new Icon(Icons.search)),
itemSubmitted: (item) => setState(() => selected = item),
key: key,
suggestions: suggestions,
itemBuilder: (context, suggestion) => new Padding(
child: new ListTile(
title: new Text(suggestion.name),
),
padding: EdgeInsets.all(8.0)),
itemSorter: (a, b) => a.stars == b.stars ? 0 : a.stars > b.stars ? -1 : 1,
itemFilter: (suggestion, input) =>
suggestion.name.toLowerCase().startsWith(input.toLowerCase()),
),
Expanded(
child: Center(
child: loading && doawaitedlist == null ?
ListTile(
title: Text('Loading...'),
leading: Center(child: CircularProgressIndicator()),
) :
doawaitedlist == null ?
ListTile(
title: Text('Loading...'),
leading: Center(child: CircularProgressIndicator()),
) :
ListView.builder(
shrinkWrap: true,
itemCount: doawaitedlist == null ? 0 : doawaitedlist[0].rows.length,
itemBuilder: (context, index) {
},
),
),
),
],
),
),
);
}
}
class DoAwaitedList {
int status;
String msg;
List < Rows > rows;
String sql;
dynamic reserved;
DoAwaitedList({
this.status,
this.msg,
this.rows,
this.sql,
this.reserved,
});
factory DoAwaitedList.fromJson(Map < String, dynamic > json) => DoAwaitedList(
status: json["status"],
msg: json["msg"],
rows: List < Rows > .from(json["rows"].map((x) => Rows.fromJson(x))),
sql: json["sql"],
reserved: json["reserved"],
);
Map < String, dynamic > toJson() => {
"status": status,
"msg": msg,
"rows": List < dynamic > .from(rows.map((x) => x.toJson())),
"sql": sql,
"reserved": reserved,
};
}
class Rows {
String CustName;
String CustCode;
Rows({
this.CustName,
this.CustCode,
});
factory Rows.fromJson(Map < String, dynamic > json) => Rows(
CustName: json["CustName"],
CustCode: json["CustCode"],
);
Map < String, dynamic > toJson() => {
"CustName": CustName,
"CustCode": CustCode,
};
}
Я хочу реализовать автозаполнение данных отображения текстового поля из вызова API (т. Е. json данные) в списке в качестве подсказок, когда пользователь вводит текстовое поле. Отображаемые предложения должны основываться на идентификаторе, связанном с отображаемым текстом. Почему-то мне не удается добиться отображения данных в пользовательском интерфейсе и того, как построить иерархию виджетов, которые будут отображать предложения в списке. Не уверен, что мне здесь не хватает. В поисках руководства. Конечный результат, которого я хочу достичь - Любая помощь приветствуется. [! [
Json snippet:
[{
"status": 200,
"msg": "Ok",
"refcode": -1,
"trows": 771,
"rows": [{
"CustName": "ELECTRICALS SYSTEM",
"CustCode": "1F",
},
{
"CustName": "ELECTRICALS",
"CustCode": "2R",
},
{
"CustName": "GABL CFH",
"CustCode": "2T",
}
],
"sql": "User",
"reserved": null
}]