Flutter如何在动态数组中使用where方法



我想在动态数组中使用where方法。我正在从api中获取数据,我想在where方法的帮助下从响应中找到一些数据。

以下是api的repsonse。

[
{
'status': true,
'result': 'found',
'data': [
{
'id': 10676487174744,
'name': 'Taki Rajani',
'email': 'mohamtaki.rai@gmail.com',
'isAdmin': false,
'description': 'ta rai'
},
{
'id': 1172269813061229,
'name': 'Aar Raj',
'email': 'rajnia@gmail.com',
'isAdmin': false,
'description': 'test'
},
{
'id': 12854121,
'name': 'testing',
'email': 'testing1222@gmail.com',
'isAdmin': false,
'description': 'details'
}
]
}
]

以下是我的代码,用于查找存储在storeUserID变量中的相同用户id。

2个问题:-1( 当我打印用户列表时,我得到了案例3中的所有数据,但当我打印此列表的长度时,响应显示计数仅为1。2( ";其中";方法在打印时没有显示任何内容可能不起作用

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);
}

您的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']);
}

当我打印此列表的长度时,回复只显示计数1

这是因为在这里listOfUser.add(jsondata);添加了整个响应体。并且你的响应体是1个对象。


";其中";方法在打印时没有显示任何内容可能不起作用。

您的列表不是User列表,这就是为什么您的where方法中的条件element == storeUserID将始终为false。如果它是假的,那么它将一无所获。


解决方法:

...
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);
}
...

最新更新