better_auth_flutter 0.0.5
better_auth_flutter: ^0.0.5 copied to clipboard
A Flutter client package for integrating with Better Auth - a secure authentication platform.
example/lib/main.dart
import 'dart:developer';
import 'package:better_auth_flutter/better_auth_flutter.dart';
import 'package:flutter/material.dart';
import 'package:flutter_web_auth_2/flutter_web_auth_2.dart';
import 'package:google_sign_in/google_sign_in.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
BetterAuth.init(
baseUrl: Uri.parse(
"https://6a2d-2409-40d0-12e2-458d-bc7a-1ebc-8342-ffae.ngrok-free.app",
),
);
runApp(const App());
}
class App extends StatelessWidget {
const App({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "Better Auth Flutter",
home: Home(),
theme: ThemeData.dark(useMaterial3: true),
);
}
}
class Home extends StatelessWidget {
const Home({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
spacing: 16,
children: [
ElevatedButton(onPressed: Repo.signUp, child: Text("Sign Up")),
ElevatedButton(onPressed: Repo.signIn, child: Text("Sign In")),
ElevatedButton(onPressed: Repo.signOut, child: Text("Sign Out")),
ElevatedButton(
onPressed: Repo.signInWithGoogle,
child: Text("Google Sign In"),
),
ElevatedButton(
onPressed: Repo.getSession,
child: Text("Get Session"),
),
ElevatedButton(
onPressed: Repo.listAccounts,
child: Text("List Accounts"),
),
ElevatedButton(
onPressed: Repo.sendVerificationEmail,
child: Text("Send Verification Email"),
),
ElevatedButton(
onPressed:
() => Repo.verifyEmail(
"eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6Impla2Frc2hAZ21haWwuY29tIiwiaWF0IjoxNzQ3MzIzNjg0LCJleHAiOjE3NDczMjcyODR9.xzJO-ElQReO97i_jnpIzND-jLgLCqNM5_WQXqebqF3k",
),
child: Text("Verify Email"),
),
ElevatedButton(
onPressed: () async {
final (result, error) = await BetterAuth.instance.client
.socialSignIn(
provider: SocialProvider.google,
callbackUrl: "/temp",
);
if (error != null) {
log(error.message.toString());
return;
}
final res = await FlutterWebAuth2.authenticate(
url: result!.toString(),
callbackUrlScheme:
"com.googleusercontent.apps.455710607825-heimo9nsl1vpp4n98mg0uosg6731hlfk",
options: FlutterWebAuth2Options(),
);
log("FlutterWebAuth2 result: $res");
},
child: Text("Google Sign In with Callback"),
),
],
),
),
);
}
}
class Repo {
static final betterAuth = BetterAuth.instance.client;
static final GoogleSignIn googleSignIn = GoogleSignIn(serverClientId: "");
static void signUp() async {
final (result, error) = await BetterAuth.instance.client
.signUpWithEmailAndPassword(
email: "jekaksh@gmail.com",
password: "ekaksh123",
name: "ekaksh",
);
if (error != null) {
log(error.message.toString());
return;
}
log(result.toString());
}
static void signIn() async {
final (result, error) = await BetterAuth.instance.client
.signInWithEmailAndPassword(
email: "jekaksh@gmail.com",
password: "ekaksh123",
);
if (error != null) {
log(error.message.toString());
return;
}
log(result.toString());
}
static void signOut() async {
final error = await BetterAuth.instance.client.signOut();
if (error != null) {
log(error.message.toString());
return;
}
await googleSignIn.signOut();
log("Signed out");
}
static void signInWithGoogle() async {
final GoogleSignInAccount? googleSignInAccount =
await googleSignIn.signIn();
if (googleSignInAccount == null) {
log("Google sign in cancelled");
return;
}
final GoogleSignInAuthentication googleSignInAuthentication =
await googleSignInAccount.authentication;
final accessToken = googleSignInAuthentication.accessToken;
final idToken = googleSignInAuthentication.idToken;
if (accessToken == null) {
log("Google access token is null");
return;
}
if (idToken == null) {
log("Google id token is null");
return;
}
final (res, err) = await BetterAuth.instance.client.signInWithIdToken(
provider: SocialProvider.google,
idToken: idToken,
accessToken: accessToken,
);
if (err != null) {
log(err.message.toString());
return;
}
log(res.toString());
}
static void getSession() async {
final (session, error) = await BetterAuth.instance.client.getSession();
if (error != null) {
log(error.message.toString());
return;
}
log(session.toString());
}
static void sendVerificationEmail() async {
final error = await BetterAuth.instance.client.sendVerificationEmail(
email: "jekaksh@gmail.com",
);
if (error != null) {
log(error.message.toString());
return;
}
log("Verification email sent");
}
static void verifyEmail(String token) async {
final error = await BetterAuth.instance.client.verifyEmail(
verificationToken: token,
);
if (error != null) {
log(error.message.toString());
return;
}
}
static void listAccounts() async {
final (accounts, error) = await BetterAuth.instance.client.listAccounts();
if (error != null) {
log(error.message.toString());
return;
}
if (accounts == null) {
log("No accounts found");
return;
}
for (Account account in accounts) {
log(account.toString());
}
}
}