bps_sso_sdk 1.2.0
bps_sso_sdk: ^1.2.0 copied to clipboard
A Flutter SDK for BPS (Badan Pusat Statistik) SSO authentication integration
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:path_provider/path_provider.dart';
import 'core/di/injection.dart';
import 'cubits/authentication_cubit.dart';
import 'cubits/configuration_cubit.dart';
import 'routes/app_router.dart';
import 'utils/route_observer.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// Initialize HydratedBloc storage for data persistence
final storageDirectory = await getApplicationDocumentsDirectory();
HydratedBloc.storage = await HydratedStorage.build(
storageDirectory: HydratedStorageDirectory(storageDirectory.path),
);
// Configure dependencies
configureDependencies();
runApp(const BPSSsoExampleApp());
}
class BPSSsoExampleApp extends StatelessWidget {
const BPSSsoExampleApp({super.key});
static final _appRouter = getIt<AppRouter>();
@override
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: [
BlocProvider<ConfigurationCubit>(
create: (context) => ConfigurationCubit(),
),
BlocProvider<AuthenticationCubit>(
create: (context) => AuthenticationCubit(),
),
],
child: MaterialApp.router(
title: 'BPS SSO SDK Example',
routeInformationParser: _appRouter.defaultRouteParser(),
routerDelegate: _appRouter.delegate(
navigatorObservers: () => [BPSRouteObserver()],
),
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: const Color(0xFF2563EB),
brightness: Brightness.light,
),
useMaterial3: true,
textTheme: GoogleFonts.interTextTheme(),
appBarTheme: AppBarTheme(
centerTitle: true,
elevation: 0,
scrolledUnderElevation: 0,
backgroundColor: Colors.transparent,
surfaceTintColor: Colors.transparent,
titleTextStyle: GoogleFonts.inter(
fontSize: 18,
fontWeight: FontWeight.w600,
),
),
elevatedButtonTheme: ElevatedButtonThemeData(
style: ElevatedButton.styleFrom(
textStyle: GoogleFonts.inter(fontWeight: FontWeight.w600),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
),
),
cardTheme: const CardThemeData(
elevation: 0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(16)),
),
color: Colors.white,
surfaceTintColor: Colors.transparent,
),
inputDecorationTheme: InputDecorationTheme(
border: OutlineInputBorder(borderRadius: BorderRadius.circular(12)),
filled: true,
fillColor: Colors.grey.shade50,
),
),
darkTheme: ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: const Color(0xFF2563EB),
brightness: Brightness.dark,
),
useMaterial3: true,
textTheme: GoogleFonts.interTextTheme(ThemeData.dark().textTheme),
appBarTheme: AppBarTheme(
centerTitle: true,
elevation: 0,
scrolledUnderElevation: 0,
backgroundColor: Colors.transparent,
surfaceTintColor: Colors.transparent,
titleTextStyle: GoogleFonts.inter(
fontSize: 18,
fontWeight: FontWeight.w600,
),
),
elevatedButtonTheme: ElevatedButtonThemeData(
style: ElevatedButton.styleFrom(
textStyle: GoogleFonts.inter(fontWeight: FontWeight.w600),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
),
),
cardTheme: const CardThemeData(
elevation: 0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(16)),
),
surfaceTintColor: Colors.transparent,
),
inputDecorationTheme: InputDecorationTheme(
border: OutlineInputBorder(borderRadius: BorderRadius.circular(12)),
filled: true,
),
),
debugShowCheckedModeBanner: false,
),
);
}
}