во флаттере как настроить ожидание будущего метода - PullRequest
0 голосов
/ 04 мая 2020

У меня есть три API-интерфейса. Первый API-интерфейс отвечает за получение некоторых данных, которые используются во втором API-интерфейсе, поэтому второй API-интерфейс отвечает за некоторые данные, необходимые для 3-го API-интерфейса. Я сделал 3 будущие функции. они в последовательности. например,

  int datafromapi_one;
  bool datafromapi_two;
  bool datafromapi_three;

  Future getDataFromApi_one() async {

    http.Response api_one_response = await http.get("http://api_one_url");
    int data_from_api_one = json.decode(api_one_response.body); // the response data is in numeric only

    setState(){

      datafromapi_one = data_from_api_one;

    }

  }

  Future getDataFromApi_two() async {

    http.Response api_two_response = await http.get("http://api_two_url?with_parameter=datafromapi_one");
    bool data_from_api_two = json.decode(api_two_response.body); // the response data is in boolean value

    setState(){

      datafromapi_two = data_from_api_two;

    }

  }



  Future getDataFromApi_three() async {

    http.Response api_three_response = await http.get("http://api_three_url?with_parameter=datafromapi_two");
    bool data_from_api_three = json.decode(api_three_response.body); // the response data is in boolean value

    setState(){

      datafromapi_three = data_from_api_three;

    }

  }



  FlatButton(
  onPressed:(){

  getDataFromApi_one();
  print(datafromapi_one.toString());

  getDataFromApi_two();
  print(datafromapi_two.toString());

  getDataFromApi_three();
  print(datafromapi_three.toString());

  if(datafromapi_three == true && datafromapi_two == true && datafromapi_one != null ){

  // Navigate.to.next.screen()//

  }
  else{
  // Toast.Show( error on which api )
  }
  }
  )

я реализовал этот метод и застрял в приложении, что иногда данные из api_one получают позже, а зависимые API не работают должным образом без данных из первого API. Теперь я хочу установить некоторую функцию ожидания на api_two, чтобы, если данные не поступили, пришлось ждать данных до их поступления, а затем запустить второй API с этими данными и поставить этот api_three на ожидание, пока данные не поступят. , и затем запустите api_three. Я надеюсь, что вы можете понять и найти правильное решение для меня.

...