pukaad_ui_app 0.0.1 copy "pukaad_ui_app: ^0.0.1" to clipboard
pukaad_ui_app: ^0.0.1 copied to clipboard

A reusable UI Kit for Pukaad applications.

example/lib/main.dart

import 'package:example/core/router/app_router.dart';
import 'package:example/i18n/strings.g.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:pukaad_ui_app/pukaad_ui_app.dart';

import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_quill/flutter_quill.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // Load environment variables
  await dotenv.load(fileName: ".env.example");

  LocaleSettings.useDeviceLocale(); // Start with device locale

  // Sync PukaadUIConfig with current locale
  _updatePukaadUIConfig();

  // Listen to locale changes
  LocaleSettings.getLocaleStream().listen((_) {
    _updatePukaadUIConfig();
  });

  // Restore session
  final container = ProviderContainer();
  // Auth check is handled automatically by the provider's build method

  runApp(
    TranslationProvider(
      child: UncontrolledProviderScope(
        container: container,
        child: const MyApp(),
      ),
    ),
  );
}

void _updatePukaadUIConfig() {
  PukaadUIConfig.strings = PukaadUIStrings(
    forgotPassword: t.auth.forgot_password,
    passwordLengthRequirement: t.auth.password_requirements.length,
    passwordUpperCaseRequirement: t.auth.password_requirements.uppercase,
    passwordDigitRequirement: t.auth.password_requirements.digit,
    passwordNoSpaceRequirement: t.auth.password_requirements.no_space,
    recaptchaSiteKey: dotenv.env['RECAPTCHA_SITE_KEY'] ?? '',
  );
}

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

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final router = ref.watch(goRouterProvider);

    return MaterialApp.router(
      title: 'Pukaad Personal App',
      debugShowCheckedModeBanner: false,
      theme: AppTheme.lightTheme,
      routerConfig: router,
      locale: TranslationProvider.of(context).flutterLocale, // use provider
      supportedLocales: AppLocaleUtils.supportedLocales,
      localizationsDelegates: [
        ...GlobalMaterialLocalizations.delegates,
        FlutterQuillLocalizations.delegate,
      ],
    );
  }
}