我正在开发一个带有Ffltter的移动应用程序.我正在为申请准备一个注册页面.在注册页面上,我想要获得用户居住的城市和县.我放了两个DropdownButtonForm
的这个.
在用户 Select 第一个DropdownButtonForm
中的城市后,第二个DropdownButtonForm
将具有县选项.我可以用下面的代码做到这一点:
List<DropdownMenuItem<String>> kahramanmarasDistricts = [
const DropdownMenuItem(
value: "Onikişubat",
child: Text("Onikişubat"),
),
const DropdownMenuItem(
value: "Dulkadiroğlu",
child: Text("Dulkadiroğlu"),
),
const DropdownMenuItem(
value: "Elbistan",
child: Text("Elbistan"),
),
const DropdownMenuItem(
value: "Afşin",
child: Text("Afşin"),
),
const DropdownMenuItem(
value: "Türkoğlu",
child: Text("Türkoğlu"),
),
const DropdownMenuItem(
value: "Pazarcık",
child: Text("Pazarcık"),
),
const DropdownMenuItem(
value: "Göksun",
child: Text("Göksun"),
),
const DropdownMenuItem(
value: "Andırın",
child: Text("Andırın"),
),
const DropdownMenuItem(
value: "Çağlayancerit",
child: Text("Çağlayancerit"),
),
const DropdownMenuItem(
value: "Nurhak",
child: Text("Nurhak"),
),
const DropdownMenuItem(
value: "Ekinözü",
child: Text("Ekinözü"),
),
];
List<DropdownMenuItem<String>> diyarbakirDistricts = [
const DropdownMenuItem(
value: "Bağlar",
child: Text("Bağlar"),
),
const DropdownMenuItem(
value: "Bismil",
child: Text("Bismil"),
),
const DropdownMenuItem(
value: "Çermik",
child: Text("Çermik"),
),
const DropdownMenuItem(
value: "Çınar",
child: Text("Çınar"),
),
const DropdownMenuItem(
value: "Çüngüş",
child: Text("Çüngüş"),
),
const DropdownMenuItem(
value: "Dicle",
child: Text("Dicle"),
),
const DropdownMenuItem(
value: "Egir",
child: Text("Eğir"),
),
const DropdownMenuItem(
value: "Ergani",
child: Text("Ergani"),
),
const DropdownMenuItem(
value: "Hani",
child: Text("Hani"),
),
const DropdownMenuItem(
value: "Hazro",
child: Text("Hazro"),
),
const DropdownMenuItem(
value: "Kayapınar",
child: Text("Kayapınar"),
),
const DropdownMenuItem(
value: "Hocaköy",
child: Text("Hocaköy"),
),
const DropdownMenuItem(
value: "Kulp",
child: Text("Kulp"),
),
const DropdownMenuItem(
value: "Lice",
child: Text("Lice"),
),
const DropdownMenuItem(
value: "Silvan",
child: Text("Silvan"),
),
const DropdownMenuItem(
value: "Sur",
child: Text("Sur"),
),
const DropdownMenuItem(
value: "Yenişehir",
child: Text("Yenişehir"),
),
];
List<DropdownMenuItem<String>> citys = [
const DropdownMenuItem(
value: "Kahramanmaraş",
child: Text("Kahramanmaraş"),
),
const DropdownMenuItem(
value: "Diyarbakır",
child: Text("Diyarbakır"),
),
];
// ...
SelectCityDropDownField(),
SelectDistrictDropDownField(),
Widget SelectCityDropDownField() {
return Theme(
data: Theme.of(context).copyWith(
colorScheme: ThemeData().colorScheme.copyWith(
primary: Colors.red,
),
),
child: DropdownButtonFormField(
decoration: InputDecoration(
prefixIcon: const Icon(
Icons.location_city,
color: Color(0xFFCB3126),
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(50),
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(50),
borderSide: const BorderSide(
color: Color(0xFFCB3126),
),
),
),
items: citys
.map(
(e) => DropdownMenuItem<String>(
value: e.value,
child: e.child,
),
)
.toList(),
onChanged: (value) {
setState(() {
selectedCity = value.toString();
});
},
),
);
}
Widget SelectDistrictDropDownField() {
return Theme(
data: Theme.of(context).copyWith(
colorScheme: ThemeData().colorScheme.copyWith(
primary: Colors.red,
),
),
child: DropdownButtonFormField(
decoration: InputDecoration(
prefixIcon: const Icon(
Icons.location_city,
color: Color(0xFFCB3126),
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(50),
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(50),
borderSide: const BorderSide(
color: Color(0xFFCB3126),
),
),
),
items: districtsItem(),
onChanged: (value) {
setState(() {
selectedDistrict = value.toString();
});
},
),
);
}
districtsItem() {
switch (selectedCity) {
case "Kahramanmaraş":
return kahramanmarasDistricts;
case "Diyarbakır":
return diyarbakirDistricts;
}
}
我对一些事情有意见.问题是这样的:例如,让我们 Select Kahramanmaraş
人的省份,并 Select Elbistan
作为区.然后,当我将城市更改为Diyarbakır
时,它会给出一个错误.换句话说,当我在 Select 了地区之后 Select 了一个不同的省份时,我会得到一个错误.这是错误的;
The following assertion was thrown building Builder(dirty, dependencies: [_FocusMarker]):
There should be exactly one item with [DropdownButtonFormField]'s value: Çermik.
Either zero or 2 or more [DropdownMenuItem]s were detected with the same value
'package:flutter/src/material/dropdown.dart':
Failed assertion: line 939 pos 15: 'items == null || items.isEmpty || value == null ||
items.where((DropdownMenuItem<T> item) {
return item.value == value;
}).length == 1'
我怎么才能解决这个问题呢?首先要感谢你的帮助.