GHH
GHH

Reputation: 2019

How to get Future callback in Flutter

Good day. I am a flutter beginner and now do some simple pratice.

I want: Press a button and call login api, if api response is success then go to main page.

but I don't know how to get callback result.

viewModel

  Future<String> login(String account, String password) async {
    try {
      futureLogin = logon(account, password);
        await futureLogin.then((value) {

          print("key=${value.data.key}");//success print correct key

          return value.data.key;

        }).catchError((error) {
          print("error=$error");
        });
    } catch (error) {}

    return "";
  }

Button click event

onPressed: () async {
    var result = await viewModel.login(account, password);
    print("result=${result}");//print ""
}

I think that I can simply use await keyword to get my api result but not works.

How to solve it.

Any help will be appreciate.

Upvotes: 0

Views: 673

Answers (2)

Just a Person
Just a Person

Reputation: 1600

Try using async await :

Future<String> login(String account, String password) async {
    try {
      futureLogin = logon(account, password);
      var value = await futureLogin;
      return value.data.key;
    } catch (error) {
        return "";
    }
  }

or using .then function add return key after calling futureLogin

return await futureLogin.then(......);

Upvotes: 1

powerman23rus
powerman23rus

Reputation: 1583

The problem is that you in return is not from the login function but from then function and this result nobody use. After this you make return with empty string Change your code to

   Future<String> login(String account, String password) async {
       try {
           final result = await logon(account, password);
           print("key=${result.data.key}");//success print correct key
           return data.key;
       } catch (error) {
           print("error=$error");
       }

       return "";
   }

Upvotes: 0

Related Questions