Flutter:Unhandled 异常:类型 'List<dynamic>' 不是类型 'List<String>' 的子类型
Flutter:Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'List<String>'
我有一个 json 字符串,我正试图将其保存到共享首选项中。除了这个列表
,我已经设法保存了所有其他的
{
"roles":[
"ROLE_USER",
"ROLE_MODERATOR",
"ROLE_ADMIN"
],
}
这是我的json
{
"id":44,
"username":"user@gmail.com",
"email":"user@gmail.gom",
"roles":[
"ROLE_USER",
"ROLE_MODERATOR",
"ROLE_ADMIN"
],
"userid":"439cea61-602b-4b1f-a32b-41487775ba00",
"surname":"user",
"firstname":"user1",
"telephoneno":"2113456",
"whatsappno":"2113456",
"active":1,
"studyrole":"TRAINEE",
"tokenType":"Bearer",
"accessToken":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJybXVtb0BtZ2ljLnVtYXJ5bGFuZC5lZHUiLCJpYXQiOjE2MTEwNzk0NDcsImV4cCI6MTYxMTE2NTg0N30.EFX48OAD2MRtg3jCBvvH-Sna4jG8P5FX_LCbyBw38-UX4M85y6l15ISxlF02qK7rhzddiN9KZ8IIvLxhd0mZUA"
}
到目前为止我做到了什么
final http.Response response = await http.post(
url,
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(<String, String>{
'username': username,
'password': password,
'appversion': appversion,
'latitude': latitude,
'longitude': longitude,
'imeI': imeI,
}),
);
print(response.body);
SharedPreferences prefs = await SharedPreferences.getInstance();
var parse = jsonDecode(response.body);
await prefs.setString('username', parse["username"]);
await prefs.setString('accessToken', parse["accessToken"]);
await prefs.setString('surname', parse["surname"]);
await prefs.setString('firstname', parse["firstname"]);
await prefs.setInt('id', parse["id"]);
await prefs.setBool('active', parse["active"] == 1);
await prefs.setString('userid', parse["userid"]);
我如何尝试将列表保存在共享首选项中
await prefs.setStringList('roles', parse['roles']);
每当我尝试保存 json 列表时,我都会遇到错误
Unhandled Exception: type 'List' is not a subtype of type
'List'
如何提取角色并将它们作为单个项目保存在共享首选项中。
此外,在保存它们之后,如何从共享首选项中检索像 ROLE_USER 这样的用户的个人角色?
可能你错过了演员表,试试这个
await prefs.setStringList('roles', parse['roles'].cast<String>());
根据你的第二个问题(按字段搜索用户位置)
这样做有点棘手,因为共享首选项是 key/value 存储,而不是关系数据库。我强烈建议使用数据库,否则你会面临太多的复杂性。
为什么?您想在共享首选项中存储用户列表(我假设它是用户对象),但您共享的代码范围是针对单个用户的,确实需要用户列表。要存储列表,需要将其编码为 json 字符串,而要检索为列表,需要从 json 字符串进行解码。
我有一个 json 字符串,我正试图将其保存到共享首选项中。除了这个列表
,我已经设法保存了所有其他的{
"roles":[
"ROLE_USER",
"ROLE_MODERATOR",
"ROLE_ADMIN"
],
}
这是我的json
{
"id":44,
"username":"user@gmail.com",
"email":"user@gmail.gom",
"roles":[
"ROLE_USER",
"ROLE_MODERATOR",
"ROLE_ADMIN"
],
"userid":"439cea61-602b-4b1f-a32b-41487775ba00",
"surname":"user",
"firstname":"user1",
"telephoneno":"2113456",
"whatsappno":"2113456",
"active":1,
"studyrole":"TRAINEE",
"tokenType":"Bearer",
"accessToken":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJybXVtb0BtZ2ljLnVtYXJ5bGFuZC5lZHUiLCJpYXQiOjE2MTEwNzk0NDcsImV4cCI6MTYxMTE2NTg0N30.EFX48OAD2MRtg3jCBvvH-Sna4jG8P5FX_LCbyBw38-UX4M85y6l15ISxlF02qK7rhzddiN9KZ8IIvLxhd0mZUA"
}
到目前为止我做到了什么
final http.Response response = await http.post(
url,
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(<String, String>{
'username': username,
'password': password,
'appversion': appversion,
'latitude': latitude,
'longitude': longitude,
'imeI': imeI,
}),
);
print(response.body);
SharedPreferences prefs = await SharedPreferences.getInstance();
var parse = jsonDecode(response.body);
await prefs.setString('username', parse["username"]);
await prefs.setString('accessToken', parse["accessToken"]);
await prefs.setString('surname', parse["surname"]);
await prefs.setString('firstname', parse["firstname"]);
await prefs.setInt('id', parse["id"]);
await prefs.setBool('active', parse["active"] == 1);
await prefs.setString('userid', parse["userid"]);
我如何尝试将列表保存在共享首选项中
await prefs.setStringList('roles', parse['roles']);
每当我尝试保存 json 列表时,我都会遇到错误
Unhandled Exception: type 'List' is not a subtype of type 'List'
如何提取角色并将它们作为单个项目保存在共享首选项中。
此外,在保存它们之后,如何从共享首选项中检索像 ROLE_USER 这样的用户的个人角色?
可能你错过了演员表,试试这个
await prefs.setStringList('roles', parse['roles'].cast<String>());
根据你的第二个问题(按字段搜索用户位置)
这样做有点棘手,因为共享首选项是 key/value 存储,而不是关系数据库。我强烈建议使用数据库,否则你会面临太多的复杂性。
为什么?您想在共享首选项中存储用户列表(我假设它是用户对象),但您共享的代码范围是针对单个用户的,确实需要用户列表。要存储列表,需要将其编码为 json 字符串,而要检索为列表,需要从 json 字符串进行解码。