pukaad_ui_lib 1.0.9 copy "pukaad_ui_lib: ^1.0.9" to clipboard
pukaad_ui_lib: ^1.0.9 copied to clipboard

pukaad_ui is a Flutter package providing reusable UI components, custom input fields, and Thai font support.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_riverpod/legacy.dart';
import 'package:pukaad_ui_lib/theme/theme_scheme.dart';
import 'package:pukaad_ui_example/router.dart';
import 'package:pukaad_ui_lib/utility/responsive/responsive_wrapper.dart';
import 'package:shadcn_ui/shadcn_ui.dart';

@pragma('vm:entry-point')
Future<void> firebaseMessagingHandler(dynamic message) async {
  debugPrint("Handling background message");
}

class TranslationProvider extends ChangeNotifier {
  String _currentLanguage = 'th_TH';

  String get currentLanguage => _currentLanguage;

  void changeLanguage(String languageCode, String countryCode) {
    _currentLanguage = '${languageCode}_$countryCode';
    notifyListeners();
  }
}

final translationProvider = ChangeNotifierProvider<TranslationProvider>((ref) {
  return TranslationProvider();
});

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // Lock orientation to portrait mode only
  await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);

  await dotenv.load(fileName: ".env");
  runApp(const ProviderScope(child: MyApp()));
}

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

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

    final localeParts = translation.currentLanguage.split('_');
    final languageCode = localeParts[0];
    final countryCode = localeParts.length > 1 ? localeParts[1] : '';

    return ShadApp.router(
      debugShowCheckedModeBanner: false,
      title: "Pikachu",
      theme: lightThemeData,
      darkTheme: darkThemeData,
      themeMode: ThemeMode.light,
      routerConfig: router,
      locale: Locale(languageCode, countryCode),
      builder: (context, child) {
        return ResponsiveWrapper(child: child ?? const SizedBox());
      },
    );
  }
}