#flutter #dart #dropdown
#flutter #dart #выпадающий список
Вопрос:
Я создаю 2 выпадающих списка с возможностью поиска и меняю местами значения выпадающего списка 2 при нажатии кнопки IconButton, значения меняются местами, но пользовательский интерфейс не изменяется, когда я вызываю функцию setState() внутри onPressed() кнопки :
Ниже приведен мой код: зависимости pubspec.yaml: searchable_dropdown: ^ 1.1.3
import 'package:awesome_dialog/awesome_dialog.dart';
import 'package:flutter/material.dart';
import 'package:searchable_dropdown/searchable_dropdown.dart';
class MainDashBoardTab extends StatefulWidget {
@override
_MainDashBoardTabState createState() => _MainDashBoardTabState();
}
class _MainDashBoardTabState extends State<MainDashBoardTab> {
String fromPlaceSelected = "";
String toPlaceSelected = "";
List<String> fromPlaceItemsString = [
"Borivali",
"Kandivali",
"Malad",
"Andheri",
"Dadar"
];
List<String> toPlaceItemsString = [
"Kankavli",
"Pune",
"Solapur",
"Manmad",
"Belgaum",
"Kolhapur"
];
List<DropdownMenuItem> items = [];
List<DropdownMenuItem> items1 = [];
@override
void initState() {
super.initState();
for (int i = 0; i < fromPlaceItemsString.length; i ) {
items.add(DropdownMenuItem(
child: Text(fromPlaceItemsString[i]),
value: fromPlaceItemsString[i],
));
fromPlaceSelected = fromPlaceItemsString[fromPlaceItemsString.length - 1];
}
for (int i = 0; i < toPlaceItemsString.length; i ) {
items1.add(DropdownMenuItem(
child: Text(toPlaceItemsString[i]),
value: toPlaceItemsString[i],
));
toPlaceSelected = toPlaceItemsString[toPlaceItemsString.length - 1];
}
}
fromPlaceWidget() {
return SearchableDropdown.single(
items: items,
value: fromPlaceSelected,
hint: "Select From Place ",
searchHint: "Select From Place",
onChanged: (value) {
setState(() {
fromPlaceSelected = value;
});
},
isExpanded: true,
);
}
toPlaceWidget() {
return SearchableDropdown.single(
items: items1,
value: toPlaceSelected,
hint: "Select To Place",
searchHint: "Select To Place",
onChanged: (value) {
setState(() {
toPlaceSelected = value;
});
},
isExpanded: true,
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
margin: EdgeInsets.all(8),
color: Colors.lightBlue[100],
height: 250,
child: Column(
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Expanded(
flex: 4,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
fromPlaceWidget(),
toPlaceWidget(),
],
),
),
Expanded(
flex: 1,
child: IconButton(
icon: Icon(Icons.swap_vert),
iconSize: 50,
color: Colors.blue,
onPressed: () {
setState(() {
String temp = fromPlaceSelected;
fromPlaceSelected = toPlaceSelected;
toPlaceSelected = temp;
});
},
),
)
],
),
],
),
),
);
}
}
Ответ №1:
Поскольку у вас есть 2 разных списка. Таким образом, даже после замены значений новые значения не отображаются в списках. Вам также придется поменять местами список или, лучше, поменять местами все виджеты.