flutter - Flutter SQFlite 从数据库中填充下拉列表
问题描述
我正在尝试从我的 SQFlite 数据库中读取下拉列表的列表部分,但不知道如何。
从 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}\'');
}
我可以让它与静态值列表一起使用
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;
},
),
它是表单上几个字段的一部分
解决方案
首先在 a的 ainitState
或 a中使用调用。onPressed
RaisedButton
将此initState
和_loadAnimals
方法放在您的State
小部件中。
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
为返回 aList<String>
而不是 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();
}
推荐阅读
- c++ - MFC 的基于对话框的应用程序标题栏突出显示 Windows 10 上的视觉工件(即 CDialogEx 中的错误)
- google-bigquery - 如何根据确切的时间戳查找数据
- bash - 创建一个从控制台读取变量的脚本,并将这些值替换为用大括号括起来的值
- javascript - 渐进式加载代码片段不太了解
- facebook-graph-api - Instagram 图形 API 的服务器到服务器应用程序审查流程
- r - 编写一个循环来选择变量值的所有组合,在 R 中生成正方程值
- java - 如果实体与多对一或一对一或任何此类关联相关,Spring Data JPA 存储库的 findAll 功能是否会起作用?
- java - 杰克逊反序列化映射空值到空字符串
- android - 如何使 android.net.Uri 在查询参数之间编码 & 到 %26
- azure-devops - 等效于 Azure Devops 中的 teamcity.build.branch.is_default