diff --git a/assets/images/grid.svg b/assets/images/grid.svg
new file mode 100644
index 00000000..f3e41133
--- /dev/null
+++ b/assets/images/grid.svg
@@ -0,0 +1,18 @@
+
diff --git a/devtools_options.yaml b/devtools_options.yaml
new file mode 100644
index 00000000..2bc8e05f
--- /dev/null
+++ b/devtools_options.yaml
@@ -0,0 +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
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
new file mode 100644
index 00000000..85fd7a99
--- /dev/null
+++ b/ios/Podfile.lock
@@ -0,0 +1,36 @@
+PODS:
+ - Flutter (1.0.0)
+ - flutter_secure_storage (6.0.0):
+ - Flutter
+ - path_provider_foundation (0.0.1):
+ - Flutter
+ - FlutterMacOS
+ - shared_preferences_foundation (0.0.1):
+ - Flutter
+ - FlutterMacOS
+
+DEPENDENCIES:
+ - Flutter (from `Flutter`)
+ - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
+ - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
+ - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
+
+EXTERNAL SOURCES:
+ Flutter:
+ :path: Flutter
+ flutter_secure_storage:
+ :path: ".symlinks/plugins/flutter_secure_storage/ios"
+ path_provider_foundation:
+ :path: ".symlinks/plugins/path_provider_foundation/darwin"
+ shared_preferences_foundation:
+ :path: ".symlinks/plugins/shared_preferences_foundation/darwin"
+
+SPEC CHECKSUMS:
+ Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
+ flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12
+ path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
+ shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
+
+PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796
+
+COCOAPODS: 1.15.2
diff --git a/lib/main.dart b/lib/main.dart
index 9c68747d..a4f4fcb8 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,30 +1,39 @@
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';
import 'package:syncrow_web/utils/color_manager.dart';
+import 'package:syncrow_web/utils/constants/routes_const.dart';
Future main() async {
WidgetsFlutterBinding.ensureInitialized();
- initialSetup(); // Perform initial setup, e.g., dependency injection
+ initialSetup();
String checkToken = await AuthBloc.getTokenAndValidate();
+ GoRouter router = GoRouter(
+ initialLocation: checkToken == 'Success' ? RoutesConst.home :RoutesConst.main ,
+ routes: AppRoutes.getRoutes(),
+ );
runApp(MyApp(
- isLoggedIn: checkToken,
+ router: router,
));
}
-
class MyApp extends StatelessWidget {
- final dynamic isLoggedIn;
+ final GoRouter router;
const MyApp({
super.key,
- required this.isLoggedIn,
+ required this.router,
});
+
@override
Widget build(BuildContext context) {
return MultiBlocProvider(
@@ -33,7 +42,7 @@ class MyApp extends StatelessWidget {
BlocProvider(
create: (context) => VisitorPasswordBloc(),)
],
- child: MaterialApp(
+ child: MaterialApp.router(
debugShowCheckedModeBanner: false, // Hide debug banner
scrollBehavior: const MaterialScrollBehavior().copyWith(
dragDevices: {
@@ -60,8 +69,16 @@ class MyApp extends StatelessWidget {
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), // Set up color scheme
useMaterial3: true, // Enable Material 3
),
- // home:VisitorPasswordDialog(),
- home:isLoggedIn == 'Success' ? const HomePage() : const LoginPage(),
+
+ 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 dd60237e..0ba74a52 100644
--- a/lib/pages/access_management/bloc/access_bloc.dart
+++ b/lib/pages/access_management/bloc/access_bloc.dart
@@ -5,7 +5,7 @@ import 'package:syncrow_web/pages/access_management/bloc/access_state.dart';
import 'package:syncrow_web/pages/access_management/model/password_model.dart';
import 'package:syncrow_web/services/access_mang_api.dart';
import 'package:syncrow_web/utils/color_manager.dart';
-import 'package:syncrow_web/utils/constants/const.dart';
+import 'package:syncrow_web/utils/constants/app_enum.dart';
import 'package:syncrow_web/utils/snack_bar.dart';
class AccessBloc extends Bloc {
diff --git a/lib/pages/access_management/model/password_model.dart b/lib/pages/access_management/model/password_model.dart
index 584e9b7e..e16cc586 100644
--- a/lib/pages/access_management/model/password_model.dart
+++ b/lib/pages/access_management/model/password_model.dart
@@ -1,4 +1,4 @@
-import 'package:syncrow_web/utils/constants/const.dart';
+import 'package:syncrow_web/utils/constants/app_enum.dart';
class PasswordModel {
final dynamic passwordId;
diff --git a/lib/pages/access_management/view/access_management.dart b/lib/pages/access_management/view/access_management.dart
index 6eea85e8..2e939993 100644
--- a/lib/pages/access_management/view/access_management.dart
+++ b/lib/pages/access_management/view/access_management.dart
@@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:flutter_svg/flutter_svg.dart';
+import 'package:go_router/go_router.dart';
import 'package:syncrow_web/pages/access_management/bloc/access_bloc.dart';
import 'package:syncrow_web/pages/access_management/bloc/access_event.dart';
import 'package:syncrow_web/pages/access_management/bloc/access_state.dart';
@@ -7,10 +9,12 @@ import 'package:syncrow_web/pages/common/custom_table.dart';
import 'package:syncrow_web/pages/common/custom_web_textfield.dart';
import 'package:syncrow_web/pages/common/date_time_widget.dart';
import 'package:syncrow_web/pages/common/default_button.dart';
+import 'package:syncrow_web/pages/home/view/home_page.dart';
import 'package:syncrow_web/pages/visitor_password/view/visitor_password_dialog.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
-import 'package:syncrow_web/utils/constants/const.dart';
+import 'package:syncrow_web/utils/constants/app_enum.dart';
+import 'package:syncrow_web/utils/constants/routes_const.dart';
import 'package:syncrow_web/utils/style.dart';
import 'package:syncrow_web/web_layout/web_scaffold.dart';
@@ -18,6 +22,7 @@ class AccessManagementPage extends StatelessWidget {
const AccessManagementPage({super.key});
@override
Widget build(BuildContext context) {
+
Size size = MediaQuery.of(context).size;
return WebScaffold(
enableMenuSideba: false,
@@ -29,231 +34,252 @@ class AccessManagementPage extends StatelessWidget {
],
),
appBarBody: [
- Text('Physical Access',
- style: Theme.of(context).textTheme
- .headlineMedium!
- .copyWith(color: Colors.white),
+ Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Text('Physical Access',
+ style: Theme.of(context).textTheme.headlineMedium!
+ .copyWith(color: Colors.white),
+ ),
+ Row(
+ children: [
+ InkWell(
+ onTap: () {
+ context.go(RoutesConst.home);
+ },
+ child: SvgPicture.asset(
+ height: 20,
+ width: 20,
+ Assets.grid,
+ ),
+ ),
+ const SizedBox(width: 10,)
+
+ ],
+ ),
+ ],
),
],
scaffoldBody: BlocProvider(create: (BuildContext context) => AccessBloc()..add(FetchTableData()),
- child: BlocConsumer(listener: (context, state) {
- }, builder: (context, state) {
- final accessBloc = BlocProvider.of(context);
- final filteredData = accessBloc.filteredData;
- return state is AccessLoaded?
- const Center(child: CircularProgressIndicator()):
- Container(
- padding: EdgeInsets.all(30),
- height: size.height,
- width: size.width,
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Container(
- decoration: containerDecoration,
- height: size.height * 0.05,
- child: Flexible(
- child: ListView.builder(
- scrollDirection: Axis.horizontal,
- itemCount: BlocProvider.of(context).tabs.length,
- shrinkWrap: true,
- itemBuilder: (context, index) {
- final isSelected = index == BlocProvider.of(context).selectedIndex;
- return InkWell(
- onTap: () {
- BlocProvider.of(context).add(TabChangedEvent(index));
- },
- child: Container(
- decoration: BoxDecoration(
- color: ColorsManager.boxColor,
- border: Border.all(
- color: isSelected ? Colors.blue : Colors.transparent,
- width: 2.0,
+ child: BlocConsumer(listener: (context, state) {},
+ builder: (context, state) {
+ final accessBloc = BlocProvider.of(context);
+ final filteredData = accessBloc.filteredData;
+ return state is AccessLoaded?
+ const Center(child: CircularProgressIndicator()):
+ Container(
+ padding: EdgeInsets.all(30),
+ height: size.height,
+ width: size.width,
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Container(
+ decoration: containerDecoration,
+ height: size.height * 0.05,
+ child: Flexible(
+ child: ListView.builder(
+ scrollDirection: Axis.horizontal,
+ itemCount: BlocProvider.of(context).tabs.length,
+ shrinkWrap: true,
+ itemBuilder: (context, index) {
+ final isSelected = index == BlocProvider.of(context).selectedIndex;
+ return InkWell(
+ onTap: () {
+ BlocProvider.of(context).add(TabChangedEvent(index));
+ },
+ child: Container(
+ decoration: BoxDecoration(
+ color: ColorsManager.boxColor,
+ border: Border.all(
+ color: isSelected ? Colors.blue : Colors.transparent,
+ width: 2.0,
+ ),
+ borderRadius: index == 0
+ ? const BorderRadius.only(
+ topLeft: Radius.circular(10),
+ bottomLeft: Radius.circular(10))
+ : index == 3
+ ? const BorderRadius.only(
+ topRight: Radius.circular(10),
+ bottomRight: Radius.circular(10))
+ : null,
),
- borderRadius: index == 0
- ? const BorderRadius.only(
- topLeft: Radius.circular(10),
- bottomLeft: Radius.circular(10))
- : index == 3
- ? const BorderRadius.only(
- topRight: Radius.circular(10),
- bottomRight: Radius.circular(10))
- : null,
- ),
- padding: const EdgeInsets.only(left: 10, right: 10),
- child: Center(
- child: Text(
- BlocProvider.of(context).tabs[index],
- style: TextStyle(
- color: isSelected ? Colors.blue : Colors.black,
+ padding: const EdgeInsets.only(left: 10, right: 10),
+ child: Center(
+ child: Text(
+ BlocProvider.of(context).tabs[index],
+ style: TextStyle(
+ color: isSelected ? Colors.blue : Colors.black,
+ ),
),
),
),
- ),
- );
- },
- ),
- ),
- ),
- const SizedBox(
- height: 20,
- ),
- Row(
- mainAxisSize: MainAxisSize.min,
- crossAxisAlignment: CrossAxisAlignment.end,
- textBaseline: TextBaseline.ideographic, children: [
- Container(
- width: size.width * 0.15,
- child: CustomWebTextField(
- controller: accessBloc.passwordName,
- isRequired: true,
- textFieldName: 'Name',
- description: '',
- ),
- ),
- const SizedBox(
- width: 15,
- ),
- DateTimeWebWidget(
- icon: Assets.calendarIcon,
- isRequired: false,
- title: 'Access Time',
- size: size,
- endTime: () {
- accessBloc.add(SelectTime(context: context, isStart: false));
- },
- startTime: () {
- accessBloc.add(SelectTime(context: context, isStart: true));
- },
- firstString:BlocProvider.of(context).startTime ,
- secondString:BlocProvider.of(context).endTime ,
- ) ,
- const SizedBox(
- width: 15,
- ),
-
- SizedBox(
-
- width: size.width * 0.06,
- child:Container(
- decoration: containerDecoration,
- child: DefaultButton(
- onPressed: () {
- accessBloc.add(FilterDataEvent(
- selectedTabIndex: BlocProvider.of(context).selectedIndex, // Pass the selected tab index
- passwordName: accessBloc.passwordName.text.toLowerCase(),
- startTime: accessBloc.effectiveTimeTimeStamp,
- endTime: accessBloc.expirationTimeTimeStamp
- ));
- }, borderRadius: 9,
- child: const Text('Search'))),
- ),
- const SizedBox(
- width: 10,
- ),
- SizedBox(
- width: size.width * 0.06,
- child: Container(
- decoration: containerDecoration,
- child: DefaultButton(
- onPressed: () {
- accessBloc.add(ResetSearch());
+ );
},
- backgroundColor: ColorsManager.whiteColors,
- borderRadius: 9,
- child: Text(
- 'Reset',
- style: Theme.of(context)
- .textTheme
- .bodySmall!
- .copyWith(color: Colors.black),
- ),
),
),
),
- ],
- ),
- const SizedBox(
- height: 20,
- ),
- Wrap(
- children: [
- Container(
- width: size.width * 0.15,
- decoration: containerDecoration,
- child: DefaultButton(
- onPressed: () {
- showDialog(
- context: context,
- barrierDismissible: false,
- builder: (BuildContext context) {
- return const VisitorPasswordDialog();
- },
- ).then((v){
- if(v!=null){
- accessBloc.add(FetchTableData());
- }
- });
- },
- borderRadius: 8,
- child: const Text('+ Create Visitor Password ')),
+ const SizedBox(
+ height: 20,
+ ),
+ Row(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.end,
+ textBaseline: TextBaseline.ideographic,
+ children: [
+ Container(
+ width: size.width * 0.15,
+ child: CustomWebTextField(
+ controller: accessBloc.passwordName,
+ isRequired: true,
+ textFieldName: 'Name',
+ description: '',
+ ),
+ ),
+ const SizedBox(
+ width: 15,
+ ),
+ DateTimeWebWidget(
+ icon: Assets.calendarIcon,
+ isRequired: false,
+ title: 'Access Time',
+ size: size,
+ endTime: () {
+ accessBloc.add(SelectTime(context: context, isStart: false));
+ },
+ startTime: () {
+ accessBloc.add(SelectTime(context: context, isStart: true));
+ },
+ firstString:BlocProvider.of(context).startTime ,
+ secondString:BlocProvider.of(context).endTime ,
+ ) ,
+ const SizedBox(
+ width: 15,
+ ),
+
+ SizedBox(
+
+ width: size.width * 0.06,
+ child:Container(
+ decoration: containerDecoration,
+ child: DefaultButton(
+ onPressed: () {
+ accessBloc.add(FilterDataEvent(
+ selectedTabIndex: BlocProvider.of(context).selectedIndex, // Pass the selected tab index
+ passwordName: accessBloc.passwordName.text.toLowerCase(),
+ startTime: accessBloc.effectiveTimeTimeStamp,
+ endTime: accessBloc.expirationTimeTimeStamp
+ ));
+ }, borderRadius: 9,
+ child: const Text('Search'))),
+ ),
+ const SizedBox(
+ width: 10,
+ ),
+ SizedBox(
+ width: size.width * 0.06,
+ child: Container(
+ decoration: containerDecoration,
+ child: DefaultButton(
+ onPressed: () {
+ accessBloc.add(ResetSearch());
+ },
+ backgroundColor: ColorsManager.whiteColors,
+ borderRadius: 9,
+ child: Text(
+ 'Reset',
+ style: Theme.of(context)
+ .textTheme
+ .bodySmall!
+ .copyWith(color: Colors.black),
+ ),
+ ),
+ ),
+ ),
+ ],
),
const SizedBox(
- width: 10,
+ height: 20,
),
- Container(
- width: size.width * 0.12,
- decoration: containerDecoration,
- child: DefaultButton(
- borderRadius: 8,
- backgroundColor: ColorsManager.whiteColors,
- child: Text(
- 'Admin Password',
- style: Theme.of(context)
- .textTheme
- .bodySmall!
- .copyWith(color: Colors.black),
- )))
+ Wrap(
+ children: [
+ Container(
+ width: size.width * 0.15,
+ decoration: containerDecoration,
+ child: DefaultButton(
+ onPressed: () {
+ showDialog(
+ context: context,
+ barrierDismissible: false,
+ builder: (BuildContext context) {
+ return const VisitorPasswordDialog();
+ },
+ ).then((v){
+ if(v!=null){
+ accessBloc.add(FetchTableData());
+ }
+ });
+ },
+ borderRadius: 8,
+ child: const Text('+ Create Visitor Password ')),
+ ),
+ const SizedBox(
+ width: 10,
+ ),
+ Container(
+ width: size.width * 0.12,
+ decoration: containerDecoration,
+ child: DefaultButton(
+ borderRadius: 8,
+ backgroundColor: ColorsManager.whiteColors,
+ child: Text(
+ 'Admin Password',
+ style: Theme.of(context)
+ .textTheme
+ .bodySmall!
+ .copyWith(color: Colors.black),
+ )))
+ ],
+ ),
+ const SizedBox(
+ height: 20,
+ ),
+ Expanded(
+ child: DynamicTable(
+ isEmpty: filteredData.isEmpty ,
+ withCheckBox: false,
+ size: size,
+ cellDecoration: containerDecoration,
+ headers: const [
+ 'Name',
+ 'Access Type',
+ 'Access Period',
+ 'Accessible Device',
+ 'Authorizer',
+ 'Authorization Date & Time',
+ 'Access Status'
+ ],
+ data: filteredData.map((item) {
+
+ return [
+ item.passwordName.toString(),
+ item.passwordType.value,
+ ('${accessBloc.timestampToDate(item.effectiveTime)} - ${accessBloc.timestampToDate(item.invalidTime)}'),
+ item.deviceUuid.toString(),
+ '',
+ '',
+ item.passwordStatus.value,
+ ];
+ }).toList(),
+ )
+ // : const Center(child: CircularProgressIndicator()),
+ )
],
),
- const SizedBox(
- height: 20,
- ),
- Expanded(
- child: DynamicTable(
- isEmpty: filteredData.isEmpty ,
- withCheckBox: false,
- size: size,
- cellDecoration: containerDecoration,
- headers: const [
- 'Name',
- 'Access Type',
- 'Access Period',
- 'Accessible Device',
- 'Authorizer',
- 'Authorization Date & Time',
- 'Access Status'
- ],
- data: filteredData.map((item) {
-
- return [
- item.passwordName.toString(),
- item.passwordType.value,
- ('${accessBloc.timestampToDate(item.effectiveTime)} - ${accessBloc.timestampToDate(item.invalidTime)}'),
- item.deviceUuid.toString(),
- '',
- '',
- item.passwordStatus.value,
- ];
- }).toList(),
- )
- // : const Center(child: CircularProgressIndicator()),
- )
- ],
- ),
- );
- })));
+ );
+ }))
+ );
}
}
-
diff --git a/lib/pages/auth/view/login_web_page.dart b/lib/pages/auth/view/login_web_page.dart
index d8b22d38..9ce60a4c 100644
--- a/lib/pages/auth/view/login_web_page.dart
+++ b/lib/pages/auth/view/login_web_page.dart
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_svg/svg.dart';
+import 'package:go_router/go_router.dart';
import 'package:syncrow_web/pages/auth/bloc/auth_bloc.dart';
import 'package:syncrow_web/pages/auth/bloc/auth_event.dart';
import 'package:syncrow_web/pages/auth/bloc/auth_state.dart';
@@ -13,7 +14,7 @@ import 'package:syncrow_web/pages/common/default_button.dart';
import 'package:syncrow_web/pages/common/first_layer.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
-import 'package:syncrow_web/pages/home/view/home_page.dart';
+import 'package:syncrow_web/utils/constants/routes_const.dart';
import 'package:syncrow_web/utils/style.dart';
class LoginWebPage extends StatefulWidget {
@@ -33,13 +34,8 @@ class _LoginWebPageState extends State {
child: BlocConsumer(
listener: (context, state) {
if (state is LoginSuccess) {
- // Navigate to home screen after successful login
- Navigator.pushReplacement(
- context,
- MaterialPageRoute(builder: (context) => HomePage()),
- );
+ context.pushReplacement(RoutesConst.home);
} else if (state is LoginFailure) {
- // Show error message
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(state.error),
diff --git a/lib/pages/home/bloc/home_bloc.dart b/lib/pages/home/bloc/home_bloc.dart
index ebcc6b4e..57913c1f 100644
--- a/lib/pages/home/bloc/home_bloc.dart
+++ b/lib/pages/home/bloc/home_bloc.dart
@@ -2,15 +2,18 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
+import 'package:go_router/go_router.dart';
import 'package:graphview/GraphView.dart';
import 'package:syncrow_web/pages/access_management/view/access_management.dart';
import 'package:syncrow_web/pages/auth/model/user_model.dart';
import 'package:syncrow_web/pages/home/bloc/home_event.dart';
import 'package:syncrow_web/pages/home/bloc/home_state.dart';
import 'package:syncrow_web/pages/home/home_model/home_item_model.dart';
+import 'package:syncrow_web/pages/spaseManagementIcon.dart';
import 'package:syncrow_web/services/home_api.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
+import 'package:syncrow_web/utils/constants/routes_const.dart';
class HomeBloc extends Bloc {
final Graph graph = Graph()..isTree = true;
@@ -60,9 +63,7 @@ class HomeBloc extends Bloc {
icon: Assets.accessIcon,
active: true,
onPress: (context) {
- Navigator.of(context).push(
- MaterialPageRoute(builder: (context) => AccessManagementPage()),
- );
+ context.go(RoutesConst.accessManagementPage);
},
color: null,
),
@@ -71,6 +72,7 @@ class HomeBloc extends Bloc {
icon: Assets.spaseManagementIcon,
active: true,
onPress: (context) {
+
},
color: ColorsManager.primaryColor,
),
diff --git a/lib/pages/home/view/home_page.dart b/lib/pages/home/view/home_page.dart
index b4225ae2..3d23317c 100644
--- a/lib/pages/home/view/home_page.dart
+++ b/lib/pages/home/view/home_page.dart
@@ -8,9 +8,11 @@ class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
- return ResponsiveLayout(
+ return
+
+ ResponsiveLayout(
desktopBody: HomeWebPage(),
mobileBody:HomeMobilePage()
- );
+ );
}
}
diff --git a/lib/pages/home/view/home_page_web.dart b/lib/pages/home/view/home_page_web.dart
index 39a79a57..f542f6d3 100644
--- a/lib/pages/home/view/home_page_web.dart
+++ b/lib/pages/home/view/home_page_web.dart
@@ -12,7 +12,11 @@ class HomeWebPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
- return WebScaffold(
+ return PopScope(
+ canPop: false,
+ onPopInvoked: (didPop) => false,
+ child:
+ WebScaffold(
enableMenuSideba: false,
appBarTitle: Row(
children: [
@@ -74,6 +78,6 @@ class HomeWebPage extends StatelessWidget {
);
},
),
- ));
+ )));
}
}
diff --git a/lib/pages/spaseManagementIcon.dart b/lib/pages/spaseManagementIcon.dart
new file mode 100644
index 00000000..510b90b9
--- /dev/null
+++ b/lib/pages/spaseManagementIcon.dart
@@ -0,0 +1,16 @@
+
+
+
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+
+class SpaseManagementicon extends StatelessWidget {
+ const SpaseManagementicon({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ body: Container(),
+ );
+ }
+}
diff --git a/lib/pages/visitor_password/model/device_model.dart b/lib/pages/visitor_password/model/device_model.dart
index 2c3ce8d9..38ea0396 100644
--- a/lib/pages/visitor_password/model/device_model.dart
+++ b/lib/pages/visitor_password/model/device_model.dart
@@ -1,6 +1,6 @@
-import 'package:syncrow_web/utils/constants/const.dart';
+import 'package:syncrow_web/utils/constants/app_enum.dart';
class DeviceModel {
dynamic productUuid;
diff --git a/lib/pages/visitor_password/view/add_device_dialog.dart b/lib/pages/visitor_password/view/add_device_dialog.dart
index e5e4853c..25bf56c4 100644
--- a/lib/pages/visitor_password/view/add_device_dialog.dart
+++ b/lib/pages/visitor_password/view/add_device_dialog.dart
@@ -9,7 +9,7 @@ import 'package:syncrow_web/pages/visitor_password/bloc/visitor_password_event.d
import 'package:syncrow_web/pages/visitor_password/bloc/visitor_password_state.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
-import 'package:syncrow_web/utils/constants/const.dart';
+import 'package:syncrow_web/utils/constants/app_enum.dart';
import 'package:syncrow_web/utils/style.dart';
class AddDeviceDialog extends StatelessWidget {
diff --git a/lib/services/auth_api.dart b/lib/services/auth_api.dart
index 3cd375f7..dc1064aa 100644
--- a/lib/services/auth_api.dart
+++ b/lib/services/auth_api.dart
@@ -43,10 +43,11 @@ class AuthenticationAPI {
},
showServerMessage: true,
expectedResponseModel: (json) {
- return 30;
+ return json['data']['cooldown'];
}
);
- return 30;
+
+ return response;
} on DioException catch (e) {
if (e.response != null) {
if (e.response!.statusCode == 400) {
diff --git a/lib/utils/app_routes.dart b/lib/utils/app_routes.dart
new file mode 100644
index 00000000..7f979d74
--- /dev/null
+++ b/lib/utils/app_routes.dart
@@ -0,0 +1,33 @@
+import 'package:go_router/go_router.dart';
+import 'package:syncrow_web/pages/access_management/view/access_management.dart';
+import 'package:syncrow_web/pages/auth/view/login_page.dart';
+import 'package:syncrow_web/pages/home/view/home_page.dart';
+import 'package:syncrow_web/pages/visitor_password/view/visitor_password_dialog.dart';
+import 'package:syncrow_web/utils/constants/routes_const.dart';
+
+class AppRoutes {
+ static List getRoutes() {
+ return [
+ GoRoute(
+ path:RoutesConst.main,
+ builder: (context, state) => const LoginPage(),
+ ),
+
+ GoRoute(
+ path: RoutesConst.home,
+ builder: (context, state) => const HomePage(),
+ ),
+
+ GoRoute(
+ path: RoutesConst.visitorPassword,
+ builder: (context, state) => const VisitorPasswordDialog(),
+ ),
+
+ GoRoute(
+ path: RoutesConst.accessManagementPage ,
+ builder: (context, state) => const AccessManagementPage(),
+ ),
+
+ ];
+ }
+}
diff --git a/lib/utils/constants/const.dart b/lib/utils/constants/app_enum.dart
similarity index 100%
rename from lib/utils/constants/const.dart
rename to lib/utils/constants/app_enum.dart
diff --git a/lib/utils/constants/assets.dart b/lib/utils/constants/assets.dart
index f4a2859e..18c3bb7b 100644
--- a/lib/utils/constants/assets.dart
+++ b/lib/utils/constants/assets.dart
@@ -27,4 +27,5 @@ class Assets {
static const String deviceNoteIcon = "assets/images/device_note.svg";
static const String timeIcon = "assets/images/time_icon.svg";
static const String emptyTable = "assets/images/empty_table.svg";
+ static const String grid = "assets/images/grid.svg";
}
diff --git a/lib/utils/constants/routes_const.dart b/lib/utils/constants/routes_const.dart
new file mode 100644
index 00000000..b107b0fe
--- /dev/null
+++ b/lib/utils/constants/routes_const.dart
@@ -0,0 +1,6 @@
+class RoutesConst {
+ static const String main = '/';
+ static const String home = '/home';
+ static const String visitorPassword = '/visitor-password';
+ static const String accessManagementPage = '/access-management-page';
+}
diff --git a/lib/utils/navigation_service.dart b/lib/utils/navigation_service.dart
index c0b12167..c9d654e6 100644
--- a/lib/utils/navigation_service.dart
+++ b/lib/utils/navigation_service.dart
@@ -5,3 +5,6 @@ class NavigationService {
static GlobalKey? snackbarKey =
GlobalKey();
}
+
+
+
diff --git a/pubspec.lock b/pubspec.lock
index b8984d5a..9a9cd6a8 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -216,6 +216,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "7.7.0"
+ go_router:
+ dependency: "direct main"
+ description:
+ name: go_router
+ sha256: "2ddb88e9ad56ae15ee144ed10e33886777eb5ca2509a914850a5faa7b52ff459"
+ url: "https://pub.dev"
+ source: hosted
+ version: "14.2.7"
graphview:
dependency: "direct main"
description:
@@ -288,6 +296,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.0.0"
+ logging:
+ dependency: transitive
+ description:
+ name: logging
+ sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.0"
matcher:
dependency: transitive
description:
diff --git a/pubspec.yaml b/pubspec.yaml
index faaa7ddb..20118a0a 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -44,7 +44,9 @@ dependencies:
flutter_secure_storage: ^9.2.2
shared_preferences: ^2.3.0
data_table_2: ^2.5.15
+ go_router:
intl: ^0.19.0
+
dev_dependencies:
flutter_test:
sdk: flutter