better_auth_flutter 0.0.6 copy "better_auth_flutter: ^0.0.6" to clipboard
better_auth_flutter: ^0.0.6 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 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 GoogleSignIn googleSignIn = GoogleSignIn.instance;

    await googleSignIn.initialize(
      clientId: "YOUR_MOBILE_CLIENT_ID",
      serverClientId: "YOUR_WEB_CLIENT_ID",
    );

    googleSignIn.authenticationEvents.listen((event) async {
      final GoogleSignInAccount? user = switch (event) {
        GoogleSignInAuthenticationEventSignIn() => event.user,
        GoogleSignInAuthenticationEventSignOut() => null,
      };

      if (user != null) {
        log("User signed in: ${user.email}");

        try {
          final List<String> scopes = <String>["openid", "email", "profile"];

          final GoogleSignInServerAuthorization? serverAuthorization =
              await user.authorizationClient.authorizeServer(scopes);

          if (serverAuthorization != null) {
            final String serverAuthCode = serverAuthorization.serverAuthCode;

            final (result, error) = await BetterAuth.instance.client
                .signInWithIdToken(
                  provider: SocialProvider.google,
                  idToken: serverAuthCode,
                );

            if (error != null) {
              log("Error: ${error.message}");
            }

            log("Sign in result: ${result?.toString()}");
          } else {
            log("Server authorization is null");
          }
        } on GoogleSignInException catch (e) {
          log("Google Sign In Exception: ${e.toString()}");
        } catch (e) {}
      }
    });
  }

  // static void signInWithGoogle() async {
  //   final GoogleSignIn googleSignIn = GoogleSignIn.instance;

  //   googleSignIn.initialize(clientId: "", serverClientId: "");

  //   googleSignIn.authenticationEvents.listen((event) {});

  //   final List<String> scopes = <String>["openid", "email", "profile"];

  //   final GoogleSignInServerAuthorization? serverAuthorization =
  //       await googleSignIn.authorizationClient.authorizeServer(scopes);

  //   // if (googleSignInAccount == null) {
  //   //   log("Google sign in cancelled");
  //   //   return;
  //   // }

  //   // final GoogleSignInAuthentication googleSignInAuthentication =
  //   //     await googleSignInAccount.authentication;

  //   // final accessToken = "dvdsv";
  //   // 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());
    }
  }
}
4
likes
140
points
154
downloads

Publisher

verified publisherstormej.me

Weekly Downloads

A Flutter client package for integrating with Better Auth - a secure authentication platform.

Homepage
Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

auto_exporter_annotation, cookie_jar, flutter, flutter_web_auth_2, http, path_provider, shared_preferences

More

Packages that depend on better_auth_flutter