我试图从API中检索数据,以显示在下拉列表中,但是出现了一个错误,我尝试根据我在google和论坛上寻找的内容进行了尝试,但问题仍然出现。我的代码写错了吗,谢谢
--这是调用api时执行的函数,响应为200。
class UtilFunction {
String? _valMenu;
var _dataMenu = [];
Future getSemester() async {
String url = Constant.baseURL;
String token = await UtilSharedPreferences.getToken();
final respose = await http.get(
Uri.parse(
'$url/auth/semester/get_smt',
),
headers: {
'Authorization': 'Bearer $token',
},
);
await http
.get(
Uri.parse(
'$url/auth/semester/get_smt',
),
)
.then((value) => (() {
// respose = value; //untuk melakukan request ke webservice
var listData =
jsonDecode(respose.body); //lalu kita decode hasil datanya
_dataMenu = listData['data'];
_valMenu = _dataMenu[0]['data'];
}));
print(respose.statusCode);
print(respose.body);
return _dataMenu;
}
}和我在这里接受上面的函数。
Container(
child: FutureBuilder(
future: UtilFunction().getSemester(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
DropdownButtonFormField(
value: _valMenu,
onChanged: (value) {},
items: snapshot.data
.map<DropdownMenuItem>(
(project) => DropdownMenuItem(
value: project['smt'],
child: Text(project['smt']),
))
.toList,
), ...这个响应json
{
"status": "success",
"code": "200",
"data": [
{
"id": "254dd6e9-791e-4a2b-959e-6ec5929f3104",
"id_ta": "2b4d2dd1-ef8e-461b-b7c3-48409a13969e",
"ta": "2022-2023",
"smt": "GANJIL",
"semester": "2022-2023 GANJIL",
"periode_awal": "Senin, 01 Agustus 2022",
"periode_akhir": "Minggu, 22 Januari 2023",
"p_awal": "2022-08-01",
"p_akhir": "2023-01-22",
"period_smt": "Senin, 01 Agustus 2022 - Minggu, 22 Januari 2023",
"created_at": "2022-08-10 05:02:18",
"updated_at": "2022-09-06 03:57:00",
"created_by": "Superadmin",
"updated_by": "Dasep",
"sts_hapus": 1
}
]
}发布于 2022-11-08 11:20:42
在获取数据和如何打印数据方面存在一些问题。我使用了公共api,您可以更改url。
class UtilFunction {
String? _valMenu;
List<String> _dataMenu = [];
Future getSemester() async {
await http.get(Uri.parse("http://universities.hipolabs.com/search?country=United+States")).then((value) {
// respose = value; //untuk melakukan request ke webservice
var listData = jsonDecode(value.body); //lalu kita decode hasil datanya
for (var i = 0; i < 10; i++) {
_dataMenu.add(listData[i]["domains"][0]);
}
_valMenu = _dataMenu[0];
});
return _dataMenu;
}
}此外,我在FutureBuilder中做了一些修改。请注意,还需要更改api调用的返回类型,以提供下拉值的第一个元素。
FutureBuilder(
future: UtilFunction().getSemester(),
builder: (context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
val = snapshot.data[0];
return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
DropdownButton<String>(
value: val,
onChanged: (value) {
val = value!;
},
items: snapshot.data
.map<DropdownMenuItem<String>>((String project) => DropdownMenuItem<String>(
value: project,
child: Text(project),
))
.toList(),
),
]);
} else {
return Text("dsds");
}
})发布于 2022-11-08 04:27:28
将List<DropdownMenuItem>更改为List<DropdownMenuItem<String>>
snapshot.data
.map<DropdownMenuItem<String>>(
(project) => DropdownMenuItem<String>(
value: project['smt'],
child: Text(project['smt']),
))
.toList()也是在解码中试试这个
var listData = jsonDecode(respose.body); as Map<String, dynamic>
if(listData.containsKey('data')){
_dataMenu = listData['data'];
_valMenu = _dataMenu[0]['data'];
} else {
// HANDLE NO DATA SCENARIO
}
}https://stackoverflow.com/questions/74355454
复制相似问题