Flutter SQFlite从数据库填充一个下拉列表 [英] Flutter SQFlite populate a dropdown list from the database
本文介绍了Flutter SQFlite从数据库填充一个下拉列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试从我的SQFlite数据库中读取下拉列表的列表部分,但无法解决.
I am trying to read the list part of a dropdown list from my SQFlite database, and can't work out how.
从database_helper查询
Query from database_helper
Future<List<Map>> getFieldData(String animal, String fieldName)
var dbClient = await db;
return await dbClient.rawQuery('SELECT lbOption FROM jkAssessData Where lbAnimal = \'${animal}\' AND lbField = \'${fieldName}\'');
}
我可以将其与静态值列表一起使用
I can get it to work with a static list of values
final List<String> _animals = <String>['CATTLE', 'SHEEP', 'GOAT'];
填充此下拉列表
FormField<String>(
builder: (FormFieldState<String> state) {
return InputDecorator(
decoration: InputDecoration(
labelText: 'Animal Type',
errorText: state.hasError ? state.errorText : null,
),
isEmpty: _animal == '',
child: DropdownButtonHideUnderline(
child: DropdownButton<String>(
value: _animal,
isDense: true,
onChanged: (String newValue) {
setState(() {
assessHed.asAnimal = newValue;
_animal = newValue;
state.didChange(newValue);
});
},
items: _animals.map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
),
),
);
},
validator: (val) {
//return val != 'SUMMARY' ? 'DETAIL' : 'Please select Type';
return null;
},
),
它是表单上几个字段的一部分
It's part of several fields on a Form
推荐答案
首先使用 initState
或 RaisedButton
.
将此 initState
和 _loadAnimals
方法放在您的 State
小部件中.
Place this initState
and _loadAnimals
method in your State
Widget.
List<String> _animals = <String>[];
@override
initState() {
super.initState();
// when loading your widget for the first time, loads animals from sqflite
_loadAnimals();
}
_loadAnimals() async {
// gets data from sqflite
final loadedAnimals = await getFieldData('CATTLE','Breed1');
setState(() {
// converts sqflite row data to List<String>, updating state
_animals = loadedAnimals.map((Map<dynamic, dynamic> row) => row["lbOption"] as String).toList();
});
}
或者您可以更改 getFieldData
以返回 List< String>
而不是 List< Map>
:
Or you could change the getFieldData
to return a List<String>
instead of a List<Map>
:
Future<List<String>> getFieldDataAsString(String animal, String fieldName) async {
var dbClient = await db;
var results = await dbClient.rawQuery('SELECT lbOption FROM jkAssessData Where lbAnimal = \'$animal\' AND lbField = \'$fieldName\'');
return results.map((Map<String, dynamic> row) {
return row["lbOption"] as String;
}).toList();
}
这篇关于Flutter SQFlite从数据库填充一个下拉列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文