fix: initialize fr_FR/fr_TN locale data before runApp (DateFormat crash)
This commit is contained in:
parent
d091b4412d
commit
ff8b228898
|
|
@ -1,6 +1,7 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
|
import 'package:intl/date_symbol_data_local.dart';
|
||||||
|
|
||||||
import 'providers/auth_provider.dart';
|
import 'providers/auth_provider.dart';
|
||||||
import 'providers/dashboard_provider.dart';
|
import 'providers/dashboard_provider.dart';
|
||||||
|
|
@ -17,7 +18,10 @@ import 'screens/achats_screen.dart';
|
||||||
import 'screens/production_screen.dart';
|
import 'screens/production_screen.dart';
|
||||||
import 'screens/stock_screen.dart';
|
import 'screens/stock_screen.dart';
|
||||||
|
|
||||||
void main() {
|
void main() async {
|
||||||
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
|
await initializeDateFormatting('fr_FR');
|
||||||
|
await initializeDateFormatting('fr_TN');
|
||||||
runApp(
|
runApp(
|
||||||
MultiProvider(
|
MultiProvider(
|
||||||
providers: [
|
providers: [
|
||||||
|
|
@ -42,22 +46,18 @@ class RayhanApp extends StatefulWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class _RayhanAppState extends State<RayhanApp> {
|
class _RayhanAppState extends State<RayhanApp> {
|
||||||
late final GoRouter _router;
|
GoRouter? _router;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void didChangeDependencies() {
|
void didChangeDependencies() {
|
||||||
super.didChangeDependencies();
|
super.didChangeDependencies();
|
||||||
}
|
if (_router == null) {
|
||||||
|
final auth = Provider.of<AuthProvider>(context, listen: false);
|
||||||
@override
|
|
||||||
void initState() {
|
|
||||||
super.initState();
|
|
||||||
final authProvider = context.read<AuthProvider>();
|
|
||||||
_router = GoRouter(
|
_router = GoRouter(
|
||||||
initialLocation: '/login',
|
initialLocation: '/login',
|
||||||
refreshListenable: authProvider,
|
refreshListenable: auth,
|
||||||
redirect: (context, state) {
|
redirect: (_, state) {
|
||||||
final loggedIn = authProvider.isAuthenticated;
|
final loggedIn = auth.isAuthenticated;
|
||||||
final onLogin = state.matchedLocation == '/login';
|
final onLogin = state.matchedLocation == '/login';
|
||||||
if (!loggedIn && !onLogin) return '/login';
|
if (!loggedIn && !onLogin) return '/login';
|
||||||
if (loggedIn && onLogin) return '/dashboard';
|
if (loggedIn && onLogin) return '/dashboard';
|
||||||
|
|
@ -74,15 +74,17 @@ class _RayhanAppState extends State<RayhanApp> {
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_router.dispose();
|
_router?.dispose();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
if (_router == null) return const SizedBox.shrink();
|
||||||
return MaterialApp.router(
|
return MaterialApp.router(
|
||||||
title: 'Rayhan ERP',
|
title: 'Rayhan ERP',
|
||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
|
|
@ -94,7 +96,7 @@ class _RayhanAppState extends State<RayhanApp> {
|
||||||
useMaterial3: true,
|
useMaterial3: true,
|
||||||
fontFamily: 'Roboto',
|
fontFamily: 'Roboto',
|
||||||
),
|
),
|
||||||
routerConfig: _router,
|
routerConfig: _router!,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue