signIn method Null safety

Future<void> signIn(
  1. String redirectUri
)

Implementation

Future<void> signIn(String redirectUri) async {
  if (_loading) {
    throw LogtoAuthException(
        LogtoAuthExceptions.isLoadingError, 'Already signing in...');
  }

  final httpClient = _httpClient ?? http.Client();

  try {
    _loading = true;
    _pkce = PKCE.generate();
    _state = utils.generateRandomString();
    _tokenStorage.setIdToken(null);
    final oidcConfig = await _getOidcConfig(httpClient);

    final signInUri = logto_core.generateSignInUri(
      authorizationEndpoint: oidcConfig.authorizationEndpoint,
      clientId: config.appId,
      redirectUri: redirectUri,
      codeChallenge: _pkce.codeChallenge,
      state: _state,
      resources: config.resources,
      scopes: config.scopes,
    );
    String? callbackUri;

    final redirectUriScheme = Uri.parse(redirectUri).scheme;
    callbackUri = await FlutterWebAuth.authenticate(
      url: signInUri.toString(),
      callbackUrlScheme: redirectUriScheme,
      preferEphemeral: true,
    );

    await _handleSignInCallback(callbackUri, redirectUri, httpClient);
  } finally {
    _loading = false;
    if (_httpClient == null) httpClient.close();
  }
}