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.

186 lines
5.9KB

  1. import 'package:farm_tpf/presentation/screens/login/login_page.dart';
  2. import 'package:farm_tpf/presentation/screens/scan_qr/cubit/scan_qr_code_cubit.dart';
  3. import 'package:farm_tpf/presentation/screens/tabbar/tabbar.dart';
  4. import 'package:farm_tpf/routes/route_name.dart';
  5. import 'package:farm_tpf/routes/routes.dart';
  6. import 'package:farm_tpf/services/firebase_notification_service.dart';
  7. import 'package:farm_tpf/themes/themes.dart';
  8. import 'package:flutter/material.dart';
  9. import 'package:flutter_bloc/flutter_bloc.dart';
  10. import 'package:flutter_localizations/flutter_localizations.dart';
  11. import 'package:flutter_screenutil/flutter_screenutil.dart';
  12. import 'package:get/get.dart';
  13. import 'authentication/bloc/authentication_bloc.dart';
  14. import 'common/const_enum.dart';
  15. import 'data/repository/auth_repository.dart';
  16. import 'string/app_strings.dart';
  17. class App extends StatelessWidget {
  18. final AuthenticationRepository authenticationRepository;
  19. const App({
  20. Key? key,
  21. required this.authenticationRepository,
  22. }) : super(key: key);
  23. @override
  24. Widget build(BuildContext context) {
  25. return RepositoryProvider.value(
  26. value: authenticationRepository,
  27. child: MultiBlocProvider(
  28. providers: [
  29. BlocProvider(
  30. create: (_) => AuthenticationBloc(
  31. repository: authenticationRepository,
  32. ),
  33. ),
  34. BlocProvider(
  35. create: (_) => ScanQrCodeCubit(),
  36. ),
  37. // BlocProvider(
  38. // create: (_) => NotificationBloc(Repository()),
  39. // ),
  40. // BlocProvider(
  41. // create: (_) => WorkCubit(),
  42. // ),
  43. // BlocProvider(
  44. // create: (_) => FertilizationCubit(),
  45. // ),
  46. // BlocProvider(
  47. // create: (_) => InfomationFertilizationCubit(),
  48. // ),
  49. // BlocProvider(
  50. // create: (_) => WorkDetailCubit(),
  51. // ),
  52. // BlocProvider(
  53. // create: (_) => CowCubit(),
  54. // ),
  55. // BlocProvider(
  56. // create: (_) => NoteCubit(),
  57. // ),
  58. // BlocProvider(
  59. // create: (_) => WorkSlipCubit(),
  60. // ),
  61. // BlocProvider(
  62. // create: (_) => FertilityCheckupCubit(),
  63. // ),
  64. // BlocProvider(
  65. // create: (_) => InseminateCubit(),
  66. // ),
  67. // BlocProvider(
  68. // create: (_) => ReproductiveTreatmentCubit(),
  69. // ),
  70. // BlocProvider(
  71. // create: (_) => AntenatalCheckupCubit(),
  72. // ),
  73. // BlocProvider(
  74. // create: (_) => CreateWorkCubit(),
  75. // ),
  76. // BlocProvider(
  77. // create: (_) => NhapBoCubit(),
  78. // ),
  79. // BlocProvider(
  80. // create: (_) => NhapBeCubit(),
  81. // ),
  82. // BlocProvider(
  83. // create: (_) => DanBoBloc(),
  84. // ),
  85. // BlocProvider(
  86. // create: (_) => GiaPhaCubit(),
  87. // ),
  88. // BlocProvider(
  89. // create: (_) => ThuYBoBenhCubit(),
  90. // ),
  91. // BlocProvider(
  92. // create: (_) => KhamBenhCubit(),
  93. // ),
  94. // BlocProvider(
  95. // create: (_) => DieuTriCubit(),
  96. // ),
  97. // BlocProvider(
  98. // create: (_) => LichSuDieuTriCubit(),
  99. // ),
  100. // BlocProvider(
  101. // create: (_) => BoBenhBloc(),
  102. // ),
  103. // BlocProvider(
  104. // create: (_) => ThanhLyCubit(),
  105. // ),
  106. // BlocProvider(
  107. // create: (_) => ChangePasswordCubit(),
  108. // ),
  109. // BlocProvider(
  110. // create: (_) => BoBenhThanhLyBloc(),
  111. // ),
  112. ],
  113. child: const AppView(),
  114. ),
  115. );
  116. }
  117. }
  118. class AppView extends StatefulWidget {
  119. const AppView({
  120. Key? key,
  121. }) : super(key: key);
  122. @override
  123. _AppViewState createState() => _AppViewState();
  124. }
  125. class _AppViewState extends State<AppView> {
  126. @override
  127. Widget build(BuildContext context) {
  128. return ScreenUtilInit(
  129. designSize: const Size(375, 812),
  130. minTextAdapt: true,
  131. splitScreenMode: true,
  132. builder: (BuildContext context, Widget? child) {
  133. return GetMaterialApp(
  134. title: 'LaFarm',
  135. debugShowCheckedModeBanner: false,
  136. onGenerateRoute: Routes.buildRoutes,
  137. initialRoute: RouteName.splash,
  138. theme: AppTheme.lightThem,
  139. localizationsDelegates: [
  140. GlobalMaterialLocalizations.delegate,
  141. GlobalCupertinoLocalizations.delegate,
  142. GlobalWidgetsLocalizations.delegate,
  143. ],
  144. supportedLocales: const [
  145. Locale('vi', 'VN'),
  146. Locale('en', 'US'),
  147. ],
  148. locale: const Locale('vi', 'VN'),
  149. fallbackLocale: const Locale('vi', 'VN'),
  150. translations: AppStrings(),
  151. builder: (context, child) {
  152. final mediaQueryData = MediaQuery.of(context);
  153. final scale = mediaQueryData.textScaleFactor.clamp(1.0, 1.2);
  154. FirebaseNotificationService.initService();
  155. return MediaQuery(
  156. data: MediaQuery.of(context).copyWith(textScaleFactor: scale),
  157. child: BlocListener<AuthenticationBloc, AuthenticationState>(
  158. listener: (context, state) {
  159. switch (state.status) {
  160. case AuthenticationStatus.authenticated:
  161. Get.offAll(() => TabbarScreen());
  162. break;
  163. case AuthenticationStatus.unauthenticated:
  164. Get.offAll(() => const LoginPage());
  165. break;
  166. default:
  167. Get.offAll(() => const LoginPage());
  168. break;
  169. }
  170. },
  171. child: child!,
  172. ),
  173. );
  174. },
  175. );
  176. },
  177. );
  178. }
  179. }