【问题标题】:How to assign values from an API call to a variable in flutter如何将API调用中的值分配给flutter中的变量
【发布时间】:2021-09-21 07:26:49
【问题描述】:

我有以下使用 d 验证票证/令牌的方法

    var ticketArray = ticket.split('|');
    //First check to verify token using simple versification algo
    if (widget.eventID.toString() != (ticketArray[0])) {
      setState(() {
        ticketMainMsg = 'This QR code is NOT VALID';
        ticketsubtitle = ticketArray.length != 2
            ? 'The QR code is fake'
            : 'QR code could belong to another event';
        ticketStatus = false;
        return;
      });
    }
    //Make API call
    ticketModel = HttpVerifyTicketPost(
      eventId: widget.eventID,
      ticket: ticket,
      scannerId: widget.scannerId,
    ).verifyTicket();
  }

从上面你可以看到,如果这个简单的步骤失败,我会对二维码/令牌进行非常简单的检查,我不会费心进行 API 调用,而是根据这些值设置状态。

但是,如果检查通过,我会继续对服务器进行 API 调用以完全验证令牌/代码。

我的问题是我现在正在努力将 API 调用中的值分配给 ticketStatusticketMainMsgticketsubtitle 参数。任何人都可以helo阐明一些观点。我对颤动很陌生,但我知道TicketModel 将是一种未来。我的背景是 PHP,请见谅!

编辑:httpVerifyTicket 类

class HttpVerifyTicketPost {
  String ticket;
  int someId;
  int anotherId;

  HttpVerifyTicketPost(
      {required this.ticket, required this.someId, required this.anotherId});

  String verifyURL =
      'https://api.com/api/vendors/scanner/native/verify/ticket';

  Future<TicketModel> verifyTicket() async {
    var storage = await SharedPreferences.getInstance();
    var code= storage.getString('code');

    var client = http.Client();
    var ticketModel = null;

    var body = {
      'ticket': ticket,
      'scanner': scannerCode,
      'someId': someId,
      'anotherId': anotherId
    };

    try {
      var url = Uri.parse(verifyURL);
      var res = await client.post(url, body: jsonEncode(body));
      if (res.statusCode == 200) {
        var jsonString = res.body;
        var jsonMap = json.decode(jsonString);
        ticketModel = TicketModel.fromJson(jsonMap);
      }
      return ticketModel;
    } catch (Exception) {
      return ticketModel;
    }
  }
}

【问题讨论】:

标签: flutter dart flutter-http


【解决方案1】:

请试试这个

HttpVerifyTicketPost(
          eventId: widget.eventID,
          ticket: ticket,
          scannerId: widget.scannerId,
        ).verifyTicket().then((value){setState(() {
            ticketModel=value
          });
    });

【讨论】:

  • 工作就像一个魅力
【解决方案2】:

我不太明白你想要实现什么,但也许你需要添加一个异步方法,比如 ticketModel = await HttpVerifyTicketPost( //add await eventId: widget.eventID, ticket: ticket, scannerId: widget.scannerId, ).verifyTicket(); 并且您必须添加async,例如Future Foo() async {your code...}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2018-07-17
    • 2010-11-13
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多