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

1 year ago
  1. import 'dart:async';
  2. import 'package:flutter/foundation.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:flutter/services.dart';
  5. import 'package:flutter_bloc/flutter_bloc.dart';
  6. import 'package:sonnat/core/language/language_cubit.dart';
  7. import 'package:sonnat/core/language/translator.dart';
  8. import 'package:sonnat/core/theme/cubit/theme_cubit.dart';
  9. import 'package:sonnat/core/utils/app_utils.dart';
  10. import 'package:sonnat/core/utils/base_cubit_type.dart';
  11. import 'package:sonnat/core/utils/initializer.dart';
  12. import 'package:sonnat/features/main/main_screen.dart';
  13. void main() async {
  14. WidgetsFlutterBinding.ensureInitialized();
  15. await Initializer.instance.initialHive();
  16. if (!kDebugMode) {
  17. await runZonedGuarded<Future<void>>(() async {
  18. runApp(const MyApp());
  19. }, (error, stackTrace) async {});
  20. } else {
  21. runApp(const MyApp());
  22. }
  23. }
  24. class MyApp extends StatelessWidget {
  25. const MyApp({super.key});
  26. @override
  27. Widget build(BuildContext context) {
  28. SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);
  29. return MultiBlocProvider(
  30. providers: [
  31. BlocProvider(create: (context) => LanguageCubit()),
  32. BlocProvider(create: (context) => ThemeCubit()),
  33. ],
  34. child: const MyHomePage(),
  35. );
  36. }
  37. }
  38. class MyHomePage extends StatefulWidget {
  39. const MyHomePage({super.key});
  40. @override
  41. State<MyHomePage> createState() => _MyHomePageState();
  42. }
  43. class _MyHomePageState extends State<MyHomePage> {
  44. @override
  45. Widget build(BuildContext context) {
  46. return BlocBuilder<LanguageCubit, BaseCubitType<LanguageState>>(
  47. builder: (context, state) {
  48. if (state.eventName == LanguageState.loaded) {
  49. Initializer.instance.setAppDirection(
  50. state.data == CurrentLanguage.fa || state.data == CurrentLanguage.ar ? 'rtl' : 'ltr',
  51. );
  52. return MaterialApp(
  53. builder: (context, child) {
  54. Widget error = const Center(
  55. child: Column(
  56. mainAxisAlignment: MainAxisAlignment.center,
  57. children: [
  58. Text(
  59. 'خطا در نمابش اطلاعات',
  60. style: TextStyle(
  61. color: Colors.black,
  62. fontWeight: FontWeight.w700,
  63. fontSize: 18,
  64. ),
  65. textAlign: TextAlign.center,
  66. ),
  67. ],
  68. ),
  69. );
  70. if (child is Scaffold || child is Navigator) {
  71. error = Scaffold(
  72. body: SafeArea(
  73. child: Column(
  74. mainAxisAlignment: MainAxisAlignment.center,
  75. children: [
  76. error,
  77. const Icon(
  78. Icons.error_outline_rounded,
  79. size: 130,
  80. color: Colors.red,
  81. ),
  82. ],
  83. ),
  84. ),
  85. );
  86. }
  87. ErrorWidget.builder = (errorDetails) => error;
  88. return ScrollConfiguration(
  89. behavior: DisableScrollEffect().copyWith(scrollbars: false),
  90. child: Directionality(
  91. textDirection: Initializer.instance.getTextDirection(),
  92. child: child!,
  93. ),
  94. );
  95. },
  96. theme: Utils.instance.getAppTheme(context, state.data),
  97. debugShowCheckedModeBanner: false,
  98. supportedLocales: Translator.supportedLocales(),
  99. initialRoute: '/',
  100. routes: {
  101. '/': (context) => const MainScreen(),
  102. },
  103. );
  104. }
  105. return MaterialApp(
  106. debugShowCheckedModeBanner: false,
  107. builder: (context, child) {
  108. return Container(color: Colors.white);
  109. },
  110. );
  111. },
  112. );
  113. }
  114. }