String generateCodeChallenge(String codeVerifier) { final bytes = ascii.encode(codeVerifier); final digest = sha256.convert(bytes); return base64UrlEncode(digest.bytes).replaceAll('=', ''); }