首页 > 解决方案 > 将列表从 Json 放入下拉按钮

问题描述

我正在尝试将列表(来自 json)放入下拉列表中,但我不知道该怎么做,尝试了一些方法但无法使其工作。

我有这个列表和这个函数来从 api 中检索数据:

(我在 initstate 上运行的 loadFuncionarios,所以当我加载屏幕时,我已经有数据可以放在下拉列表中)

  List funcionariosList = <Funcionarios>[];

  Future loadFuncionarios() async {
    Response response;
    Dio dio = new Dio();
    String url = 'http://192.168.15.4:8090/api/funcionarios';
    response = await dio.post(url);

    FuncionariosList funcionariosList =
        FuncionariosList.fromJson(response.data);
    print(funcionariosList.funcionarios[0].nome);//Just a test
    print(funcionariosList.funcionarios.length);
  }

我有这个下拉列表:

DropdownButton(
                    isExpanded: true,
                    iconEnabledColor: Colors.blue[900],
                    value: _value,
                    items: [
                      DropdownMenuItem(
                        child: Text("Test"),
                        value: 1,
                      ),
           
                    ],
                    onChanged: (value) {
                      setState(() {
                        _value = value;
                      });
                    }),

我的列表 os Funcionarios 有一个字符串 Nome,我想将它作为下拉列表的 itens,我该怎么做?

标签: flutter

解决方案


要访问数据,您必须将列表映射到项目中:

items: funcionariosList.map((funcionario) => DropdownMenuItem()).toList();

您可以将 'funcionario' 更改为您喜欢的任何名称。现在,您可以使用点表示法访问每个项目的数据(例如 funcionario.name);

FutureBuilder<List<Functionario>>(
  future: loadFunctionarios();
  builder: (context, snapshot) {
  functionariosList = snapshot.data == null ? List<Functionario>() : snapshot.data;
    DropdownButton(
                isExpanded: true,
                iconEnabledColor: Colors.blue[900],
                value: _value,
                items: funcionariosList.map((funcionario) => DropdownMenuItem()).toList();
                onChanged: (value) {
                  setState(() {
                    _value = value;
                  });
                }),
  });

另外,将您的功能更改为:

  Future<List<Functionario>> loadFuncionarios() async {
Response response;
Dio dio = new Dio();
String url = 'http://192.168.15.4:8090/api/funcionarios';
response = await dio.post(url);

print(funcionariosList.funcionarios[0].nome);//Just a test
print(funcionariosList.funcionarios.length);

return FuncionariosList.fromJson(response.data);
}

我假设该模型称为 Functionario。


推荐阅读