gcappon / fitbitter

A Flutter package to make your life easier when dealing with Fitbit APIs.
https://gcappon.github.io/fitbitter/
BSD 3-Clause "New" or "Revised" License
19 stars 21 forks source link

"LateInitializationError: Local 'response' has not been initialized". when using isTokenValid #21

Open henryla92 opened 9 months ago

henryla92 commented 9 months ago

Hi there,

I get and check the Fitbit creds like so:

  /// get credentials, if not exist, get new ones
  Future<FitbitCred> getFitbitCreds({required int userId, required int programId}) async {
    var entryBox = await Hive.openBox<FitbitCred>('fitbit_cred_container');
    FitbitCred validCreds;
    // if doesnt exist, return false
    if (entryBox.isEmpty) {
      // get new creds
      FitbitCredentials? fitbitCreds = await FitbitConnector.authorize(
        clientID: fitbitClientID,
        clientSecret: fitbitClientSecret,
        redirectUri: fitbitRedirectUri,
        callbackUrlScheme: fitbitCallbackScheme,
      );

      FitbitCred newCreds = FitbitCred(
        fitbitAccessToken: fitbitCreds!.fitbitAccessToken,
        fitbitRefreshToken: fitbitCreds.fitbitRefreshToken,
        userID: fitbitCreds.userID,
        lastSync: DateTime.now(),
      );
      await entryBox.put('curr_fitbit_cred', newCreds);
      validCreds = newCreds;
    } else {
      // get the creds and return it
      FitbitCred existingCreds = entryBox.get('curr_fitbit_cred')!;
      validCreds = existingCreds;
    }

    // check if they are valid
    bool valid = await FitbitConnector.isTokenValid(
        fitbitCredentials: FitbitCredentials(
      fitbitAccessToken: validCreds.fitbitAccessToken,
      fitbitRefreshToken: validCreds.fitbitRefreshToken,
      userID: validCreds.userID,
    ));

    if (valid) {
      return validCreds;
    } else {
      //do something else
    }

    return validCreds;
  }

Seems like it's coming from:

VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: LateInitializationError: Local 'response' has not been initialized.
#0      LateError._throwLocalNotInitialized (dart:_internal-patch/internal_patch.dart:197:5)
#1      FitbitConnector.isTokenValid (package:fitbitter/src/fitbitConnector.dart:140:16)
<asynchronous suspension>

Sometimes it works well, but sometimes I get LateInitializationError: Local 'response' has not been initialized at the check.

Am I doing something wrong?

Any guidance is appreciated!

DFerrari13 commented 3 months ago

Hi! I get the same exact error... Have you found some solutions?

gcappon commented 3 months ago

Hi all, I think it is due to line 40 of fitbitDataManager.dart. Unfortunately, I am not able to fix it in a short time (i am very busy ATM)...any help is really appreciated.