Чтобы сохранить значение для каждой раскрывающейся кнопки, вы должны создать список String, в котором вы можете хранить.
Следующий код поможет вам понять больше.
class RepeatableSection extends StatefulWidget {
@override
_RepeatableSectionState createState() => _RepeatableSectionState();
}
class _RepeatableSectionState extends State<RepeatableSection> {
Widget extractedChildren;
int _index = 0;
List<String> _mySelection = [];
List data = List();
Future<void> fetchAPI() async {
var url = "http://webmyls.com/php/getdata.php";
Map<String, String> headers = {
'Content-type': 'application/json',
'Accept': 'application/json',
};
final response = await http.post(url, headers: headers);
final responseJson = json.decode(response.body);
print(data);
if (response.statusCode == 200) {
setState(() {
data = responseJson;
});
} else {
setState(() {});
throw Exception('Failed to load internet');
}
}
@override
void initState() {
super.initState();
this.fetchAPI();
}
Widget build(BuildContext context) {
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: _index > 0
? ListView.builder(
itemCount: _index,
shrinkWrap: true,
itemBuilder: (_, index) {
return Column(
key: Key("$index"),
children: <Widget>[
Text(index.toString()),
DropdownButton(
hint: Text('Choose..'),
items: data.map((item) {
return new DropdownMenuItem(
child: new Text(item['item_name']),
value: item['id'].toString(),
);
}).toList(),
onChanged: (newVal) {
setState(() {
print("object");
_mySelection[index] = newVal;
});
},
value: _mySelection[index],
),
],
);
},
)
: Container())
],
),
),
RaisedButton(
child: Text('Add'),
onPressed: () {
setState(() {
_index++;
_mySelection.add(null);
});
// add();
},
),
],
),
);
}
}