如何在颤振中创建未来功能?

时间:2021-07-09 12:24:09

标签: flutter asynchronous flutter-android flutter-future

我试图在颤振中创建 post 函数 这是我的代码:

  Future<String> makePostRequest() async {
    String requestResult;
    var body = this.toMapRequest();
    String requestUrl = RequestZarinpal.PAYMENT_REQUEST_URL;
    String gateWayUrl;
    String jsonBody = json.encode(body);
    final encoding = Encoding.getByName('utf-8');

    Response response = await post(
      requestUrl,
      headers: headers,
      body: jsonBody,
      encoding: encoding,
    ).timeout(const Duration(seconds: 10), onTimeout: () {
      throw TimeoutException('The connection has timed out, Please try again!');
    });

    responseBody = response.body;
    var parsedJson = json.decode(responseBody);
    var data = parsedJson['data'];
    var error = parsedJson['errors'];
    if (error.toString() != "[]") {
      var errorcode = parsedJson['errors']['code'];
      print("$body   va  $requestUrl va $parsedJson");
      requestResult = "   شما ارور زیر را دریافت کرده اید \n$error";
    } else if (data.toString() != "[]") {
      var authority = parsedJson['data']['authority'];
      requestResult = "اتوریتی شما با موفقیت ساخته شد و به درگاه متصل می شود";
      _request.setAuthority(authority);
      print(parsedJson);

      String gateWay = RequestZarinpal.PAYMENT_GATEWAY_URL;
      gateWayUrl = "$gateWay$authority";

      if (await canLaunch(gateWayUrl)) {
        await launch(
          gateWayUrl,
          forceSafariVC: false,
          forceWebView: false,
          headers: headers,
        );
      } else {
        throw 'Could not launch $requestUrl';
      }

      print(requestResult);

      return requestResult;
    }
  }

但是我收到了这个错误: 正文可能会正常完成,从而导致返回 'null',但返回类型可能是不可为 null 的类型。 尝试在 end.dart(body_might_complete_normally) 添加 return 或 throw 语句 我该怎么办?

2 个答案:

答案 0 :(得分:0)

使用 WARNING: Property Version does not exist at path HKEY_LOCAL_MACHINE\SOFTWARE\Dropbox\Client. WARNING: Cannot find path 'HKLM:\SOFTWARE\WOW6432Node\Dropbox\Client' because it does not exist. - Product version : Not found 行,您将函数划分为 2 个可能的结果。

正数,没有 if (error.toString() != "[]")

也许您应该将 return 移到大括号之后,以便无论如何都会触发返回。

答案 1 :(得分:0)

您缺少 if 条件中的 return 语句

if (error.toString() != "[]") {
  var errorcode = parsedJson['errors']['code'];
  print("$body   va  $requestUrl va $parsedJson");
  requestResult = "   شما ارور زیر را دریافت کرده اید \n$error";

  return requestResult;
}