簡體   English   中英

Flutter:未處理的異常:鍵入“列表”<dynamic> ' 不是類型 'List 的子類型<string> '</string></dynamic>

[英]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 列表時,我都會遇到錯誤

未處理的異常:“列表”類型不是“列表”類型的子類型

如何提取角色並將它們作為 flutter 中的單個項目保存在共享首選項中。

同樣在保存它們之后,我如何從共享首選項中檢索像 ROLE_USER 這樣的用戶的個人角色?

可能你錯過了演員表,試試這個

await prefs.setStringList('roles', parse['roles'].cast<String>());

根據您的第二個問題(按字段搜索用戶)

這樣做有點棘手,因為共享首選項是鍵/值存儲,而不是關系數據庫。 我強烈建議使用數據庫,否則您將面臨太多復雜性。

為什么? 您想在共享首選項中存儲用戶列表(我假設它是用戶對象),但是您共享的代碼 scope 是針對單個用戶的,確實需要用戶列表。 而要存儲一個列表,它需要編碼為 json 字符串,而要檢索為列表,需要從 json 字符串中解碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM