【问题标题】:Expected a value of type 'List<DropdownMenuItem<Project$>>?', but got one of type 'List<dynamic>'预期类型为“List<DropdownMenuItem<Project$>>?”的值,但得到类型为“List<dynamic>”的值之一
【发布时间】:2021-05-29 01:28:14
【问题描述】:

我正在尝试在 FutureBuilder 中构建 Projects 列表的下拉按钮,但收到错误:

Expected a value of type 'List&lt;DropdownMenuItem&lt;Project$&gt;&gt;?', but got one of type 'List&lt;dynamic&gt;'

我了解错误及其发生位置,但我不明白为什么它不会返回 List&lt;DropdownMenuItem&gt;,所以我似乎无法弄清楚如何在 Dart 中修复它。

违规代码:

@override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: _futureProjects,
      builder: (BuildContext context, AsyncSnapshot snapshot) {
        if (snapshot.hasData) {
          return Column(children: [   
            Text('Project:'),
            new DropdownButton<Project>(
              value: _selectedProject,
              items: snapshot.data
                  .map((value) => new DropdownMenuItem<String>(
                        value: value.name,
                        child: Text(value.name),
                      ))
                  .toList(),
            ),
        } else {
          // ...

_futureProjects 通过 http:

填充
Future<List<Project>> getJiraProjectsList() async {
    final response = await http.get(url + 'jira/projects');

    if (response.statusCode == 200) {
      var jsonData = jsonDecode(response.body);
      List<Project> projects = [];

      for(var data in jsonData){
        Project proj = Project.fromJson(data);
        projects.add(proj);
      }

      return projects;
    } else {
      throw Exception('Failed to load Projects List');
    }
  }

任何帮助我解决这个问题将不胜感激

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您可以使用AsyncSnapshot&lt;List&lt;Project&gt;&gt;DropdownMenuItem&lt;Project&gt;,如下例所示:

    FutureBuilder(
        future: _futureProjects,
        builder: (BuildContext context, AsyncSnapshot<List<Project>> snapshot) {
          if (snapshot.hasData) {
            return Column(children: [
              Text('Project:'),
              DropdownButton<Project>(
                value: snapshot.data[0],
                onChanged: (value) {},
                items: snapshot.data
                    .map((project) => DropdownMenuItem<Project>(
                          value: project,
                          child: Text(project.name),
                        ))
                    .toList(),
              ),
            ]);
          } else {
            return Text('... waiting');
          }
        })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-02
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 2019-11-07
      • 2021-11-05
      • 2021-10-30
      • 1970-01-01
      相关资源
      最近更新 更多