diff --git a/analysis_options.yaml b/analysis_options.yaml
index 0d290213..2e349a87 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -7,6 +7,9 @@
# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
+analyzer:
+ errors:
+ constant_identifier_names: ignore
include: package:flutter_lints/flutter.yaml
linter:
diff --git a/assets/fonts/fonnts.com-AftikaBlack.ttf b/assets/fonts/fonnts.com-AftikaBlack.ttf
new file mode 100644
index 00000000..538c917d
Binary files /dev/null and b/assets/fonts/fonnts.com-AftikaBlack.ttf differ
diff --git a/assets/fonts/fonnts.com-AftikaBold.ttf b/assets/fonts/fonnts.com-AftikaBold.ttf
new file mode 100644
index 00000000..2ff73322
Binary files /dev/null and b/assets/fonts/fonnts.com-AftikaBold.ttf differ
diff --git a/assets/fonts/fonnts.com-AftikaRegular.ttf b/assets/fonts/fonnts.com-AftikaRegular.ttf
new file mode 100644
index 00000000..5ca4dc50
Binary files /dev/null and b/assets/fonts/fonnts.com-AftikaRegular.ttf differ
diff --git a/assets/icons/3GangSwitch.svg b/assets/icons/3GangSwitch.svg
new file mode 100644
index 00000000..ecb9992b
--- /dev/null
+++ b/assets/icons/3GangSwitch.svg
@@ -0,0 +1,19 @@
+
diff --git a/assets/icons/AC.svg b/assets/icons/AC.svg
new file mode 100644
index 00000000..92f6fc59
--- /dev/null
+++ b/assets/icons/AC.svg
@@ -0,0 +1,14 @@
+
diff --git a/assets/icons/Curtain.svg b/assets/icons/Curtain.svg
new file mode 100644
index 00000000..a2e4f235
--- /dev/null
+++ b/assets/icons/Curtain.svg
@@ -0,0 +1,17 @@
+
diff --git a/assets/icons/Gateway.svg b/assets/icons/Gateway.svg
new file mode 100644
index 00000000..e293999e
--- /dev/null
+++ b/assets/icons/Gateway.svg
@@ -0,0 +1,19 @@
+
diff --git a/assets/icons/Light.svg b/assets/icons/Light.svg
new file mode 100644
index 00000000..c8cfff59
--- /dev/null
+++ b/assets/icons/Light.svg
@@ -0,0 +1,15 @@
+
diff --git a/assets/icons/ac_air.svg b/assets/icons/ac_air.svg
new file mode 100644
index 00000000..3c4fff0d
--- /dev/null
+++ b/assets/icons/ac_air.svg
@@ -0,0 +1,67 @@
+
diff --git a/assets/icons/ac_cooling.svg b/assets/icons/ac_cooling.svg
new file mode 100644
index 00000000..e95c0d4e
--- /dev/null
+++ b/assets/icons/ac_cooling.svg
@@ -0,0 +1,12 @@
+
diff --git a/assets/icons/ac_device.svg b/assets/icons/ac_device.svg
new file mode 100644
index 00000000..d5fbe2a6
--- /dev/null
+++ b/assets/icons/ac_device.svg
@@ -0,0 +1,15 @@
+
diff --git a/assets/icons/ac_fan_auto.svg b/assets/icons/ac_fan_auto.svg
new file mode 100644
index 00000000..0acacfef
--- /dev/null
+++ b/assets/icons/ac_fan_auto.svg
@@ -0,0 +1,9 @@
+
diff --git a/assets/icons/ac_fan_high.svg b/assets/icons/ac_fan_high.svg
new file mode 100644
index 00000000..d6131531
--- /dev/null
+++ b/assets/icons/ac_fan_high.svg
@@ -0,0 +1,12 @@
+
diff --git a/assets/icons/ac_fan_low.svg b/assets/icons/ac_fan_low.svg
new file mode 100644
index 00000000..f4bf56b7
--- /dev/null
+++ b/assets/icons/ac_fan_low.svg
@@ -0,0 +1,12 @@
+
diff --git a/assets/icons/ac_fan_middle.svg b/assets/icons/ac_fan_middle.svg
new file mode 100644
index 00000000..ee940238
--- /dev/null
+++ b/assets/icons/ac_fan_middle.svg
@@ -0,0 +1,12 @@
+
diff --git a/assets/icons/ac_heating.svg b/assets/icons/ac_heating.svg
new file mode 100644
index 00000000..47a160c8
--- /dev/null
+++ b/assets/icons/ac_heating.svg
@@ -0,0 +1,14 @@
+
diff --git a/assets/icons/ac_power.svg b/assets/icons/ac_power.svg
new file mode 100644
index 00000000..cc2127f0
--- /dev/null
+++ b/assets/icons/ac_power.svg
@@ -0,0 +1,5 @@
+
diff --git a/assets/icons/ac_power_off.svg b/assets/icons/ac_power_off.svg
new file mode 100644
index 00000000..70f7f9aa
--- /dev/null
+++ b/assets/icons/ac_power_off.svg
@@ -0,0 +1,5 @@
+
diff --git a/assets/icons/ac_sun.svg b/assets/icons/ac_sun.svg
new file mode 100644
index 00000000..33c7e01a
--- /dev/null
+++ b/assets/icons/ac_sun.svg
@@ -0,0 +1,16 @@
+
diff --git a/assets/icons/automation_functions/card_unlock.svg b/assets/icons/automation_functions/card_unlock.svg
new file mode 100644
index 00000000..dd77680a
--- /dev/null
+++ b/assets/icons/automation_functions/card_unlock.svg
@@ -0,0 +1,14 @@
+
diff --git a/assets/icons/automation_functions/current_temp.svg b/assets/icons/automation_functions/current_temp.svg
new file mode 100644
index 00000000..42cceb23
--- /dev/null
+++ b/assets/icons/automation_functions/current_temp.svg
@@ -0,0 +1,11 @@
+
diff --git a/assets/icons/automation_functions/doorbell.svg b/assets/icons/automation_functions/doorbell.svg
new file mode 100644
index 00000000..1dc515a9
--- /dev/null
+++ b/assets/icons/automation_functions/doorbell.svg
@@ -0,0 +1,13 @@
+
diff --git a/assets/icons/automation_functions/doorlock_normal_open.svg b/assets/icons/automation_functions/doorlock_normal_open.svg
new file mode 100644
index 00000000..8f4a5901
--- /dev/null
+++ b/assets/icons/automation_functions/doorlock_normal_open.svg
@@ -0,0 +1,12 @@
+
diff --git a/assets/icons/automation_functions/double_lock.svg b/assets/icons/automation_functions/double_lock.svg
new file mode 100644
index 00000000..d8ad971d
--- /dev/null
+++ b/assets/icons/automation_functions/double_lock.svg
@@ -0,0 +1,12 @@
+
diff --git a/assets/icons/automation_functions/fingerprint_unlock.svg b/assets/icons/automation_functions/fingerprint_unlock.svg
new file mode 100644
index 00000000..f9f5b84c
--- /dev/null
+++ b/assets/icons/automation_functions/fingerprint_unlock.svg
@@ -0,0 +1,79 @@
+
diff --git a/assets/icons/automation_functions/hijack_alarm.svg b/assets/icons/automation_functions/hijack_alarm.svg
new file mode 100644
index 00000000..e32997fb
--- /dev/null
+++ b/assets/icons/automation_functions/hijack_alarm.svg
@@ -0,0 +1,13 @@
+
diff --git a/assets/icons/automation_functions/lock_alarm.svg b/assets/icons/automation_functions/lock_alarm.svg
new file mode 100644
index 00000000..8bd2deeb
--- /dev/null
+++ b/assets/icons/automation_functions/lock_alarm.svg
@@ -0,0 +1,149 @@
+
diff --git a/assets/icons/automation_functions/motion.svg b/assets/icons/automation_functions/motion.svg
new file mode 100644
index 00000000..8d69463b
--- /dev/null
+++ b/assets/icons/automation_functions/motion.svg
@@ -0,0 +1,14 @@
+
diff --git a/assets/icons/automation_functions/password_unlock.svg b/assets/icons/automation_functions/password_unlock.svg
new file mode 100644
index 00000000..1920b69f
--- /dev/null
+++ b/assets/icons/automation_functions/password_unlock.svg
@@ -0,0 +1,16 @@
+
diff --git a/assets/icons/automation_functions/presence.svg b/assets/icons/automation_functions/presence.svg
new file mode 100644
index 00000000..d71a474d
--- /dev/null
+++ b/assets/icons/automation_functions/presence.svg
@@ -0,0 +1,18 @@
+
diff --git a/assets/icons/automation_functions/presence_state.svg b/assets/icons/automation_functions/presence_state.svg
new file mode 100644
index 00000000..d5de48e1
--- /dev/null
+++ b/assets/icons/automation_functions/presence_state.svg
@@ -0,0 +1,18 @@
+
diff --git a/assets/icons/automation_functions/remote_unlock_req.svg b/assets/icons/automation_functions/remote_unlock_req.svg
new file mode 100644
index 00000000..da128ff7
--- /dev/null
+++ b/assets/icons/automation_functions/remote_unlock_req.svg
@@ -0,0 +1,15 @@
+
diff --git a/assets/icons/automation_functions/remote_unlock_via_app.svg b/assets/icons/automation_functions/remote_unlock_via_app.svg
new file mode 100644
index 00000000..39fc859b
--- /dev/null
+++ b/assets/icons/automation_functions/remote_unlock_via_app.svg
@@ -0,0 +1,40 @@
+
diff --git a/assets/icons/automation_functions/residual_electricity.svg b/assets/icons/automation_functions/residual_electricity.svg
new file mode 100644
index 00000000..6a5b6127
--- /dev/null
+++ b/assets/icons/automation_functions/residual_electricity.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/icons/automation_functions/self_test_result.svg b/assets/icons/automation_functions/self_test_result.svg
new file mode 100644
index 00000000..8739327b
--- /dev/null
+++ b/assets/icons/automation_functions/self_test_result.svg
@@ -0,0 +1,23 @@
+
diff --git a/assets/icons/automation_functions/temp_password_unlock.svg b/assets/icons/automation_functions/temp_password_unlock.svg
new file mode 100644
index 00000000..98d7573c
--- /dev/null
+++ b/assets/icons/automation_functions/temp_password_unlock.svg
@@ -0,0 +1,16 @@
+
diff --git a/assets/icons/bathroom.svg b/assets/icons/bathroom.svg
new file mode 100644
index 00000000..51fc8b6a
--- /dev/null
+++ b/assets/icons/bathroom.svg
@@ -0,0 +1,29 @@
+
diff --git a/assets/icons/bedroom.svg b/assets/icons/bedroom.svg
new file mode 100644
index 00000000..d579b003
--- /dev/null
+++ b/assets/icons/bedroom.svg
@@ -0,0 +1,34 @@
+
diff --git a/assets/icons/celsius_degrees.svg b/assets/icons/celsius_degrees.svg
new file mode 100644
index 00000000..7acbd6e7
--- /dev/null
+++ b/assets/icons/celsius_degrees.svg
@@ -0,0 +1,7 @@
+
+
+
\ No newline at end of file
diff --git a/assets/icons/child_lock.svg b/assets/icons/child_lock.svg
new file mode 100644
index 00000000..6b0138bf
--- /dev/null
+++ b/assets/icons/child_lock.svg
@@ -0,0 +1,5 @@
+
diff --git a/assets/icons/doorLock.svg b/assets/icons/doorLock.svg
new file mode 100644
index 00000000..6f27673f
--- /dev/null
+++ b/assets/icons/doorLock.svg
@@ -0,0 +1,24 @@
+
diff --git a/assets/icons/door_un_look_ic.svg b/assets/icons/door_un_look_ic.svg
new file mode 100644
index 00000000..b647ec84
--- /dev/null
+++ b/assets/icons/door_un_look_ic.svg
@@ -0,0 +1,17 @@
+
diff --git a/assets/icons/dyi.svg b/assets/icons/dyi.svg
new file mode 100644
index 00000000..7da61e8e
--- /dev/null
+++ b/assets/icons/dyi.svg
@@ -0,0 +1,14 @@
+
diff --git a/assets/icons/factory_reset.svg b/assets/icons/factory_reset.svg
new file mode 100644
index 00000000..7a47f24b
--- /dev/null
+++ b/assets/icons/factory_reset.svg
@@ -0,0 +1,10 @@
+
diff --git a/assets/icons/fan_speed.svg b/assets/icons/fan_speed.svg
new file mode 100644
index 00000000..07a48834
--- /dev/null
+++ b/assets/icons/fan_speed.svg
@@ -0,0 +1,12 @@
+
diff --git a/assets/icons/far_detection.svg b/assets/icons/far_detection.svg
new file mode 100644
index 00000000..2827d94a
--- /dev/null
+++ b/assets/icons/far_detection.svg
@@ -0,0 +1,16 @@
+
diff --git a/assets/icons/far_detection_function.svg b/assets/icons/far_detection_function.svg
new file mode 100644
index 00000000..894b84ed
--- /dev/null
+++ b/assets/icons/far_detection_function.svg
@@ -0,0 +1,17 @@
+
diff --git a/assets/icons/freezing.svg b/assets/icons/freezing.svg
new file mode 100644
index 00000000..6c02f2e4
--- /dev/null
+++ b/assets/icons/freezing.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/help_description_ic.svg b/assets/icons/help_description_ic.svg
new file mode 100644
index 00000000..5f86b69b
--- /dev/null
+++ b/assets/icons/help_description_ic.svg
@@ -0,0 +1,17 @@
+
diff --git a/assets/icons/illuminance_record_ic.svg b/assets/icons/illuminance_record_ic.svg
new file mode 100644
index 00000000..a92935ff
--- /dev/null
+++ b/assets/icons/illuminance_record_ic.svg
@@ -0,0 +1,18 @@
+
diff --git a/assets/icons/indicator.svg b/assets/icons/indicator.svg
new file mode 100644
index 00000000..b58a976e
--- /dev/null
+++ b/assets/icons/indicator.svg
@@ -0,0 +1,12 @@
+
diff --git a/assets/icons/light_countdown.svg b/assets/icons/light_countdown.svg
new file mode 100644
index 00000000..94f65b9a
--- /dev/null
+++ b/assets/icons/light_countdown.svg
@@ -0,0 +1,42 @@
+
diff --git a/assets/icons/light_pulb.svg b/assets/icons/light_pulb.svg
new file mode 100644
index 00000000..c442fdaf
--- /dev/null
+++ b/assets/icons/light_pulb.svg
@@ -0,0 +1,37 @@
+
diff --git a/assets/icons/lockIcon.svg b/assets/icons/lockIcon.svg
new file mode 100644
index 00000000..a78161ca
--- /dev/null
+++ b/assets/icons/lockIcon.svg
@@ -0,0 +1,17 @@
+
diff --git a/assets/icons/master_state.svg b/assets/icons/master_state.svg
new file mode 100644
index 00000000..0aafae1a
--- /dev/null
+++ b/assets/icons/master_state.svg
@@ -0,0 +1,18 @@
+
diff --git a/assets/icons/motion_detection.svg b/assets/icons/motion_detection.svg
new file mode 100644
index 00000000..a9b2d685
--- /dev/null
+++ b/assets/icons/motion_detection.svg
@@ -0,0 +1,21 @@
+
diff --git a/assets/icons/motionless_detection.svg b/assets/icons/motionless_detection.svg
new file mode 100644
index 00000000..25a767c1
--- /dev/null
+++ b/assets/icons/motionless_detection.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/nobody_time.svg b/assets/icons/nobody_time.svg
new file mode 100644
index 00000000..df80b517
--- /dev/null
+++ b/assets/icons/nobody_time.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/icons/office.svg b/assets/icons/office.svg
new file mode 100644
index 00000000..03a2badd
--- /dev/null
+++ b/assets/icons/office.svg
@@ -0,0 +1,40 @@
+
diff --git a/assets/icons/parlour.svg b/assets/icons/parlour.svg
new file mode 100644
index 00000000..3298393a
--- /dev/null
+++ b/assets/icons/parlour.svg
@@ -0,0 +1,30 @@
+
diff --git a/assets/icons/presence_record_ic.svg b/assets/icons/presence_record_ic.svg
new file mode 100644
index 00000000..0bc133f7
--- /dev/null
+++ b/assets/icons/presence_record_ic.svg
@@ -0,0 +1,22 @@
+
diff --git a/assets/icons/reset_off.svg b/assets/icons/reset_off.svg
new file mode 100644
index 00000000..eac88f2b
--- /dev/null
+++ b/assets/icons/reset_off.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/scene_child_lock.svg b/assets/icons/scene_child_lock.svg
new file mode 100644
index 00000000..7e56164a
--- /dev/null
+++ b/assets/icons/scene_child_lock.svg
@@ -0,0 +1,12 @@
+
diff --git a/assets/icons/scene_child_unlock.svg b/assets/icons/scene_child_unlock.svg
new file mode 100644
index 00000000..4eafbdea
--- /dev/null
+++ b/assets/icons/scene_child_unlock.svg
@@ -0,0 +1,12 @@
+
diff --git a/assets/icons/scene_refresh.svg b/assets/icons/scene_refresh.svg
new file mode 100644
index 00000000..c54ffb04
--- /dev/null
+++ b/assets/icons/scene_refresh.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/sensitivity.svg b/assets/icons/sensitivity.svg
new file mode 100644
index 00000000..b75ebd3e
--- /dev/null
+++ b/assets/icons/sensitivity.svg
@@ -0,0 +1,14 @@
+
diff --git a/assets/icons/sensor_motion_ic.svg b/assets/icons/sensor_motion_ic.svg
new file mode 100644
index 00000000..ceb4080a
--- /dev/null
+++ b/assets/icons/sensor_motion_ic.svg
@@ -0,0 +1,16 @@
+
diff --git a/assets/icons/sensor_presence_ic.svg b/assets/icons/sensor_presence_ic.svg
new file mode 100644
index 00000000..e30b109c
--- /dev/null
+++ b/assets/icons/sensor_presence_ic.svg
@@ -0,0 +1,13 @@
+
diff --git a/assets/icons/sensor_vacant_ic.svg b/assets/icons/sensor_vacant_ic.svg
new file mode 100644
index 00000000..8ee00e79
--- /dev/null
+++ b/assets/icons/sensor_vacant_ic.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/sensors.svg b/assets/icons/sensors.svg
new file mode 100644
index 00000000..7fbb1506
--- /dev/null
+++ b/assets/icons/sensors.svg
@@ -0,0 +1,19 @@
+
diff --git a/assets/icons/sesitivity_operation_icon.svg b/assets/icons/sesitivity_operation_icon.svg
new file mode 100644
index 00000000..612148c5
--- /dev/null
+++ b/assets/icons/sesitivity_operation_icon.svg
@@ -0,0 +1,5 @@
+
diff --git a/assets/icons/switch_alarm_sound.svg b/assets/icons/switch_alarm_sound.svg
new file mode 100644
index 00000000..db645338
--- /dev/null
+++ b/assets/icons/switch_alarm_sound.svg
@@ -0,0 +1,10 @@
+
diff --git a/assets/icons/tempreture.svg b/assets/icons/tempreture.svg
new file mode 100644
index 00000000..448083a7
--- /dev/null
+++ b/assets/icons/tempreture.svg
@@ -0,0 +1,11 @@
+
diff --git a/devtools_options.yaml b/devtools_options.yaml
index 2bc8e05f..6ee932ce 100644
--- a/devtools_options.yaml
+++ b/devtools_options.yaml
@@ -1,4 +1,4 @@
description: This file stores settings for Dart & Flutter DevTools.
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
extensions:
- - provider: true
\ No newline at end of file
+ - provider: true
diff --git a/lib/core/extension/build_context_x.dart b/lib/core/extension/build_context_x.dart
new file mode 100644
index 00000000..50bc5972
--- /dev/null
+++ b/lib/core/extension/build_context_x.dart
@@ -0,0 +1,17 @@
+import 'package:flutter/material.dart';
+
+extension BuildContextExt on BuildContext {
+ ThemeData get theme => Theme.of(this);
+
+ TextTheme get textTheme => Theme.of(this).textTheme;
+
+ AppBarTheme get appBarTheme => Theme.of(this).appBarTheme;
+
+ Size get screenSize => MediaQuery.of(this).size;
+
+ double get screenWidth => MediaQuery.of(this).size.width;
+
+ double get screenHeight => MediaQuery.of(this).size.height;
+
+ double get textScale => MediaQuery.textScalerOf(this).scale(1);
+}
diff --git a/lib/core/theme/app_theme.dart b/lib/core/theme/app_theme.dart
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/lib/core/theme/app_theme.dart
@@ -0,0 +1 @@
+
diff --git a/lib/main.dart b/lib/main.dart
index a4f4fcb8..90c643cc 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,14 +1,9 @@
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
-import 'package:syncrow_web/pages/access_management/view/access_management.dart';
import 'package:syncrow_web/pages/auth/bloc/auth_bloc.dart';
-import 'package:syncrow_web/pages/auth/view/login_page.dart';
import 'package:syncrow_web/pages/home/bloc/home_bloc.dart';
-import 'package:syncrow_web/pages/home/view/home_page.dart';
-import 'package:syncrow_web/pages/spaseManagementIcon.dart';
import 'package:syncrow_web/pages/visitor_password/bloc/visitor_password_bloc.dart';
-import 'package:syncrow_web/pages/visitor_password/view/visitor_password_dialog.dart';
import 'package:go_router/go_router.dart';
import 'package:syncrow_web/services/locator.dart';
import 'package:syncrow_web/utils/app_routes.dart';
@@ -19,14 +14,15 @@ Future main() async {
WidgetsFlutterBinding.ensureInitialized();
initialSetup();
String checkToken = await AuthBloc.getTokenAndValidate();
- GoRouter router = GoRouter(
- initialLocation: checkToken == 'Success' ? RoutesConst.home :RoutesConst.main ,
- routes: AppRoutes.getRoutes(),
+ GoRouter router = GoRouter(
+ initialLocation: checkToken == 'Success' ? RoutesConst.home : RoutesConst.auth,
+ routes: AppRoutes.getRoutes(),
);
runApp(MyApp(
router: router,
));
}
+
class MyApp extends StatelessWidget {
final GoRouter router;
const MyApp({
@@ -37,48 +33,42 @@ class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiBlocProvider(
- providers: [
- BlocProvider(create: (context) => HomeBloc()),
- BlocProvider(
- create: (context) => VisitorPasswordBloc(),)
- ],
- child: MaterialApp.router(
- debugShowCheckedModeBanner: false, // Hide debug banner
- scrollBehavior: const MaterialScrollBehavior().copyWith(
- dragDevices: {
- PointerDeviceKind.mouse,
- PointerDeviceKind.touch,
- PointerDeviceKind.stylus,
- PointerDeviceKind.unknown,
- },
- ),
-
- theme: ThemeData(
- textTheme: const TextTheme(
- bodySmall: TextStyle(fontSize: 13, color: ColorsManager.whiteColors, fontWeight: FontWeight.bold),
- bodyMedium: TextStyle(color: Colors.black87, fontSize: 14),
- bodyLarge: TextStyle(fontSize: 16, color: Colors.white),
- headlineSmall: TextStyle(color: Colors.black87, fontSize: 18),
- headlineMedium: TextStyle(color: Colors.black87, fontSize: 20),
- headlineLarge: TextStyle(
- color: Colors.white,
- fontSize: 24,
- fontWeight: FontWeight.bold,
+ providers: [
+ BlocProvider(create: (context) => HomeBloc()),
+ BlocProvider(
+ create: (context) => VisitorPasswordBloc(),
+ )
+ ],
+ child: MaterialApp.router(
+ debugShowCheckedModeBanner: false, // Hide debug banner
+ scrollBehavior: const MaterialScrollBehavior().copyWith(
+ dragDevices: {
+ PointerDeviceKind.mouse,
+ PointerDeviceKind.touch,
+ PointerDeviceKind.stylus,
+ PointerDeviceKind.unknown,
+ },
),
- ),
- colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), // Set up color scheme
- useMaterial3: true, // Enable Material 3
- ),
- routeInformationProvider: router.routeInformationProvider,
- routerDelegate: router.routerDelegate,
- routeInformationParser: router.routeInformationParser,
-
- ));
+ theme: ThemeData(
+ fontFamily: 'Aftika',
+ textTheme: const TextTheme(
+ bodySmall: TextStyle(
+ fontSize: 13, color: ColorsManager.whiteColors, fontWeight: FontWeight.bold),
+ bodyMedium: TextStyle(color: Colors.black87, fontSize: 14),
+ bodyLarge: TextStyle(fontSize: 16, color: Colors.white),
+ headlineSmall: TextStyle(color: Colors.black87, fontSize: 18),
+ headlineMedium: TextStyle(color: Colors.black87, fontSize: 20),
+ headlineLarge: TextStyle(
+ color: Colors.white,
+ fontSize: 24,
+ fontWeight: FontWeight.bold,
+ ),
+ ),
+ ),
+ routeInformationProvider: router.routeInformationProvider,
+ routerDelegate: router.routerDelegate,
+ routeInformationParser: router.routeInformationParser,
+ ));
}
}
-
-
-
-
-
diff --git a/lib/pages/access_management/bloc/access_bloc.dart b/lib/pages/access_management/bloc/access_bloc.dart
index 0ba74a52..473d19bd 100644
--- a/lib/pages/access_management/bloc/access_bloc.dart
+++ b/lib/pages/access_management/bloc/access_bloc.dart
@@ -22,16 +22,15 @@ class AccessBloc extends Bloc {
int? effectiveTimeTimeStamp;
int? expirationTimeTimeStamp;
- TextEditingController passwordName= TextEditingController();
+ TextEditingController passwordName = TextEditingController();
List filteredData = [];
- List data=[];
+ List data = [];
- Future _onFetchTableData(
- FetchTableData event, Emitter emit) async {
+ Future _onFetchTableData(FetchTableData event, Emitter emit) async {
try {
emit(AccessLoaded());
- data = await AccessMangApi().fetchVisitorPassword();
- filteredData= data;
+ data = await AccessMangApi().fetchVisitorPassword();
+ filteredData = data;
updateTabsCount();
emit(TableLoaded(data));
} catch (e) {
@@ -40,7 +39,8 @@ class AccessBloc extends Bloc {
}
void updateTabsCount() {
- int toBeEffectiveCount = data.where((item) => item.passwordStatus.value== 'To be effective').length;
+ int toBeEffectiveCount =
+ data.where((item) => item.passwordStatus.value == 'To be effective').length;
int effectiveCount = data.where((item) => item.passwordStatus.value == 'Effective').length;
int expiredCount = data.where((item) => item.passwordStatus.value == 'Expired').length;
tabs[1] = 'To Be Effective ($toBeEffectiveCount)';
@@ -48,29 +48,21 @@ class AccessBloc extends Bloc {
tabs[3] = 'Expired ($expiredCount)';
}
-
int selectedIndex = 0;
- final List tabs = [
- 'All',
- 'To Be Effective (0)',
- 'Effective (0)',
- 'Expired'
- ];
-
+ final List tabs = ['All', 'To Be Effective (0)', 'Effective (0)', 'Expired'];
Future selectFilterTap(TabChangedEvent event, Emitter emit) async {
try {
emit(AccessLoaded());
- selectedIndex= event.selectedIndex;
+ selectedIndex = event.selectedIndex;
emit(AccessInitial());
emit(TableLoaded(data));
} catch (e) {
- emit(FailedState( e.toString()));
+ emit(FailedState(e.toString()));
return;
}
}
-
Future selectTime(SelectTime event, Emitter emit) async {
emit(AccessLoaded());
final DateTime? picked = await showDatePicker(
@@ -80,37 +72,39 @@ class AccessBloc extends Bloc {
lastDate: DateTime(2101),
);
if (picked != null) {
- final selectedDateTime = DateTime(
- picked.year,
- picked.month,
- picked.day,
-
- );
- final selectedTimestamp = DateTime(
- selectedDateTime.year,
- selectedDateTime.month,
- selectedDateTime.day,
- selectedDateTime.hour,
- selectedDateTime.minute,
- ).millisecondsSinceEpoch ~/ 1000; // Divide by 1000 to remove milliseconds
- if (event.isStart) {
- if (expirationTimeTimeStamp != null && selectedTimestamp > expirationTimeTimeStamp!) {
- CustomSnackBar.displaySnackBar('Effective Time cannot be later than Expiration Time.');
- } else {
- startTime = selectedDateTime.toString().split('.').first; // Remove seconds and milliseconds
- effectiveTimeTimeStamp = selectedTimestamp;
- }
+ final selectedDateTime = DateTime(
+ picked.year,
+ picked.month,
+ picked.day,
+ );
+ final selectedTimestamp = DateTime(
+ selectedDateTime.year,
+ selectedDateTime.month,
+ selectedDateTime.day,
+ selectedDateTime.hour,
+ selectedDateTime.minute,
+ ).millisecondsSinceEpoch ~/
+ 1000; // Divide by 1000 to remove milliseconds
+ if (event.isStart) {
+ if (expirationTimeTimeStamp != null && selectedTimestamp > expirationTimeTimeStamp!) {
+ CustomSnackBar.displaySnackBar('Effective Time cannot be later than Expiration Time.');
} else {
- if (effectiveTimeTimeStamp != null && selectedTimestamp < effectiveTimeTimeStamp!) {
- CustomSnackBar.displaySnackBar('Expiration Time cannot be earlier than Effective Time.');
- } else {
- endTime = selectedDateTime.toString().split('.').first; // Remove seconds and milliseconds
- expirationTimeTimeStamp = selectedTimestamp;
- }
+ startTime =
+ selectedDateTime.toString().split('.').first; // Remove seconds and milliseconds
+ effectiveTimeTimeStamp = selectedTimestamp;
}
+ } else {
+ if (effectiveTimeTimeStamp != null && selectedTimestamp < effectiveTimeTimeStamp!) {
+ CustomSnackBar.displaySnackBar('Expiration Time cannot be earlier than Effective Time.');
+ } else {
+ endTime = selectedDateTime.toString().split('.').first; // Remove seconds and milliseconds
+ expirationTimeTimeStamp = selectedTimestamp;
+ }
+ }
}
emit(ChangeTimeState());
}
+
Future _filterData(FilterDataEvent event, Emitter emit) async {
emit(AccessLoaded());
try {
@@ -118,15 +112,22 @@ class AccessBloc extends Bloc {
bool matchesCriteria = true;
// Convert timestamp to DateTime and extract date component
- DateTime effectiveDate = DateTime.fromMillisecondsSinceEpoch(int.parse(item.effectiveTime.toString()) * 1000).toUtc().toLocal();
- DateTime invalidDate = DateTime.fromMillisecondsSinceEpoch(int.parse(item.invalidTime.toString()) * 1000).toUtc().toLocal();
- DateTime effectiveDateOnly = DateTime(effectiveDate.year, effectiveDate.month, effectiveDate.day);
+ DateTime effectiveDate =
+ DateTime.fromMillisecondsSinceEpoch(int.parse(item.effectiveTime.toString()) * 1000)
+ .toUtc()
+ .toLocal();
+ DateTime invalidDate =
+ DateTime.fromMillisecondsSinceEpoch(int.parse(item.invalidTime.toString()) * 1000)
+ .toUtc()
+ .toLocal();
+ DateTime effectiveDateOnly =
+ DateTime(effectiveDate.year, effectiveDate.month, effectiveDate.day);
DateTime invalidDateOnly = DateTime(invalidDate.year, invalidDate.month, invalidDate.day);
// Filter by password name
if (event.passwordName != null && event.passwordName!.isNotEmpty) {
- final bool matchesName = item.passwordName != null &&
- item.passwordName.contains(event.passwordName);
+ final bool matchesName =
+ item.passwordName != null && item.passwordName.contains(event.passwordName);
if (!matchesName) {
matchesCriteria = false;
}
@@ -134,7 +135,8 @@ class AccessBloc extends Bloc {
// Filter by start date only
if (event.startTime != null && event.endTime == null) {
- DateTime startDateOnly = DateTime.fromMillisecondsSinceEpoch(event.startTime! * 1000).toUtc().toLocal();
+ DateTime startDateOnly =
+ DateTime.fromMillisecondsSinceEpoch(event.startTime! * 1000).toUtc().toLocal();
startDateOnly = DateTime(startDateOnly.year, startDateOnly.month, startDateOnly.day);
if (effectiveDateOnly.isBefore(startDateOnly)) {
matchesCriteria = false;
@@ -143,7 +145,8 @@ class AccessBloc extends Bloc {
// Filter by end date only
if (event.endTime != null && event.startTime == null) {
- DateTime endDateOnly = DateTime.fromMillisecondsSinceEpoch(event.endTime! * 1000).toUtc().toLocal();
+ DateTime endDateOnly =
+ DateTime.fromMillisecondsSinceEpoch(event.endTime! * 1000).toUtc().toLocal();
endDateOnly = DateTime(endDateOnly.year, endDateOnly.month, endDateOnly.day);
if (invalidDateOnly.isAfter(endDateOnly)) {
matchesCriteria = false;
@@ -152,8 +155,10 @@ class AccessBloc extends Bloc {
// Filter by both start date and end date
if (event.startTime != null && event.endTime != null) {
- DateTime startDateOnly = DateTime.fromMillisecondsSinceEpoch(event.startTime! * 1000).toUtc().toLocal();
- DateTime endDateOnly = DateTime.fromMillisecondsSinceEpoch(event.endTime! * 1000).toUtc().toLocal();
+ DateTime startDateOnly =
+ DateTime.fromMillisecondsSinceEpoch(event.startTime! * 1000).toUtc().toLocal();
+ DateTime endDateOnly =
+ DateTime.fromMillisecondsSinceEpoch(event.endTime! * 1000).toUtc().toLocal();
startDateOnly = DateTime(startDateOnly.year, startDateOnly.month, startDateOnly.day);
endDateOnly = DateTime(endDateOnly.year, endDateOnly.month, endDateOnly.day);
if (effectiveDateOnly.isBefore(startDateOnly) || invalidDateOnly.isAfter(endDateOnly)) {
@@ -179,16 +184,14 @@ class AccessBloc extends Bloc {
}
}
-
-
- resetSearch(ResetSearch event, Emitter emit) async{
+ resetSearch(ResetSearch event, Emitter emit) async {
emit(AccessLoaded());
- startTime = 'Start Time';
- endTime = 'End Time';
- passwordName.clear();
- selectedIndex=0;
- effectiveTimeTimeStamp=null;
- expirationTimeTimeStamp=null;
+ startTime = 'Start Time';
+ endTime = 'End Time';
+ passwordName.clear();
+ selectedIndex = 0;
+ effectiveTimeTimeStamp = null;
+ expirationTimeTimeStamp = null;
add(FetchTableData());
}
@@ -206,7 +209,8 @@ class AccessBloc extends Bloc {
filteredData = data;
break;
case 1: // To Be Effective
- filteredData = data.where((item) => item.passwordStatus.value == "To Be Effective").toList();
+ filteredData =
+ data.where((item) => item.passwordStatus.value == "To Be Effective").toList();
break;
case 2: // Effective
filteredData = data.where((item) => item.passwordStatus.value == "Effective").toList();
@@ -221,12 +225,10 @@ class AccessBloc extends Bloc {
selectedTabIndex: selectedIndex,
passwordName: passwordName.text.toLowerCase(),
startTime: effectiveTimeTimeStamp,
- endTime: expirationTimeTimeStamp
- ));
+ endTime: expirationTimeTimeStamp));
emit(TableLoaded(filteredData));
} catch (e) {
emit(FailedState(e.toString()));
}
}
-
}
diff --git a/lib/pages/access_management/bloc/access_event.dart b/lib/pages/access_management/bloc/access_event.dart
index f2f631b4..1bd7dbd3 100644
--- a/lib/pages/access_management/bloc/access_event.dart
+++ b/lib/pages/access_management/bloc/access_event.dart
@@ -1,14 +1,15 @@
-
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
-abstract class AccessEvent extends Equatable {
+abstract class AccessEvent extends Equatable {
const AccessEvent();
@override
List