flutter - 颤振下拉菜单不是“字符串”类型的子类型
问题描述
我是自学的(即不好)并试图构建一个颤动页面,我从下拉列表(_careCat)中选择一个类别,例如“选项 1”,然后使用 sqlite 的“选项 1”选项填充第二个下拉列表。这部分工作正常。
但是,我为第二个下拉列表检索的数据有 5 列数据,并且通过在下拉列表中选择一个值,我希望能够设置与该数据相关的变量(下拉列表有 dropdownText,但我想引用全文)。我似乎能够获取下拉菜单值以更新选择但无法引用其他数据,或者我能够引用替代数据但无法更新选择,以下是当前阶段我'米在,我得到了错误:
“类型‘CareAdviceOptions’不是‘字符串’类型的子类型”
我希望这是有道理的。任何指针将不胜感激,谢谢。
care_advice_model.dart
class CareAdviceOptions {
int id;
String category;
String shortCode;
String dropdownText;
String fullText;
CareAdviceOptions({
this.id,
this.category,
this.shortCode,
this.dropdownText,
this.fullText
});
Map<String, dynamic> toMap() => {
'id': id,
'category': category,
'shortCode': shortCode,
'dropdownText': dropdownText,
'fullText': fullText,
};
factory CareAdviceOptions.fromJson(Map<String, dynamic> parsedJson) {
return CareAdviceOptions(
id: parsedJson['id'],
category: parsedJson['category'],
shortCode: parsedJson['shortCode'],
dropdownText: parsedJson['dropdownText'],
fullText: parsedJson['fullText'],
);
}
}
db_provider.dart
await db.execute('CREATE TABLE CareAdviceLookup('
'id INTEGER PRIMARY KEY,'
'category TEXT,'
'shortCode TEXT,'
'dropdownText TEXT,'
'fullText TEXT'
')');
Future<List<CareAdviceOptions>> getCareAdviceMenu(String category) async {
final db = await database;
var response = await db.rawQuery("SELECT * from CareAdviceLookup WHERE category = (?) Order by shortCode asc", [category]);
List<CareAdviceOptions> list = await response.map((c) => CareAdviceOptions.fromJson(c)).toList();
return list;
}
care_advice_page.dart
CareAdviceOptions _care;
Container careOptions() {
return Container(
child: FutureBuilder<List<CareAdviceOptions>>(
future:DBProvider.db.getCareAdviceMenu(_careCat),
builder: (BuildContext context, AsyncSnapshot <List<CareAdviceOptions>>snapshot) {
return snapshot.hasData
? Container(
child: DropdownButton<CareAdviceOptions>(
value: _care,
hint: Text(_care ?? 'Make a selection'),
items: snapshot.data.map((CareAdviceOptions item) { return new DropdownMenuItem<CareAdviceOptions>(
value: item,
child: Text('${item.dropdownText}'),);}).toList(),
onChanged: (CareAdviceOptions value) {
_care = value;
var _index = snapshot.data.indexOf(value);
_careInstruction = snapshot.data[_index].fullText;
_careInsSetAs = snapshot.data[_index].dropdownText;
setState(() {
_isOptionSelected = true;
});
},
),
)
: Container(
child: Center(
child: Container(),
),
);
},
),
);
}
解决方案
不确定,但它可能在这一行:提示:文本(_care ??'进行选择'),。当 _care 不为空时,它会尝试将其显示为文本,因此它会尝试将其转换为字符串,并给您一个错误。尝试提示:Text(_care.dropdownText ?? 'Make a selection')
, – BabC 21