Flutter SQFlite从数据库中填充一个下拉列表

时间:2018-12-19 00:48:25

标签: flutter

我正在尝试从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;
        },
      ),

它是表单上几个字段的一部分

1 个答案:

答案 0 :(得分:3)

首先使用initState的{​​{1}}或onPressed中的呼叫。

将此RaisedButtoninitState方法放在您的_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而不是List<String>

List<Map>