Updating Value From API in a constructor flutter

122

What you can simply do is put this in resendCode function this will refresh your page with new values.

Navigator.push(
        context,
        MaterialPageRoute(
            builder: (context) => OtpVerifyPage(text: token)));

Full code for better understanding:

Future<void> resendCode() async {
// ignore: unused_local_variable
var response = await http
    .post(Uri.parse('http://123.123.123/resendCode'),
        headers: <String, String>{
          "content-type": "application/json; charset=utf-8"
        },
        body: jsonEncode({
          "forgotPasswordToken": widget.text,
        }))
    .then((response) {
  print(response.statusCode);
  print(response.body);
  final parsedJson = json.decode(response.body);
  var token = parsedJson['data']['forgotPasswordToken'];
  var otp = parsedJson['data']['otp'];
  print('OTP: $otp');
  print("Token: $token");
  if (response.body.contains('"statusCode":200')) {
    Navigator.push(
        context,
        MaterialPageRoute(
            builder: (context) => OtpVerifyPage(text: token))); // Added here to refresh the page with new value of token.
    ScaffoldMessenger.of(context)
        .showSnackBar(SnackBar(content: Text('OTP Send to your Email ID')));
  } else {
    ScaffoldMessenger.of(context)
        .showSnackBar(SnackBar(content: Text('Try again later')));
  }
  return response;
});
Share:
122
Abhinav Agarwal
Author by

Abhinav Agarwal

Updated on December 31, 2022

Comments

  • Abhinav Agarwal
    Abhinav Agarwal over 1 year

    I want to update the value of a constructor coming from page-1 to page-2. And I am using that value in an APIs response and wanted to update the response value with the new value. Here is the code for better understanding.

    Page-1 Code:

     Future<void> forgotpass() async {
    if (emailController.text.isNotEmpty) {
      var response = await http
          .post(Uri.parse('http://123.123.123/forgotPassword'),
              headers: <String, String>{
                "content-type": "application/json; charset=utf-8",
              },
              body: jsonEncode({
                "email": emailController.text,
              }))
          .then((response) {
        print(response.statusCode);
        print(response.body);
        final parsedJson = json.decode(response.body);
        var token = parsedJson['data']['forgotPasswordToken'];
        var otp = parsedJson['data']['otp'];
        print('OTP: $otp');
        print("Token: $token");
        if (response.body.contains('"statusCode":200')) {
          Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) => OtpVerifyPage(
                        text: token,
                      )));
        } else {
          ScaffoldMessenger.of(context)
              .showSnackBar(SnackBar(content: Text('Invalid Email')));
        }
        return response;
      });
    } else {
      ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Please Enter your Email Addrees')));
    }
    

    The token is been sent to a New Page-2.

    Future<void> otpVerify() async {
    if (otp.text.isNotEmpty) {
      int newOtp = int.parse(otp.text);
      var response = await http
          .post(Uri.parse('http://123.123.123/verifyOtp'),
              headers: <String, String>{
                "content-type": "application/json; charset=utf-8"
              },
              body: jsonEncode({
                "forgotPasswordToken": widget.text, //wanted to update value here from when hitting resendCode() function.
                "otp": newOtp,
              }))
          .then((response) {
        print(response.statusCode);
        print(response.body);
        if (response.body.contains('"statusCode":200')) {
          final parsedJson = json.decode(response.body);
          var resetToken = parsedJson['data']['resetPasswordToken'];
          Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) => SetNewPassPage(
                        text: resetToken,
                      )));
        } else if (response.statusCode == 202) {
          ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(content: Text('Server issue. Please Try Again Later')));
        } else {
          ScaffoldMessenger.of(context)
              .showSnackBar(SnackBar(content: Text('Invalid OTP')));
        }
        return response;
      });
    } else {
      ScaffoldMessenger.of(context)
          .showSnackBar(SnackBar(content: Text('Please Enter your OTP')));
    }
    

    I am also using the resend OTP function as :

    Future<void> resendCode() async {
    // ignore: unused_local_variable
    var response = await http
        .post(Uri.parse('http://123.123.123/resendCode'),
            headers: <String, String>{
              "content-type": "application/json; charset=utf-8"
            },
            body: jsonEncode({
              "forgotPasswordToken": widget.text, //Getting new Token but can't update it in otpVerify() function.
            }))
        .then((response) {
      print(response.statusCode);
      print(response.body);
      final parsedJson = json.decode(response.body);
      var token = parsedJson['data']['forgotPasswordToken'];
      var otp = parsedJson['data']['otp'];
      print('OTP: $otp');
      print("Token: $token");
      if (response.body.contains('"statusCode":200')) {
        ScaffoldMessenger.of(context)
            .showSnackBar(SnackBar(content: Text('OTP Send to your Email ID')));
      } else {
        ScaffoldMessenger.of(context)
            .showSnackBar(SnackBar(content: Text('Try again later')));
      }
      return response;
    });
    

    }

    Now I wanted to update the "forgotPasswordToken" in the body of otpVerify(). Its updating in resendCode() function but not in otpVerify(). So if anyone knows how to solve this issue please help.

    Here is the UI snapshot for better understanding: Page-1 & Page-2