我想在動態陣列中使用 where 方法。我從 api 獲取資料,我想在 where 方法的幫助下從回應中找到一些資料。
以下是 api 的回應。
[
{
'status': true,
'result': 'found',
'data': [
{
'id': 10676487174744,
'name': 'Taki Rajani',
'email': '[email protected]',
'isAdmin': false,
'description': 'ta rai'
},
{
'id': 1172269813061229,
'name': 'Aar Raj',
'email': '[email protected]',
'isAdmin': false,
'description': 'test'
},
{
'id': 12854121,
'name': 'testing',
'email': '[email protected]',
'isAdmin': false,
'description': 'details'
}
]
}
]
以下是我用于查找存盤在 storeUserID 變數中的相同用戶 ID 的代碼。
2個問題:- 1)當我列印用戶串列時,我得到了案例3資料中的所有資料,但是當我列印此串列的長度時,回應顯示 count only 1。2)“where”方法在列印上沒有顯示任何內容可能不起作用。
Future<GetUserData> getUserDetail() async {
var url = "https://aeliya.mydomin.com/getUser.php";
var response = await http.get(Uri.parse(url));
var jsondata = jsonDecode(response.body.toString());
List listOfUser = [];
if (response.statusCode == 200) {
//print(jsondata);
listOfUser.add(jsondata);
print(listOfUser);
print(listOfUser.length);
var findid = listOfUser.where((element) => element == storeUserID);
print(findid);
return GetUserData.fromJson(jsondata);
} else {
return GetUserData.fromJson(jsondata);
}
uj5u.com熱心網友回復:
您的 api 回應包含一個串列,其中資料包含您想要的串列。所以改變這個:
if (response.statusCode == 200) {
//print(jsondata);
listOfUser.add(jsondata);
print(listOfUser);
print(listOfUser.length);
var findid = listOfUser.where((element) => element == storeUserID);
print(findid);
return GetUserData.fromJson(jsondata);
} else {
return GetUserData.fromJson(jsondata);
}
對此:
if (response.statusCode == 200) {
print(jsondata['data']);
print(jsondata['data'].length);
var findid = (jsondata['data'] as List)
.where((element) => element['id'] == 1172269813061229);
print(findid);
return GetUserData.fromJson(jsondata['data']);
} else {
return GetUserData.fromJson(jsondata['data']);
}
uj5u.com熱心網友回復:
當我列印此串列的長度時,回應顯示僅計數 1
這是因為listOfUser.add(jsondata);您在這里添加了整個回應體。并且您的回應正文是 1 個物件。
“where”方法在列印上沒有顯示任何內容可能不起作用。
你的串列不是一個User串列,這就是為什么element == storeUserID你的where方法中的這個條件總是錯誤的。如果它是假的,那么它不會回傳任何東西。
解決方法:
...
var jsondata = jsonDecode(response.body); // do not make it to String. Your response is a LIST
List listOfUser = [];
if (response.statusCode == 200) {
// i assume your response will only have 1 object
final data = jsondata[0]['data'];
listOfUser.add(data);
final findid = listOfUser.where((element) => element['id'] == storeUserID);
print(findid);
return GetUserData();
// return GetUserData.fromJson(jsondata); you have to make sure this is not error. its because your response is an array. not a Map
}else{
throw Exception(response.body);
}
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/521295.html
標籤:扑镖
