首页 > 解决方案 > 颤振下拉菜单不是“字符串”类型的子类型

问题描述

我是自学的(即不好)并试图构建一个颤动页面,我从下拉列表(_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(),
            ),
          );
        },
      ),
    );
  }

标签: flutterdartdropdown

解决方案


不确定,但它可能在这一行:提示:文本(_care ??'进行选择'),。当 _care 不为空时,它会尝试将其显示为文本,因此它会尝试将其转换为字符串,并给您一个错误。尝试提示:Text(_care.dropdownText ?? 'Make a selection'), – BabC 21


推荐阅读