Files
worker/lib/app.dart
Phuoc Nguyen f95fa9d0a6 prodycrts
2025-10-20 15:56:34 +07:00

120 lines
3.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:worker/core/router/app_router.dart';
import 'package:worker/core/theme/app_theme.dart';
import 'package:worker/generated/l10n/app_localizations.dart';
/// Root application widget for Worker Mobile App
///
/// This is the main app widget that:
/// - Sets up Material 3 theme configuration
/// - Configures localization for Vietnamese and English
/// - Provides router configuration (to be implemented)
/// - Integrates with Riverpod for state management
/// - Handles app-level error states
class WorkerApp extends ConsumerWidget {
const WorkerApp({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
return MaterialApp.router(
// ==================== App Configuration ====================
debugShowCheckedModeBanner: false,
title: 'Worker App',
// ==================== Router Configuration ====================
// Using go_router for declarative routing with deep linking support
routerConfig: AppRouter.router,
// ==================== Theme Configuration ====================
// Material 3 theme with brand colors (Primary Blue: #005B9A)
theme: AppTheme.lightTheme(),
darkTheme: AppTheme.darkTheme(),
themeMode: ThemeMode.light, // TODO: Make this configurable from settings
// ==================== Localization Configuration ====================
// Support for Vietnamese (primary) and English (secondary)
localizationsDelegates: const [
// App-specific localizations
AppLocalizations.delegate,
// Material Design localizations
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
// Supported locales
supportedLocales: const [
Locale('vi', 'VN'), // Vietnamese (primary)
Locale('en', 'US'), // English (secondary)
],
// Default locale (Vietnamese)
locale: const Locale('vi', 'VN'), // TODO: Make this configurable from settings
// Locale resolution strategy
localeResolutionCallback: (locale, supportedLocales) {
// Check if the device locale is supported
for (final supportedLocale in supportedLocales) {
if (supportedLocale.languageCode == locale?.languageCode) {
return supportedLocale;
}
}
// If device locale is not supported, default to Vietnamese
return const Locale('vi', 'VN');
},
// ==================== Material App Configuration ====================
// Builder for additional context-dependent widgets
builder: (context, child) {
return _AppBuilder(
child: child ?? const SizedBox.shrink(),
);
},
);
}
}
/// App builder widget
///
/// Wraps the entire app with additional widgets:
/// - Error boundary
/// - Connectivity listener
/// - Global overlays (loading, snackbars)
class _AppBuilder extends ConsumerWidget {
const _AppBuilder({
required this.child,
});
final Widget child;
@override
Widget build(BuildContext context, WidgetRef ref) {
// TODO: Add connectivity listener
// final connectivity = ref.watch(connectivityProvider);
// TODO: Add global loading state
// final isLoading = ref.watch(globalLoadingProvider);
return Stack(
children: [
// Main app content
child,
// TODO: Add global loading overlay
// if (isLoading)
// const _GlobalLoadingOverlay(),
// TODO: Add connectivity banner
// if (connectivity == ConnectivityStatus.offline)
// const _OfflineBanner(),
],
);
}
}