- gen-l10n setup (flutter_localizations, intl, l10n.yaml, ARB en/fr) - localeProvider (persisted) wired into MaterialApp - language selector in the System page (alongside the color palette) - all user-facing strings across screens moved to AppLocalizations Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
59 lines
1.9 KiB
Dart
59 lines
1.9 KiB
Dart
import 'dart:io';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:google_fonts/google_fonts.dart';
|
|
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
|
|
import 'l10n/app_localizations.dart';
|
|
import 'presentation/pages/main_page.dart';
|
|
import 'presentation/pages/pokemon_detail.dart';
|
|
import 'presentation/pages/game_over_page.dart';
|
|
import 'presentation/providers/theme_provider.dart';
|
|
import 'presentation/providers/locale_provider.dart';
|
|
|
|
void main() {
|
|
WidgetsFlutterBinding.ensureInitialized();
|
|
if (Platform.isLinux || Platform.isWindows || Platform.isMacOS) {
|
|
sqfliteFfiInit();
|
|
databaseFactory = databaseFactoryFfi;
|
|
}
|
|
runApp(const ProviderScope(child: MyApp()));
|
|
}
|
|
|
|
/// Widget racine : construit le MaterialApp (thème dérivé de la palette, routes).
|
|
class MyApp extends ConsumerWidget {
|
|
const MyApp({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context, WidgetRef ref) {
|
|
final paletteIndex = ref.watch(themeProvider);
|
|
final palette = appPalettes[paletteIndex];
|
|
final locale = ref.watch(localeProvider);
|
|
|
|
return MaterialApp(
|
|
onGenerateTitle: (context) => AppLocalizations.of(context)!.appTitle,
|
|
locale: locale,
|
|
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
|
supportedLocales: AppLocalizations.supportedLocales,
|
|
theme: ThemeData(
|
|
colorScheme: ColorScheme.fromSeed(
|
|
seedColor: palette.primary,
|
|
surface: palette.surface,
|
|
),
|
|
textTheme: GoogleFonts.vt323TextTheme(
|
|
Theme.of(context).textTheme,
|
|
).apply(
|
|
bodyColor: Colors.black87,
|
|
displayColor: Colors.black87,
|
|
),
|
|
useMaterial3: true,
|
|
),
|
|
debugShowCheckedModeBanner: false,
|
|
routes: {
|
|
'/': (context) => const MainPage(),
|
|
'/pokemon-detail': (context) => const PokemonDetailPage(),
|
|
'/game-over': (context) => const GameOverPage(),
|
|
},
|
|
);
|
|
}
|
|
}
|