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.

106 lines
3.5 KiB

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