Sonnat Project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

121 lines
4.0 KiB

import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:sonnat/core/language/language_cubit.dart';
import 'package:sonnat/core/language/translator.dart';
import 'package:sonnat/core/theme/cubit/theme_cubit.dart';
import 'package:sonnat/core/utils/app_utils.dart';
import 'package:sonnat/core/utils/base_cubit_type.dart';
import 'package:sonnat/core/utils/initializer.dart';
import 'package:sonnat/features/main/main_screen.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Initializer.instance.initialHive();
if (!kDebugMode) {
await runZonedGuarded<Future<void>>(() async {
runApp(const MyApp());
}, (error, stackTrace) async {});
} else {
runApp(const MyApp());
}
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);
return MultiBlocProvider(
providers: [
BlocProvider(create: (context) => LanguageCubit()),
BlocProvider(create: (context) => ThemeCubit()),
],
child: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return BlocBuilder<LanguageCubit, BaseCubitType<LanguageState>>(
builder: (context, state) {
if (state.eventName == LanguageState.loaded) {
Initializer.instance.setAppDirection(
state.data == CurrentLanguage.fa || state.data == CurrentLanguage.ar ? 'rtl' : 'ltr',
);
return MaterialApp(
builder: (context, child) {
Widget error = const Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'خطا در نمابش اطلاعات',
style: TextStyle(
color: Colors.black,
fontWeight: FontWeight.w700,
fontSize: 18,
),
textAlign: TextAlign.center,
),
],
),
);
if (child is Scaffold || child is Navigator) {
error = Scaffold(
body: SafeArea(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
error,
const Icon(
Icons.error_outline_rounded,
size: 130,
color: Colors.red,
),
],
),
),
);
}
ErrorWidget.builder = (errorDetails) => error;
return ScrollConfiguration(
behavior: DisableScrollEffect().copyWith(scrollbars: false),
child: Directionality(
textDirection: Initializer.instance.getTextDirection(),
child: child!,
),
);
},
theme: Utils.instance.getAppTheme(context, state.data),
debugShowCheckedModeBanner: false,
supportedLocales: Translator.supportedLocales(),
initialRoute: '/',
routes: {
'/': (context) => const MainScreen(),
},
);
}
return MaterialApp(
debugShowCheckedModeBanner: false,
builder: (context, child) {
return Container(color: Colors.white);
},
);
},
);
}
}