【问题标题】:can't use containsKey method in Array不能在数组中使用 containsKey 方法
【发布时间】:2021-04-10 09:01:46
【问题描述】:

我正在尝试检查用户是否输入了正确的登录详细信息。如果用户输入了正确的详细信息,他们将返回状态 1。我正在尝试使用 containsKey 方法来查看键是否为 1 按钮它返回错误。请帮帮我。

var rsp = await loginUser(user, pass);

                            print(rsp);
                            
                            if (rsp.containsKey('status')) {
                              if (rsp['status'] == 1) {
                                Navigator.push(
                                    context,
                                    MaterialPageRoute(
                                        builder: (context) => Home()));
                              }

它会打印:所以我知道它可以工作并返回一个数组

flutter: {"status":1,"status_text":"Success","user_arr":{"firstname":"Murat ","lastname":"obrien","email":"murray18@gmail.com","username":"hello","password":"hello"}}

我收到此错误:

[VERBOSE-2:ui_dart_state.cc(177)] Unhandled Exception: NoSuchMethodError: Class 'String' has no instance method 'containsKey'.
Receiver: "{\"status\":1,\"status_text\":\"Success\",\"user_arr\":{\"firstname\":\"Murat \",\"lastname\":\"obrien\",\"email\":\"murray18@gmail.com\",\"username\":\"hello\",\"password\":\"hello\"}}"
Tried calling: containsKey("status")

【问题讨论】:

    标签: php sql arrays flutter dart


    【解决方案1】:

    看起来您的响应正在返回 json 数组的编码字符串版本。尝试以下方法将 rsp 转换为数组(在 dart 中称为 Map):

    import 'dart:convert';
    
    var rsp = await loginUser(user, pass);
    res = jsonDecode(rsp);
    
    if (rsp.containsKey('status')) {
      if (rsp['status'] == 1) {
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => Home()),
        );
      }
    }
    
    

    【讨论】:

    • 这适用于 containsKey,但我现在如何检查该键“状态”是否 == 1?谢谢!
    • 没问题,谢谢!我认为您现有的代码现在应该像rsp 一样工作,将成为Map,因此您应该能够访问包含在res['status'] 中的值。也许rsp['status'] 正在返回1 的字符串版本而不是int?在这种情况下,我会在第一个 if 语句中执行 print(rsp['status'] == 1),这样您就可以看到输出的内容,然后根据该结果调整代码,直到达到正确的条件。
    • 为了确保rsp 是您需要的类型,您还可以使用Map<String, dynamic>.from(jsonDecode(rsp)) 这让dart 知道您正在使用带有字符串值和任何语法的Map使用rsp 时会标记错误。
    • 非常感谢,打印 (rsp['status'] == 1) 返回一个布尔值 true,所以我检查了是否为 true。
    猜你喜欢
    • 1970-01-01
    • 2016-01-16
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    相关资源
    最近更新 更多