微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

flutter中如何使用函数的返回来填充一个DropDownMenu?

如何解决flutter中如何使用函数的返回来填充一个DropDownMenu?

我有这个方法返回一个列表,其中包含来自 api 的项目,我想用它来填充下拉菜单

data.map((item) {
   return DropdownMenuItem(
            child: Text(
            item['animals_id']),value: item['animals_id'],);
            }).toList(),

我用来从 api 填充该列表的有问题的方法

getIaDetailsByAnimalID() async {
    var response = await http.get(
        Uri.parse(URL +
            '/apI/Optifarm.ia_detail/?query={animals_id,name,order_animal,date_animal,date_identification_animal,sexe_animal,choix,sur_chaleur,prix,product_id}'),headers: {'Cookie': 'session_id=${v.session}'});
    List<IaDetails> data = [];
    var mJson = json.decode(response.body)['result'];
    if (response.statusCode == 200) {
      for (var item in mJson) {
        data.add(IaDetails.fromJson(item));
      }
      return data;
    }
  }

我想在这个“List data = [];”中使用相同的数据填充下拉菜单

我对 dart/Flutter 开发还是个新手,所以我感谢您提供的任何帮助

解决方法

您的下拉列表是否基于有状态小部件?如果是,将数据存储为状态的属性,然后在 setState 回调中更新它。

这些方法应该对您有用:

class DropDownMenu extends StatefulWidget {
  const DropDownMenu({Key? key}) : super(key: key);

  @override
  _DropDownMenuState createState() => _DropDownMenuState();
}

class _DropDownMenuState extends State<DropDownMenu> {
  List<IaDetails> data = [];

  @override
  Widget build(BuildContext context) {
    return Column(
      children: data.map((item) {
        return DropdownMenuItem(
          child: Text(item['animals_id']),value: item['animals_id'],);
      }).toList(),);
  }

  void getIaDetailsByAnimalID() async {
    var response = await http.get(
        Uri.parse(URL +
            '/api/optifarm.ia_detail/?query={animals_id,name,order_animal,date_animal,date_identification_animal,sexe_animal,choix,sur_chaleur,prix,product_id}'),headers: {'Cookie': 'session_id=${v.session}'});
    List<IaDetails> newData = [];
    var mJson = json.decode(response.body)['result'];
    if (response.statusCode == 200) {
      for (var item in mJson) {
        newData.add(IaDetails.fromJson(item));
      }

      // Updating this.data within setState will rebuild the 
      // widget tree based on the new data.
      setState(() {
        data = newData;
      });
    }
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。