Gere is my goal : I click add button then add dropdown button which its item is fetch from API.
Here is my problem :
I select dropdown value, but NO VALUE is selected.
I click add button, then previous value is filled on new added dropdown button.
Here is my code (full)
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
class RepeatableSection extends StatefulWidget {
@override
_RepeatableSectionState createState() => _RepeatableSectionState();
}
class _RepeatableSectionState extends State<RepeatableSection> {
List<Widget> extractedChildren = <Widget>[];
int _index = 1;
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);
if (response.statusCode == 200) {
setState(() {
data = responseJson;
});
} else {
setState(() {});
throw Exception('Failed to load internet');
}
}
@override
void initState() {
this.fetchAPI();
}
Widget build(BuildContext context) {
return Column(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: extractedChildren,
),
RaisedButton(
child: Text('Add'),
onPressed: () {
add();
},
),
],
);
}
void add() {
int keyValue = _index;
extractedChildren = List.from(extractedChildren)
..add(Column(
key: Key("$keyValue"),
children: <Widget>[
Text(keyValue.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(() {
_mySelection = newVal;
});
},
value: _mySelection,
),
],
));
setState(() => ++_index);
}
}
List<Widget> extractedChildren. You can change its type. You should not keep any reference to any widget in the variables in your class (fields).