如何将 API 调用中的值分配给 flutter 中的变量

How to assign values from an API call to a variable in flutter

我有以下方法用于验证 ticket/token

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

从上面,你可以看到我对 qr code/token 做了一个非常简单的检查,如果这个简单的步骤失败了,我不会打扰 API 调用,我会根据状态设置在这些值上。

但是,如果检查通过,那么我将继续对服务器进行 API 调用以完全验证 token/code。

我的问题是我现在正在努力将 API 调用的值分配给 ticketStatusticketMainMsgticketsubtitle 参数。任何人都可以透露一些信息。我对颤动还很陌生,但我知道 TicketModel 将是一种未来。我的背景是PHP所以见谅!

编辑:httpVerifyTicket Class

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

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

请试试这个

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