我在运行以下代码时遇到了一个错误:

_TypeError (type 'List<dynamic>' is not a subtype of type 'List<DropdownMenuItem<int>>?')

 Widget getDropDownMenu() {
return FutureBuilder(
    future: getOptionList(),
    builder: (BuildContext context, AsyncSnapshot snapshot) {
      if (snapshot.connectionState == ConnectionState.waiting) {
        // While the task is happening, show a loading spinner
        return Center(
          child: CircularProgressIndicator(),
        );
      } else if (snapshot.hasError) {
        // If there's an error, display an error message
        return Center(
          child: Text('Error: ${snapshot.error}'),
        );
      } else {
        return DropdownButtonFormField(
          validator: (value) {
            if (value == 0) {
              return 'Please choose an option from the list';
            }
            return null;
          },
     
          decoration: InputDecoration(
            border:
                OutlineInputBorder(borderRadius: BorderRadius.circular(10)),
          ),
          value: _indicators_field_value,
          items: snapshot.data.map((map) {
            return DropdownMenuItem(
              child: Text(map.name),
              value: map.id,
            );
          }).toList(),
          onChanged: (v) {
            this._indicators_field_value = v!;
          },
        );
      }
    });

}

getOptionList()将从API获取数据并放入模型中. 我从调用这个函数得到的是一个Model列表.List<Model>

我试了好几个小时才决定在这里问.

推荐答案

您必须指定类型,以确保您使用的列表与DropdownMenuItem中的预期类型匹配.要解决这个问题,你可以这样做:

DropdownButtonFormField<int>(  // Changed here
 validator = (value) {
   if (value == 0) {
     return 'Please choose an option from the list';
   }
   return null;
 },
 value = _indicators_field_value,
 items = snapshot.data.map<DropdownMenuItem<int>>((map) {  // Changed here
   return DropdownMenuItem<int>( // Changed here
     value: map.id,
     child: Text(map.name),
   );
 }).toList(),
 onChanged = (v) {
   _indicators_field_value = v!;
 },
);

或者你可以使用List<DropdownMenuItem<int>>.from(...)个,比如:

items: List<DropdownMenuItem<int>>.from(
  snapshot.data.map((item) => DropdownMenuItem<int>(
    value: item.id,
    child: Text(item.name),
  )),
),

Flutter相关问答推荐

Flutter 导致底部溢出

Flutter版本3.19.2需要更新版本的Kotlin Gradle插件./android/build.gradle:ext.kotlin_version = latest-version>'

如何使用新的Riverpod语法将依赖传递给AsyncNotifier?

如何使排内 children 的身高与其他排内 children 的身高相适应?

任务';:app:check DebugDuplicateClasss';的Ffltter Share_plus抛出执行失败

我想创建一个可滚动的堆叠列表项,每个项都朝向屏幕

使用ImageFilter模糊并剪裁同一renderObject中的元素

FittedBox叠加技术在Flutter 中的应用

如何在Flutter 中使用滚动展开窗口小部件

创建仅定义导出的文件是否有意义?

Flutter中pubspec.yaml文件中的name参数是什么?

我可以在列表图块下方添加其他小部件吗

从子集合sem中获取参考学年&&课程名称的值

访问 AsyncSnapshot 中的嵌套属性

无法在 flutter 中更新 void 方法内的变量值

Getx Flutter 在更新值时抛出空错误

如何让多个图标转到不同的网址

我想在数组中添加项目

为什么这个循环只发生一次?Flutter /dart

设计响应式卡片的最佳方法,以避免像素溢出错误或 _AssertionError