Skip to main content

Flutter SDK

The ThunderID Flutter SDK provides a single Dart package for integrating authentication into your iOS and Android Flutter applications:

  • thunderid_flutter: Core authentication client, reactive state management, and drop-in Flutter widgets

The package targets Flutter 3.16+ and Dart 3.2+. All protocol operations (OAuth2/OIDC, PKCE, token validation, token refresh) are delegated to the native ThunderID iOS and Android SDKs via Flutter platform channels: no OAuth2/OIDC logic runs in Dart.

Installation​

pubspec.yaml
dependencies:
thunderid_flutter: ^0.1.0
flutter pub get

Getting Started​

To get started quickly, follow the Flutter Quickstart Guide for step-by-step setup instructions.

Quick Example​

import 'package:flutter/material.dart';
import 'package:thunderid_flutter/thunderid_flutter.dart';

void main() {
runApp(
ThunderIDProvider(
config: ThunderIDConfig(
baseUrl: 'https://localhost:8090',
clientId: '<your-client-id>',
scopes: const ['openid', 'profile', 'email'],
afterSignInUrl: 'dev.thunderid.app://callback',
afterSignOutUrl: 'dev.thunderid.app://logout',
applicationId: '<your-application-id>',
),
child: const MyApp(),
),
);
}

class MyApp extends StatelessWidget {
const MyApp({super.key});

@override
Widget build(BuildContext context) {
return MaterialApp(
home: Builder(
builder: (context) {
final thunder = ThunderIDProvider.of(context);
if (!thunder.initialized) return const CircularProgressIndicator();
return thunder.isSignedIn
? HomeScreen()
: AuthScreen();
},
),
);
}
}

Features​

Core Client​

MethodDescription
initialize(config)Initialize the SDK with configuration
signIn(payload, request)App-native sign-in via the Flow Execution API
signUp(payload, request)App-native registration via the Flow Execution API
buildSignInUrl(options)Build an OAuth 2.0 authorization URL for redirect-based sign-in
handleRedirectCallback(url)Exchange an authorization code for tokens after redirect
getAccessToken()Retrieve the current access token, refreshing automatically if needed
getUser()Retrieve the authenticated user from the JWT or /oauth2/userinfo
getUserProfile()Fetch the full user profile from /scim2/Me
updateUserProfile(payload)Update the user's profile
signOut(options)Revoke the refresh token and clear the session
exchangeToken(config)Perform an OAuth 2.0 token exchange (STS)
decodeJwtToken(token)Decode a JWT string into a Map<String, dynamic>

Widgets​

Actions​

WidgetDescription
SignInButton(onTap)Pre-styled button that triggers your sign-in flow
SignOutButton(onSignOutComplete)Calls signOut() and refreshes auth state
SignUpButton(onTap)Pre-styled button that triggers your registration flow

Presentation​

WidgetDescription
SignIn(applicationId, onComplete, onError)Full embedded sign-in form driven by the Flow Execution API
BaseSignIn(applicationId, onComplete, onError, builder)Builder variant; receives SignInState for custom form UI
SignUp(applicationId, onComplete, onError)Full embedded registration form
BaseSignUp(applicationId, onComplete, onError, builder)Builder variant for custom registration UI
UserProfile(onSaved, onError)Editable profile form; loads from /scim2/Me and saves via updateUserProfile
BaseUserProfile(onSaved, onError, builder)Builder variant with full control over the form layout

Guards​

WidgetDescription
SignedIn(child, fallback)Renders child only when the user is authenticated
SignedOut(child, fallback)Renders child only when the user is not authenticated

State​

TypeDescription
ThunderIDProviderRoot widget that injects ThunderIDState into the widget tree
ThunderIDProvider.of(context)Access the current ThunderIDState from any widget

Architecture​

Flutter (Dart)                    Native
┌─────────────────────┐ ┌──────────────────────┐
│ ThunderIDClient │ │ ThunderID iOS SDK │
│ ThunderIDProvider │ ──────── │ (Swift, Keychain) │
│ Widgets │ channel ├──────────────────────┤
└─────────────────────┘ │ ThunderID Android SDK│
│ (Kotlin, Keystore) │
└──────────────────────┘

Customization​

  • Use SignIn and SignUp for pre-built forms, or BaseSignIn and BaseSignUp to render your own UI with the same Flow Execution loop
  • Provide custom button UI while delegating auth logic to ThunderIDProvider.of(context).client
  • Override localized strings via the preferences parameter on ThunderIDConfig

Explore with AI

ThunderID LogoThunderID Logo

Product

DocsAPIsSDKs
© Copyright Linux Foundation Europe.For web site terms of use, trademark policy and other project policies please see https://linuxfoundation.eu/en/policies.