我实现了两个下拉列表。当我选择州和地区时,它工作得很好。当我更改状态时,它显示错误。在getDistricts()方法中设置区域下拉列表值为空。请帮助并提前表示感谢。
在控制台得到此错误:
应该只有一个项目具有[DropdownButton]的值:1.检测到零个或2个或更多个[DropdownMenuItem]具有相同值“package:flutter/src/material/dropple. dart”:Assert失败:第828行位置15:'项目== null|| items.isEmpty ||value == null|| items.where((DropdownMenuItem item){ return item.value == 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,
)
],
),
);
}
}
字符串
x1c 0d1x的数据
4条答案
按热度按时间b1zrtrql1#
我认为问题是,当你选择新的状态时,你只是将intDistrict值设置为null,而District下拉列表中有dropdownitems,所以我认为如果你在将intDistrict设置为null之前清除District,那么它应该可以工作。
字符串
1tu0hz3e2#
对于任何人来说,您需要为您的地区设置默认值。因此(1)dropdown永远不会为空,(2)如果地区来自,则dropdown值将始终匹配至少1个项目的值,例如API作为空数组。
字符串
7y4bm7vi3#
但是如果我们需要使用String myItem;因此value:myItem将为null以允许使用提示:Text('select ')?我们不能使用一个没有初始化的字符串,所以不能为null,但同时提示只有在value = myItem为null时才有效。我不明白。
ppcbkaq54#
谢谢你们的帮忙。我发现了这个问题。自从我升级了flutter SDK(不是稳定的SDK)在dallow.dart文件中战神一些变化。所以我对比了稳定版SDK并修改了文件。谢谢你的时间和帮助伙计们。