我正在尝试在 FutureBuilder 中构建 Project
列表的下拉按钮,但收到错误:
Expected a value of type 'List<DropdownMenuItem<Project$>>?', but got one of type 'List<dynamic>'
我了解错误及其发生的位置,但我不明白为什么它不会返回 List<DropdownMenuItem>
,所以我似乎无法弄清楚如何在 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');
}
}
如果能帮助我解决这个问题,我将不胜感激
答案 0 :(得分:0)
您可以在以下示例中使用 AsyncSnapshot<List<Project>>
和 DropdownMenuItem<Project>
:
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');
}
})