【问题标题】:Flutter Dropdown Menu <Model> is not a subtype of type 'String'Flutter Dropdown Menu <Model> 不是“String”类型的子类型
【发布时间】:2021-05-27 15:08:01
【问题描述】:

我是自学成才(即不好)并尝试构建一个颤动页面,从而我从下拉列表(_careCat)中选择一个类别,例如“选项 1”,然后使用 sqlite 中的“选项 1”选项填充第二个下拉列表。这部分工作正常。

但是,我为第二个下拉列表检索的数据有 5 列数据,并且通过在下拉列表中选择一个值,我希望能够设置与该数据相关的变量(下拉列表有 dropdownText,但我想引用 fullText)。我似乎能够获取下拉菜单值以更新选择但无法引用其他数据,或者我能够引用替代数据但无法更新选择,以下是当前阶段我' m at 我得到了错误:

“类型'CareAdviceOptions'不是类型'String'的子类型”

我希望这是有道理的。任何指点将不胜感激,谢谢。

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(),
            ),
          );
        },
      ),
    );
  }

【问题讨论】:

  • 不确定,但可能在这一行:hint: Text(_care ?? 'Make a selection'),。当_care 不为空时,它会尝试将其显示为文本,因此它会尝试将其转换为字符串,并给您一个错误。试试hint: Text(_care.dropdownText ?? 'Make a selection'),
  • 谢谢,这可能是一个指针...我仍然有一个错误,但现在删除这一行会给我一个错误“应该只有一个项目具有 [DropdownButton] 的值:'的实例CareAdviceOptions'。"
  • 这似乎修复了它,虽然它可能是一个肮脏的修复,感谢指针。 hint: _care != null ? Text(_care.dropdownText) : Text('Make a selection') ,

标签: flutter dart dropdown


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-10-02
    • 2021-05-06
    • 2021-10-06
    • 1970-01-01
    • 2023-01-26
    • 2021-07-18
    • 2021-07-10
    • 2020-08-01
    • 2020-10-19
    相关资源
    最近更新 更多