diff --git a/assets/icons/group_icon.svg b/assets/icons/group_icon.svg
new file mode 100644
index 00000000..efca14dd
--- /dev/null
+++ b/assets/icons/group_icon.svg
@@ -0,0 +1,15 @@
+
diff --git a/assets/icons/home_icon.svg b/assets/icons/home_icon.svg
new file mode 100644
index 00000000..35080c4e
--- /dev/null
+++ b/assets/icons/home_icon.svg
@@ -0,0 +1,4 @@
+
diff --git a/lib/pages/access_management/booking_system/view/booking_page.dart b/lib/pages/access_management/booking_system/view/booking_page.dart
new file mode 100644
index 00000000..6fdb53bd
--- /dev/null
+++ b/lib/pages/access_management/booking_system/view/booking_page.dart
@@ -0,0 +1,52 @@
+import 'package:flutter/material.dart';
+import 'package:syncrow_web/pages/access_management/booking_system/view/widgets/icon_text_button.dart';
+import 'package:syncrow_web/utils/constants/assets.dart';
+
+class BookingPage extends StatelessWidget {
+ const BookingPage({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Container(
+ child: Row(
+ children: [
+ Expanded(
+ child: Container(
+ color: Colors.blueGrey[100],
+ child: const Center(
+ child: Text(
+ 'Side bar',
+ style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
+ ),
+ ),
+ )),
+ Expanded(
+ flex: 4,
+ child: Padding(
+ padding: const EdgeInsets.all(20.0),
+ child: SizedBox(
+ child: Column(
+ children: [
+ Row(
+ mainAxisAlignment: MainAxisAlignment.start,
+ children: [
+ SvgTextButton(
+ svgAsset: Assets.homeIcon,
+ label: 'Manage Bookable Spaces',
+ onPressed: () {}),
+ SizedBox(width: 20),
+ SvgTextButton(
+ svgAsset: Assets.groupIcon,
+ label: 'Manage Users',
+ onPressed: () {})
+ ],
+ )
+ ],
+ ),
+ ),
+ ))
+ ],
+ ),
+ );
+ }
+}
diff --git a/lib/pages/access_management/booking_system/view/widgets/icon_text_button.dart b/lib/pages/access_management/booking_system/view/widgets/icon_text_button.dart
new file mode 100644
index 00000000..afccafdb
--- /dev/null
+++ b/lib/pages/access_management/booking_system/view/widgets/icon_text_button.dart
@@ -0,0 +1,73 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_svg/flutter_svg.dart';
+import 'package:syncrow_web/utils/color_manager.dart';
+
+class SvgTextButton extends StatelessWidget {
+ final String svgAsset;
+ final String label;
+ final VoidCallback onPressed;
+ final Color backgroundColor;
+ final Color svgColor;
+ final Color labelColor;
+ final double borderRadius;
+ final List boxShadow;
+ final double svgSize;
+
+ const SvgTextButton({
+ super.key,
+ required this.svgAsset,
+ required this.label,
+ required this.onPressed,
+ this.backgroundColor = ColorsManager.circleRolesBackground,
+ this.svgColor = const Color(0xFF496EFF),
+ this.labelColor = Colors.black87,
+ this.borderRadius = 10.0,
+ this.boxShadow = const [
+ BoxShadow(
+ color: ColorsManager.textGray,
+ blurRadius: 12,
+ offset: Offset(0, 4),
+ ),
+ ],
+ this.svgSize = 24.0,
+ });
+
+ @override
+ Widget build(BuildContext context) {
+ return Material(
+ color: Colors.transparent,
+ child: InkWell(
+ borderRadius: BorderRadius.circular(borderRadius),
+ onTap: onPressed,
+ child: Container(
+ padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12),
+ decoration: BoxDecoration(
+ color: backgroundColor,
+ borderRadius: BorderRadius.circular(borderRadius),
+ boxShadow: boxShadow,
+ ),
+ child: Row(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ SvgPicture.asset(
+ svgAsset,
+ width: svgSize,
+ height: svgSize,
+ color: svgColor,
+ ),
+ const SizedBox(width: 12),
+ Text(
+ label,
+ style: TextStyle(
+ color: labelColor,
+ fontSize: 16,
+ fontWeight: FontWeight.w500,
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/pages/access_management/view/access_management.dart b/lib/pages/access_management/view/access_management.dart
index d7c7a9dd..e035d252 100644
--- a/lib/pages/access_management/view/access_management.dart
+++ b/lib/pages/access_management/view/access_management.dart
@@ -2,302 +2,86 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.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';
-import 'package:syncrow_web/pages/common/buttons/default_button.dart';
-import 'package:syncrow_web/pages/common/buttons/search_reset_buttons.dart';
-import 'package:syncrow_web/pages/common/custom_table.dart';
-import 'package:syncrow_web/pages/common/date_time_widget.dart';
-import 'package:syncrow_web/pages/common/filter/filter_widget.dart';
-import 'package:syncrow_web/pages/common/text_field/custom_web_textfield.dart';
+import 'package:syncrow_web/pages/access_management/booking_system/view/booking_page.dart';
+import 'package:syncrow_web/pages/access_management/view/access_overview_content.dart';
import 'package:syncrow_web/pages/device_managment/shared/navigate_home_grid_view.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/app_enum.dart';
-import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:syncrow_web/utils/extension/build_context_x.dart';
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
-import 'package:syncrow_web/utils/style.dart';
import 'package:syncrow_web/utils/theme/responsive_text_theme.dart';
import 'package:syncrow_web/web_layout/web_scaffold.dart';
-class AccessManagementPage extends StatelessWidget with HelperResponsiveLayout {
+class AccessManagementPage extends StatefulWidget {
const AccessManagementPage({super.key});
@override
- Widget build(BuildContext context) {
- final isLargeScreen = isLargeScreenSize(context);
- final isSmallScreen = isSmallScreenSize(context);
- final isHalfMediumScreen = isHafMediumScreenSize(context);
- final padding =
- isLargeScreen ? const EdgeInsets.all(30) : const EdgeInsets.all(15);
+ State createState() => _AccessManagementPageState();
+}
- return WebScaffold(
+class _AccessManagementPageState extends State
+ with HelperResponsiveLayout {
+ final PageController _pageController = PageController(initialPage: 0);
+ int _currentPageIndex = 0;
+
+ @override
+ void dispose() {
+ _pageController.dispose();
+ super.dispose();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return BlocProvider(
+ create: (BuildContext context) => AccessBloc()..add(FetchTableData()),
+ child: WebScaffold(
enableMenuSidebar: false,
appBarTitle: Text(
'Access Management',
style: ResponsiveTextTheme.of(context).deviceManagementTitle,
),
- rightBody: const NavigateHomeGridView(),
- 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: padding,
- height: MediaQuery.of(context).size.height,
- width: MediaQuery.of(context).size.width,
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- FilterWidget(
- size: MediaQuery.of(context).size,
- tabs: accessBloc.tabs,
- selectedIndex: accessBloc.selectedIndex,
- onTabChanged: (index) {
- accessBloc.add(TabChangedEvent(index));
- },
- ),
- const SizedBox(height: 20),
- if (isSmallScreen || isHalfMediumScreen)
- _buildSmallSearchFilters(context, accessBloc)
- else
- _buildNormalSearchWidgets(context, accessBloc),
- const SizedBox(height: 20),
- _buildVisitorAdminPasswords(context, accessBloc),
- const SizedBox(height: 20),
- Expanded(
- child: DynamicTable(
- tableName: 'AccessManagement',
- uuidIndex: 1,
- withSelectAll: true,
- isEmpty: filteredData.isEmpty,
- withCheckBox: false,
- size: MediaQuery.of(context).size,
- cellDecoration: containerDecoration,
- headers: const [
- 'Name',
- 'Access Type',
- 'Access Start',
- 'Access End',
- 'Accessible Device',
- 'Authorizer',
- 'Authorization Date & Time',
- 'Access Status'
- ],
- data: filteredData.map((item) {
- return [
- item.passwordName,
- item.passwordType.value,
- accessBloc
- .timestampToDate(item.effectiveTime),
- accessBloc
- .timestampToDate(item.invalidTime),
- item.deviceName.toString(),
- item.authorizerEmail.toString(),
- accessBloc
- .timestampToDate(item.invalidTime),
- item.passwordStatus.value,
- ];
- }).toList(),
- )),
- ],
- ),
- );
- })));
- }
-
- Wrap _buildVisitorAdminPasswords(
- BuildContext context, AccessBloc accessBloc) {
- return Wrap(
- spacing: 10,
- runSpacing: 10,
- children: [
- Container(
- width: 205,
- height: 42,
- 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,
+ centerBody: Row(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ TextButton(
+ onPressed: () => _switchPage(0),
child: Text(
- 'Create Visitor Password ',
- style: context.textTheme.titleSmall!
- .copyWith(color: Colors.white, fontSize: 12),
- )),
+ 'Access Overview',
+ style: context.textTheme.titleMedium?.copyWith(
+ color: _currentPageIndex == 0 ? Colors.white : Colors.grey,
+ fontWeight: _currentPageIndex == 0
+ ? FontWeight.w700
+ : FontWeight.w400,
+ ),
+ ),
+ ),
+ TextButton(
+ onPressed: () => _switchPage(1),
+ child: Text(
+ 'Booking System',
+ style: context.textTheme.titleMedium?.copyWith(
+ color: _currentPageIndex == 1 ? Colors.white : Colors.grey,
+ fontWeight: _currentPageIndex == 1
+ ? FontWeight.w700
+ : FontWeight.w400,
+ ),
+ ),
+ ),
+ ],
),
- // Container(
- // width: 133,
- // height: 42,
- // decoration: containerDecoration,
- // child: DefaultButton(
- // borderRadius: 8,
- // backgroundColor: ColorsManager.whiteColors,
- // child: Text(
- // 'Admin Password',
- // style: context.textTheme.titleSmall!
- // .copyWith(color: Colors.black, fontSize: 12),
- // )),
- // ),
- ],
+ rightBody: const NavigateHomeGridView(),
+ scaffoldBody: PageView(
+ controller: _pageController,
+ physics: const NeverScrollableScrollPhysics(),
+ children: const [
+ AccessOverviewContent(),
+ BookingPage(),
+ ],
+ ),
+ ),
);
}
- Row _buildNormalSearchWidgets(BuildContext context, AccessBloc accessBloc) {
- // TimeOfDay _selectedTime = TimeOfDay.now();
-
- return Row(
- mainAxisSize: MainAxisSize.min,
- crossAxisAlignment: CrossAxisAlignment.end,
- textBaseline: TextBaseline.ideographic,
- children: [
- SizedBox(
- width: 250,
- child: CustomWebTextField(
- controller: accessBloc.passwordName,
- height: 43,
- isRequired: false,
- textFieldName: 'Name',
- description: '',
- onSubmitted: (value) {
- accessBloc.add(FilterDataEvent(
- emailAuthorizer:
- accessBloc.emailAuthorizer.text.toLowerCase(),
- selectedTabIndex:
- BlocProvider.of(context).selectedIndex,
- passwordName: accessBloc.passwordName.text.toLowerCase(),
- startTime: accessBloc.effectiveTimeTimeStamp,
- endTime: accessBloc.expirationTimeTimeStamp));
- },
- ),
- ),
- const SizedBox(width: 15),
- SizedBox(
- width: 250,
- child: CustomWebTextField(
- controller: accessBloc.emailAuthorizer,
- height: 43,
- isRequired: false,
- textFieldName: 'Authorizer',
- description: '',
- onSubmitted: (value) {
- accessBloc.add(FilterDataEvent(
- emailAuthorizer:
- accessBloc.emailAuthorizer.text.toLowerCase(),
- selectedTabIndex:
- BlocProvider.of(context).selectedIndex,
- passwordName: accessBloc.passwordName.text.toLowerCase(),
- startTime: accessBloc.effectiveTimeTimeStamp,
- endTime: accessBloc.expirationTimeTimeStamp));
- },
- ),
- ),
- const SizedBox(width: 15),
- SizedBox(
- child: DateTimeWebWidget(
- icon: Assets.calendarIcon,
- isRequired: false,
- title: 'Access Time',
- size: MediaQuery.of(context).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),
- SearchResetButtons(
- onSearch: () {
- accessBloc.add(FilterDataEvent(
- emailAuthorizer: accessBloc.emailAuthorizer.text.toLowerCase(),
- selectedTabIndex:
- BlocProvider.of(context).selectedIndex,
- passwordName: accessBloc.passwordName.text.toLowerCase(),
- startTime: accessBloc.effectiveTimeTimeStamp,
- endTime: accessBloc.expirationTimeTimeStamp));
- },
- onReset: () {
- accessBloc.add(ResetSearch());
- },
- ),
- ],
- );
- }
-
- Widget _buildSmallSearchFilters(BuildContext context, AccessBloc accessBloc) {
- return Wrap(
- spacing: 20,
- runSpacing: 10,
- children: [
- SizedBox(
- width: 300,
- child: CustomWebTextField(
- controller: accessBloc.passwordName,
- isRequired: true,
- height: 40,
- textFieldName: 'Name',
- description: '',
- onSubmitted: (value) {
- accessBloc.add(FilterDataEvent(
- emailAuthorizer:
- accessBloc.emailAuthorizer.text.toLowerCase(),
- selectedTabIndex:
- BlocProvider.of(context).selectedIndex,
- passwordName: accessBloc.passwordName.text.toLowerCase(),
- startTime: accessBloc.effectiveTimeTimeStamp,
- endTime: accessBloc.expirationTimeTimeStamp));
- }),
- ),
- DateTimeWebWidget(
- icon: Assets.calendarIcon,
- isRequired: false,
- title: 'Access Time',
- size: MediaQuery.of(context).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,
- ),
- SearchResetButtons(
- onSearch: () {
- accessBloc.add(FilterDataEvent(
- emailAuthorizer: accessBloc.emailAuthorizer.text.toLowerCase(),
- selectedTabIndex:
- BlocProvider.of(context).selectedIndex,
- passwordName: accessBloc.passwordName.text.toLowerCase(),
- startTime: accessBloc.effectiveTimeTimeStamp,
- endTime: accessBloc.expirationTimeTimeStamp));
- },
- onReset: () {
- accessBloc.add(ResetSearch());
- },
- ),
- ],
- );
+ void _switchPage(int index) {
+ setState(() => _currentPageIndex = index);
+ _pageController.jumpToPage(index);
}
}
diff --git a/lib/pages/access_management/view/access_overview_content.dart b/lib/pages/access_management/view/access_overview_content.dart
new file mode 100644
index 00000000..b6b8748a
--- /dev/null
+++ b/lib/pages/access_management/view/access_overview_content.dart
@@ -0,0 +1,289 @@
+import 'package:syncrow_web/pages/common/buttons/default_button.dart';
+import 'package:syncrow_web/pages/common/buttons/search_reset_buttons.dart';
+import 'package:syncrow_web/pages/common/custom_table.dart';
+import 'package:syncrow_web/pages/common/date_time_widget.dart';
+import 'package:syncrow_web/pages/common/filter/filter_widget.dart';
+import 'package:syncrow_web/pages/common/text_field/custom_web_textfield.dart';
+import 'package:flutter/material.dart';
+import 'package:syncrow_web/pages/access_management/bloc/access_state.dart';
+import 'package:syncrow_web/pages/visitor_password/view/visitor_password_dialog.dart';
+import 'package:syncrow_web/utils/constants/app_enum.dart';
+import 'package:syncrow_web/utils/constants/assets.dart';
+import 'package:flutter_bloc/flutter_bloc.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/utils/extension/build_context_x.dart';
+import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
+import 'package:syncrow_web/utils/style.dart';
+
+class AccessOverviewContent extends StatelessWidget
+ with HelperResponsiveLayout {
+ const AccessOverviewContent({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ final isLargeScreen = isLargeScreenSize(context);
+ final isSmallScreen = isSmallScreenSize(context);
+ final isHalfMediumScreen = isHafMediumScreenSize(context);
+ final padding =
+ isLargeScreen ? const EdgeInsets.all(30) : const EdgeInsets.all(15);
+
+ return 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: padding,
+ height: MediaQuery.of(context).size.height,
+ width: MediaQuery.of(context).size.width,
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ FilterWidget(
+ size: MediaQuery.of(context).size,
+ tabs: accessBloc.tabs,
+ selectedIndex: accessBloc.selectedIndex,
+ onTabChanged: (index) {
+ accessBloc.add(TabChangedEvent(index));
+ },
+ ),
+ const SizedBox(height: 20),
+ if (isSmallScreen || isHalfMediumScreen)
+ _buildSmallSearchFilters(context, accessBloc)
+ else
+ _buildNormalSearchWidgets(context, accessBloc),
+ const SizedBox(height: 20),
+ _buildVisitorAdminPasswords(context, accessBloc),
+ const SizedBox(height: 20),
+ Expanded(
+ child: DynamicTable(
+ tableName: 'AccessManagement',
+ uuidIndex: 1,
+ withSelectAll: true,
+ isEmpty: filteredData.isEmpty,
+ withCheckBox: false,
+ size: MediaQuery.of(context).size,
+ cellDecoration: containerDecoration,
+ headers: const [
+ 'Name',
+ 'Access Type',
+ 'Access Start',
+ 'Access End',
+ 'Accessible Device',
+ 'Authorizer',
+ 'Authorization Date & Time',
+ 'Access Status'
+ ],
+ data: filteredData.map((item) {
+ return [
+ item.passwordName,
+ item.passwordType.value,
+ accessBloc.timestampToDate(item.effectiveTime),
+ accessBloc.timestampToDate(item.invalidTime),
+ item.deviceName.toString(),
+ item.authorizerEmail.toString(),
+ accessBloc.timestampToDate(item.invalidTime),
+ item.passwordStatus.value,
+ ];
+ }).toList(),
+ )),
+ ],
+ ),
+ );
+ }));
+ }
+
+ Wrap _buildVisitorAdminPasswords(
+ BuildContext context, AccessBloc accessBloc) {
+ return Wrap(
+ spacing: 10,
+ runSpacing: 10,
+ children: [
+ Container(
+ width: 205,
+ height: 42,
+ 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: Text(
+ 'Create Visitor Password ',
+ style: context.textTheme.titleSmall!
+ .copyWith(color: Colors.white, fontSize: 12),
+ )),
+ ),
+ // Container(
+ // width: 133,
+ // height: 42,
+ // decoration: containerDecoration,
+ // child: DefaultButton(
+ // borderRadius: 8,
+ // backgroundColor: ColorsManager.whiteColors,
+ // child: Text(
+ // 'Admin Password',
+ // style: context.textTheme.titleSmall!
+ // .copyWith(color: Colors.black, fontSize: 12),
+ // )),
+ // ),
+ ],
+ );
+ }
+
+ Row _buildNormalSearchWidgets(BuildContext context, AccessBloc accessBloc) {
+ // TimeOfDay _selectedTime = TimeOfDay.now();
+
+ return Row(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.end,
+ textBaseline: TextBaseline.ideographic,
+ children: [
+ SizedBox(
+ width: 250,
+ child: CustomWebTextField(
+ controller: accessBloc.passwordName,
+ height: 43,
+ isRequired: false,
+ textFieldName: 'Name',
+ description: '',
+ onSubmitted: (value) {
+ accessBloc.add(FilterDataEvent(
+ emailAuthorizer:
+ accessBloc.emailAuthorizer.text.toLowerCase(),
+ selectedTabIndex:
+ BlocProvider.of(context).selectedIndex,
+ passwordName: accessBloc.passwordName.text.toLowerCase(),
+ startTime: accessBloc.effectiveTimeTimeStamp,
+ endTime: accessBloc.expirationTimeTimeStamp));
+ },
+ ),
+ ),
+ const SizedBox(width: 15),
+ SizedBox(
+ width: 250,
+ child: CustomWebTextField(
+ controller: accessBloc.emailAuthorizer,
+ height: 43,
+ isRequired: false,
+ textFieldName: 'Authorizer',
+ description: '',
+ onSubmitted: (value) {
+ accessBloc.add(FilterDataEvent(
+ emailAuthorizer:
+ accessBloc.emailAuthorizer.text.toLowerCase(),
+ selectedTabIndex:
+ BlocProvider.of(context).selectedIndex,
+ passwordName: accessBloc.passwordName.text.toLowerCase(),
+ startTime: accessBloc.effectiveTimeTimeStamp,
+ endTime: accessBloc.expirationTimeTimeStamp));
+ },
+ ),
+ ),
+ const SizedBox(width: 15),
+ SizedBox(
+ child: DateTimeWebWidget(
+ icon: Assets.calendarIcon,
+ isRequired: false,
+ title: 'Access Time',
+ size: MediaQuery.of(context).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),
+ SearchResetButtons(
+ onSearch: () {
+ accessBloc.add(FilterDataEvent(
+ emailAuthorizer: accessBloc.emailAuthorizer.text.toLowerCase(),
+ selectedTabIndex:
+ BlocProvider.of(context).selectedIndex,
+ passwordName: accessBloc.passwordName.text.toLowerCase(),
+ startTime: accessBloc.effectiveTimeTimeStamp,
+ endTime: accessBloc.expirationTimeTimeStamp));
+ },
+ onReset: () {
+ accessBloc.add(ResetSearch());
+ },
+ ),
+ ],
+ );
+ }
+
+ Widget _buildSmallSearchFilters(BuildContext context, AccessBloc accessBloc) {
+ return Wrap(
+ spacing: 20,
+ runSpacing: 10,
+ children: [
+ SizedBox(
+ width: 300,
+ child: CustomWebTextField(
+ controller: accessBloc.passwordName,
+ isRequired: true,
+ height: 40,
+ textFieldName: 'Name',
+ description: '',
+ onSubmitted: (value) {
+ accessBloc.add(FilterDataEvent(
+ emailAuthorizer:
+ accessBloc.emailAuthorizer.text.toLowerCase(),
+ selectedTabIndex:
+ BlocProvider.of(context).selectedIndex,
+ passwordName: accessBloc.passwordName.text.toLowerCase(),
+ startTime: accessBloc.effectiveTimeTimeStamp,
+ endTime: accessBloc.expirationTimeTimeStamp));
+ }),
+ ),
+ DateTimeWebWidget(
+ icon: Assets.calendarIcon,
+ isRequired: false,
+ title: 'Access Time',
+ size: MediaQuery.of(context).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,
+ ),
+ SearchResetButtons(
+ onSearch: () {
+ accessBloc.add(FilterDataEvent(
+ emailAuthorizer: accessBloc.emailAuthorizer.text.toLowerCase(),
+ selectedTabIndex:
+ BlocProvider.of(context).selectedIndex,
+ passwordName: accessBloc.passwordName.text.toLowerCase(),
+ startTime: accessBloc.effectiveTimeTimeStamp,
+ endTime: accessBloc.expirationTimeTimeStamp));
+ },
+ onReset: () {
+ accessBloc.add(ResetSearch());
+ },
+ ),
+ ],
+ );
+ }
+}
diff --git a/lib/utils/constants/assets.dart b/lib/utils/constants/assets.dart
index 87f6e73f..f92975f3 100644
--- a/lib/utils/constants/assets.dart
+++ b/lib/utils/constants/assets.dart
@@ -14,7 +14,8 @@ class Assets {
static const String rightLine = 'assets/images/right_line.png';
static const String google = 'assets/images/google.svg';
static const String facebook = 'assets/images/facebook.svg';
- static const String invisiblePassword = 'assets/images/Password_invisible.svg';
+ static const String invisiblePassword =
+ 'assets/images/Password_invisible.svg';
static const String visiblePassword = 'assets/images/password_visible.svg';
static const String accessIcon = 'assets/images/access_icon.svg';
static const String spaseManagementIcon =
@@ -33,7 +34,8 @@ class Assets {
static const String emptyTable = 'assets/images/empty_table.svg';
// General assets
- static const String motionlessDetection = 'assets/icons/motionless_detection.svg';
+ static const String motionlessDetection =
+ 'assets/icons/motionless_detection.svg';
static const String acHeating = 'assets/icons/ac_heating.svg';
static const String acPowerOff = 'assets/icons/ac_power_off.svg';
static const String acFanMiddle = 'assets/icons/ac_fan_middle.svg';
@@ -70,19 +72,22 @@ class Assets {
'assets/icons/automation_functions/temp_password_unlock.svg';
static const String doorlockNormalOpen =
'assets/icons/automation_functions/doorlock_normal_open.svg';
- static const String doorbell = 'assets/icons/automation_functions/doorbell.svg';
+ static const String doorbell =
+ 'assets/icons/automation_functions/doorbell.svg';
static const String remoteUnlockViaApp =
'assets/icons/automation_functions/remote_unlock_via_app.svg';
static const String doubleLock =
'assets/icons/automation_functions/double_lock.svg';
static const String selfTestResult =
'assets/icons/automation_functions/self_test_result.svg';
- static const String lockAlarm = 'assets/icons/automation_functions/lock_alarm.svg';
+ static const String lockAlarm =
+ 'assets/icons/automation_functions/lock_alarm.svg';
static const String presenceState =
'assets/icons/automation_functions/presence_state.svg';
static const String currentTemp =
'assets/icons/automation_functions/current_temp.svg';
- static const String presence = 'assets/icons/automation_functions/presence.svg';
+ static const String presence =
+ 'assets/icons/automation_functions/presence.svg';
static const String residualElectricity =
'assets/icons/automation_functions/residual_electricity.svg';
static const String hijackAlarm =
@@ -99,12 +104,15 @@ class Assets {
// Presence Sensor Assets
static const String sensorMotionIcon = 'assets/icons/sensor_motion_ic.svg';
- static const String sensorPresenceIcon = 'assets/icons/sensor_presence_ic.svg';
+ static const String sensorPresenceIcon =
+ 'assets/icons/sensor_presence_ic.svg';
static const String sensorVacantIcon = 'assets/icons/sensor_vacant_ic.svg';
static const String illuminanceRecordIcon =
'assets/icons/illuminance_record_ic.svg';
- static const String presenceRecordIcon = 'assets/icons/presence_record_ic.svg';
- static const String helpDescriptionIcon = 'assets/icons/help_description_ic.svg';
+ static const String presenceRecordIcon =
+ 'assets/icons/presence_record_ic.svg';
+ static const String helpDescriptionIcon =
+ 'assets/icons/help_description_ic.svg';
static const String lightPulp = 'assets/icons/light_pulb.svg';
static const String acDevice = 'assets/icons/ac_device.svg';
@@ -158,10 +166,12 @@ class Assets {
static const String unit = 'assets/icons/unit_icon.svg';
static const String villa = 'assets/icons/villa_icon.svg';
static const String iconEdit = 'assets/icons/icon_edit_icon.svg';
- static const String textFieldSearch = 'assets/icons/textfield_search_icon.svg';
+ static const String textFieldSearch =
+ 'assets/icons/textfield_search_icon.svg';
static const String roundedAddIcon = 'assets/icons/rounded_add_icon.svg';
static const String addIcon = 'assets/icons/add_icon.svg';
- static const String smartThermostatIcon = 'assets/icons/smart_thermostat_icon.svg';
+ static const String smartThermostatIcon =
+ 'assets/icons/smart_thermostat_icon.svg';
static const String smartLightIcon = 'assets/icons/smart_light_icon.svg';
static const String presenceSensor = 'assets/icons/presence_sensor.svg';
static const String Gang3SwitchIcon = 'assets/icons/3_Gang_switch_icon.svg';
@@ -209,7 +219,8 @@ class Assets {
//assets/icons/water_leak_normal.svg
static const String waterLeakNormal = 'assets/icons/water_leak_normal.svg';
//assets/icons/water_leak_detected.svg
- static const String waterLeakDetected = 'assets/icons/water_leak_detected.svg';
+ static const String waterLeakDetected =
+ 'assets/icons/water_leak_detected.svg';
//assets/icons/automation_records.svg
static const String automationRecords = 'assets/icons/automation_records.svg';
@@ -280,13 +291,16 @@ class Assets {
'assets/icons/functions_icons/sensitivity.svg';
static const String assetsSensitivityOperationIcon =
'assets/icons/functions_icons/sesitivity_operation_icon.svg';
- static const String assetsAcPower = 'assets/icons/functions_icons/ac_power.svg';
+ static const String assetsAcPower =
+ 'assets/icons/functions_icons/ac_power.svg';
static const String assetsAcPowerOFF =
'assets/icons/functions_icons/ac_power_off.svg';
static const String assetsChildLock =
'assets/icons/functions_icons/child_lock.svg';
- static const String assetsFreezing = 'assets/icons/functions_icons/freezing.svg';
- static const String assetsFanSpeed = 'assets/icons/functions_icons/fan_speed.svg';
+ static const String assetsFreezing =
+ 'assets/icons/functions_icons/freezing.svg';
+ static const String assetsFanSpeed =
+ 'assets/icons/functions_icons/fan_speed.svg';
static const String assetsAcCooling =
'assets/icons/functions_icons/ac_cooling.svg';
static const String assetsAcHeating =
@@ -295,7 +309,8 @@ class Assets {
'assets/icons/functions_icons/celsius_degrees.svg';
static const String assetsTempreture =
'assets/icons/functions_icons/tempreture.svg';
- static const String assetsAcFanLow = 'assets/icons/functions_icons/ac_fan_low.svg';
+ static const String assetsAcFanLow =
+ 'assets/icons/functions_icons/ac_fan_low.svg';
static const String assetsAcFanMiddle =
'assets/icons/functions_icons/ac_fan_middle.svg';
static const String assetsAcFanHigh =
@@ -314,7 +329,8 @@ class Assets {
'assets/icons/functions_icons/far_detection.svg';
static const String assetsFarDetectionFunction =
'assets/icons/functions_icons/far_detection_function.svg';
- static const String assetsIndicator = 'assets/icons/functions_icons/indicator.svg';
+ static const String assetsIndicator =
+ 'assets/icons/functions_icons/indicator.svg';
static const String assetsMotionDetection =
'assets/icons/functions_icons/motion_detection.svg';
static const String assetsMotionlessDetection =
@@ -327,7 +343,8 @@ class Assets {
'assets/icons/functions_icons/master_state.svg';
static const String assetsSwitchAlarmSound =
'assets/icons/functions_icons/switch_alarm_sound.svg';
- static const String assetsResetOff = 'assets/icons/functions_icons/reset_off.svg';
+ static const String assetsResetOff =
+ 'assets/icons/functions_icons/reset_off.svg';
// Assets for automation_functions
static const String assetsCardUnlock =
@@ -371,13 +388,15 @@ class Assets {
static const String activeUser = 'assets/icons/active_user.svg';
static const String deActiveUser = 'assets/icons/deactive_user.svg';
static const String invitedIcon = 'assets/icons/invited_icon.svg';
- static const String rectangleCheckBox = 'assets/icons/rectangle_check_box.png';
+ static const String rectangleCheckBox =
+ 'assets/icons/rectangle_check_box.png';
static const String CheckBoxChecked = 'assets/icons/box_checked.png';
static const String emptyBox = 'assets/icons/empty_box.png';
static const String completeProcessIcon =
'assets/icons/compleate_process_icon.svg';
static const String completedDoneIcon = 'assets/images/completed_done.svg';
- static const String currentProcessIcon = 'assets/icons/current_process_icon.svg';
+ static const String currentProcessIcon =
+ 'assets/icons/current_process_icon.svg';
static const String uncomplete_ProcessIcon =
'assets/icons/uncompleate_process_icon.svg';
static const String wrongProcessIcon = 'assets/icons/wrong_process_icon.svg';
@@ -398,9 +417,11 @@ class Assets {
static const String successIcon = 'assets/icons/success_icon.svg';
static const String spaceLocationIcon = 'assets/icons/spaseLocationIcon.svg';
static const String scenesPlayIcon = 'assets/icons/scenesPlayIcon.png';
- static const String scenesPlayIconCheck = 'assets/icons/scenesPlayIconCheck.png';
+ static const String scenesPlayIconCheck =
+ 'assets/icons/scenesPlayIconCheck.png';
static const String presenceStateIcon = 'assets/icons/presence_state.svg';
- static const String currentDistanceIcon = 'assets/icons/current_distance_icon.svg';
+ static const String currentDistanceIcon =
+ 'assets/icons/current_distance_icon.svg';
static const String farDetectionIcon = 'assets/icons/far_detection_icon.svg';
static const String motionDetectionSensitivityIcon =
@@ -423,29 +444,44 @@ class Assets {
static const String cpsMode4 = 'assets/icons/cps_mode4.svg';
static const String closeToMotion = 'assets/icons/close_to_motion.svg';
static const String farAwayMotion = 'assets/icons/far_away_motion.svg';
- static const String communicationFault = 'assets/icons/communication_fault.svg';
+ static const String communicationFault =
+ 'assets/icons/communication_fault.svg';
static const String radarFault = 'assets/icons/radar_fault.svg';
- static const String selfTestingSuccess = 'assets/icons/self_testing_success.svg';
- static const String selfTestingFailure = 'assets/icons/self_testing_failure.svg';
- static const String selfTestingTimeout = 'assets/icons/self_testing_timeout.svg';
+ static const String selfTestingSuccess =
+ 'assets/icons/self_testing_success.svg';
+ static const String selfTestingFailure =
+ 'assets/icons/self_testing_failure.svg';
+ static const String selfTestingTimeout =
+ 'assets/icons/self_testing_timeout.svg';
static const String movingSpeed = 'assets/icons/moving_speed.svg';
static const String boundary = 'assets/icons/boundary.svg';
static const String motionMeter = 'assets/icons/motion_meter.svg';
- static const String spatialStaticValue = 'assets/icons/spatial_static_value.svg';
- static const String spatialMotionValue = 'assets/icons/spatial_motion_value.svg';
+ static const String spatialStaticValue =
+ 'assets/icons/spatial_static_value.svg';
+ static const String spatialMotionValue =
+ 'assets/icons/spatial_motion_value.svg';
static const String presenceJudgementThrshold =
'assets/icons/presence_judgement_threshold.svg';
static const String spaceType = 'assets/icons/space_type.svg';
static const String sportsPara = 'assets/icons/sports_para.svg';
- static const String sensitivityFeature1 = 'assets/icons/sensitivity_feature_1.svg';
- static const String sensitivityFeature2 = 'assets/icons/sensitivity_feature_2.svg';
- static const String sensitivityFeature3 = 'assets/icons/sensitivity_feature_3.svg';
- static const String sensitivityFeature4 = 'assets/icons/sensitivity_feature_4.svg';
- static const String sensitivityFeature5 = 'assets/icons/sensitivity_feature_5.svg';
- static const String sensitivityFeature6 = 'assets/icons/sensitivity_feature_6.svg';
- static const String sensitivityFeature7 = 'assets/icons/sensitivity_feature_7.svg';
- static const String sensitivityFeature8 = 'assets/icons/sensitivity_feature_8.svg';
- static const String sensitivityFeature9 = 'assets/icons/sensitivity_feature_9.svg';
+ static const String sensitivityFeature1 =
+ 'assets/icons/sensitivity_feature_1.svg';
+ static const String sensitivityFeature2 =
+ 'assets/icons/sensitivity_feature_2.svg';
+ static const String sensitivityFeature3 =
+ 'assets/icons/sensitivity_feature_3.svg';
+ static const String sensitivityFeature4 =
+ 'assets/icons/sensitivity_feature_4.svg';
+ static const String sensitivityFeature5 =
+ 'assets/icons/sensitivity_feature_5.svg';
+ static const String sensitivityFeature6 =
+ 'assets/icons/sensitivity_feature_6.svg';
+ static const String sensitivityFeature7 =
+ 'assets/icons/sensitivity_feature_7.svg';
+ static const String sensitivityFeature8 =
+ 'assets/icons/sensitivity_feature_8.svg';
+ static const String sensitivityFeature9 =
+ 'assets/icons/sensitivity_feature_9.svg';
static const String deviceTagIcon = 'assets/icons/device_tag_ic.svg';
static const String targetConfirmTimeIcon =
'assets/icons/target_confirm_time_icon.svg';
@@ -453,10 +489,13 @@ class Assets {
static const String indentLevelIcon = 'assets/icons/indent_level_icon.svg';
static const String triggerLevelIcon = 'assets/icons/trigger_level_icon.svg';
static const String blankCalendar = 'assets/icons/blank_calendar.svg';
- static const String refreshStatusIcon = 'assets/icons/refresh_status_icon.svg';
- static const String energyConsumedIcon = 'assets/icons/energy_consumed_icon.svg';
+ static const String refreshStatusIcon =
+ 'assets/icons/refresh_status_icon.svg';
+ static const String energyConsumedIcon =
+ 'assets/icons/energy_consumed_icon.svg';
- static const String closeSettingsIcon = 'assets/icons/close_settings_icon.svg';
+ static const String closeSettingsIcon =
+ 'assets/icons/close_settings_icon.svg';
static const String editNameIconSettings =
'assets/icons/edit_name_icon_settings.svg';
@@ -476,4 +515,6 @@ class Assets {
'assets/icons/empty_energy_management_per_device.svg';
static const String emptyHeatmap = 'assets/icons/empty_heatmap.svg';
static const String emptyRangeOfAqi = 'assets/icons/empty_range_of_aqi.svg';
+ static const String homeIcon = 'assets/icons/home_icon.svg';
+ static const String groupIcon = 'assets/icons/group_icon.svg';
}