Dropdown值不能设置为空

问题描述 投票:0回答:2

我实现了两个下拉菜单。当我选择州和地区时,它工作正常。当我更改状态时,它显示我一个错误。在getDistricts()方法中将区域下拉列表值设置为null。请帮助并提前致谢。

在控制台中收到此错误:

应该只有一个项目具有[DropdownButton]的值:1。检测到零或2个或更多[DropdownMenuItem]相同值'package:flutter / src / material / dropdown.dart':失败断言:828行pos 15:'items == null || items.isEmpty ||值==空|| items.where(((DropdownMenuItem item){返回item.value==值; })。length == 1'

class AddAddress extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return AddAddressPage();
  }
}

class AddAddressPage extends StatefulWidget {
  @override
  _AddAddressPageState createState() => _AddAddressPageState();
}

class _AddAddressPageState extends State<AddAddressPage> {
  bool loader = false;
  int intState;
  int intDistrict;
  List<Location> districts=listDistricts;
  List<Location> states=listStates;
  getDistricts()async{
    setState(() {
      loader=false;
    });
  List<Location> district= await service.getDistrictsByStateId(intState);
   setState(() {
     districts=district;
      loader=false;
    });
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Address"),
        backgroundColor: Colors.white,
        centerTitle: true,
      ),
      body: Stack(
        children: <Widget>[
          SingleChildScrollView(
            child: Padding(
              padding: const EdgeInsets.only(top: 10.0, left: 30, right: 30),
              child: Form(
                child: Container(
                  child: Column(
                    children: <Widget>[
                      Padding(
                        padding: const EdgeInsets.only(top: 15.0),
                        child: DropdownButtonFormField<int>(
                            decoration: InputDecoration(
                              contentPadding:
                                  const EdgeInsets.only(left: 30, right: 10),
                              border: OutlineInputBorder(
                                  borderRadius:
                                      BorderRadius.all(Radius.circular(15))),
                            ),
                            hint: Text('state'),
                            value: intState,
                            items: states.map((location) {
                              return new DropdownMenuItem<int>(
                                child: Text(location.name),
                                value: location.id,
                              );
                            }).toList(),
                            onChanged: (int value) {
                              setState(() {
                                intState = value;
                             intDistrict=null;
                              getDistricts();
                              });

                            }),
                      ),
                     Padding(
                        padding: const EdgeInsets.only(top: 15.0),
                        child: DropdownButtonFormField<int>(
                            decoration: InputDecoration(
                              contentPadding:
                                  const EdgeInsets.only(left: 30, right: 10),
                              border: OutlineInputBorder(
                                  borderRadius:
                                      BorderRadius.all(Radius.circular(15))),
                            ),
                            hint: Text(' district'),
                            value: intDistrict,
                            items: districts.map((location) {
                              return new DropdownMenuItem<int>(
                                child: Text(location.name),
                                value: location.id,
                              );
                            }).toList(),
                            onChanged: (int value) {
                              intDistrict = value;
                            }),
                      ),

                    ],
                  ),
                ),
              ),
            ),
          ),
          ProgressLoader(
            loader: loader,
          )
        ],
      ),
    );
  }
}

this is happening

flutter dart dropdown
2个回答
0
投票

[我认为问题在于,当您选择新状态时,您只是将inDiDistrict值设置为null,而District下拉列表具有dropdownitems,因此我认为如果您在将intDistrict设置为null之前清除了分区,则它应该可以工作。

 onChanged: (int value) {
            setState(() {
          intState = value;
          districts.clear(); // added line
          intDistrict=null;
          getDistricts();
      });
    }),

0
投票

感谢您的帮助。我发现了问题。由于我在dropdown.dart文件中升级了flutter SDK(而不是稳定的SDK),因此与以前的版本有所不同。因此,我与稳定的SDK进行了比较并修改了文件。感谢您的时间和帮助。

© www.soinside.com 2019 - 2024. All rights reserved.