push fixes

This commit is contained in:
ashrafzarkanisala
2024-08-28 20:52:09 +03:00
parent cfc8d4cf2f
commit adf19818e7
9 changed files with 140 additions and 71 deletions

View File

@ -1,7 +1,5 @@
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';
@ -9,11 +7,11 @@ import 'package:syncrow_web/pages/common/buttons/default_button.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/text_field/custom_web_textfield.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/assets.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';
@ -38,30 +36,18 @@ class AccessManagementPage extends StatelessWidget {
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,
)
],
style: Theme.of(context)
.textTheme
.headlineMedium!
.copyWith(color: Colors.white),
),
const NavigateHomeGridView(),
],
),
],
scaffoldBody: BlocProvider(
create: (BuildContext context) => AccessBloc()..add(FetchTableData()),
create: (BuildContext context) =>
AccessBloc()..add(FetchTableData()),
child: BlocConsumer<AccessBloc, AccessState>(
listener: (context, state) {},
builder: (context, state) {
@ -82,11 +68,15 @@ class AccessManagementPage extends StatelessWidget {
child: Flexible(
child: ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: BlocProvider.of<AccessBloc>(context).tabs.length,
itemCount:
BlocProvider.of<AccessBloc>(context)
.tabs
.length,
shrinkWrap: true,
itemBuilder: (context, index) {
final isSelected = index ==
BlocProvider.of<AccessBloc>(context).selectedIndex;
BlocProvider.of<AccessBloc>(context)
.selectedIndex;
return InkWell(
onTap: () {
BlocProvider.of<AccessBloc>(context)
@ -96,25 +86,36 @@ class AccessManagementPage extends StatelessWidget {
decoration: BoxDecoration(
color: ColorsManager.boxColor,
border: Border.all(
color: isSelected ? Colors.blue : Colors.transparent,
color: isSelected
? Colors.blue
: Colors.transparent,
width: 2.0,
),
borderRadius: index == 0
? const BorderRadius.only(
topLeft: Radius.circular(10),
bottomLeft: Radius.circular(10))
topLeft:
Radius.circular(10),
bottomLeft:
Radius.circular(10))
: index == 3
? const BorderRadius.only(
topRight: Radius.circular(10),
bottomRight: Radius.circular(10))
topRight:
Radius.circular(10),
bottomRight:
Radius.circular(10))
: null,
),
padding: const EdgeInsets.only(left: 10, right: 10),
padding: const EdgeInsets.only(
left: 10, right: 10),
child: Center(
child: Text(
BlocProvider.of<AccessBloc>(context).tabs[index],
BlocProvider.of<AccessBloc>(
context)
.tabs[index],
style: TextStyle(
color: isSelected ? Colors.blue : Colors.black,
color: isSelected
? Colors.blue
: Colors.black,
),
),
),
@ -150,13 +151,19 @@ class AccessManagementPage extends StatelessWidget {
title: 'Access Time',
size: size,
endTime: () {
accessBloc.add(SelectTime(context: context, isStart: false));
accessBloc.add(SelectTime(
context: context, isStart: false));
},
startTime: () {
accessBloc.add(SelectTime(context: context, isStart: true));
accessBloc.add(SelectTime(
context: context, isStart: true));
},
firstString: BlocProvider.of<AccessBloc>(context).startTime,
secondString: BlocProvider.of<AccessBloc>(context).endTime,
firstString:
BlocProvider.of<AccessBloc>(context)
.startTime,
secondString:
BlocProvider.of<AccessBloc>(context)
.endTime,
),
const SizedBox(
width: 15,
@ -168,13 +175,17 @@ class AccessManagementPage extends StatelessWidget {
child: DefaultButton(
onPressed: () {
accessBloc.add(FilterDataEvent(
selectedTabIndex: BlocProvider.of<AccessBloc>(
context)
selectedTabIndex: BlocProvider
.of<AccessBloc>(
context)
.selectedIndex, // Pass the selected tab index
passwordName:
accessBloc.passwordName.text.toLowerCase(),
startTime: accessBloc.effectiveTimeTimeStamp,
endTime: accessBloc.expirationTimeTimeStamp));
passwordName: accessBloc
.passwordName.text
.toLowerCase(),
startTime: accessBloc
.effectiveTimeTimeStamp,
endTime: accessBloc
.expirationTimeTimeStamp));
},
borderRadius: 9,
child: const Text('Search'))),
@ -190,7 +201,8 @@ class AccessManagementPage extends StatelessWidget {
onPressed: () {
accessBloc.add(ResetSearch());
},
backgroundColor: ColorsManager.whiteColors,
backgroundColor:
ColorsManager.whiteColors,
borderRadius: 9,
child: Text(
'Reset',
@ -227,7 +239,8 @@ class AccessManagementPage extends StatelessWidget {
});
},
borderRadius: 8,
child: const Text('+ Create Visitor Password ')),
child: const Text(
'+ Create Visitor Password ')),
),
const SizedBox(
width: 10,
@ -237,7 +250,8 @@ class AccessManagementPage extends StatelessWidget {
decoration: containerDecoration,
child: DefaultButton(
borderRadius: 8,
backgroundColor: ColorsManager.whiteColors,
backgroundColor:
ColorsManager.whiteColors,
child: Text(
'Admin Password',
style: Theme.of(context)

View File

@ -65,11 +65,14 @@ class _DynamicTableState extends State<DynamicTable> {
child: Column(
children: [
Container(
decoration: widget.headerDecoration ?? BoxDecoration(color: Colors.grey[200]),
decoration: widget.headerDecoration ??
BoxDecoration(color: Colors.grey[200]),
child: Row(
children: [
if (widget.withCheckBox) _buildSelectAllCheckbox(),
...widget.headers.map((header) => _buildTableHeaderCell(header)).toList(),
...widget.headers
.map((header) => _buildTableHeaderCell(header))
.toList(),
],
),
),
@ -93,7 +96,8 @@ class _DynamicTableState extends State<DynamicTable> {
style: Theme.of(context)
.textTheme
.bodySmall!
.copyWith(color: ColorsManager.grayColor),
.copyWith(
color: ColorsManager.grayColor),
)
],
),
@ -113,10 +117,12 @@ class _DynamicTableState extends State<DynamicTable> {
return Row(
children: [
if (widget.withCheckBox)
_buildRowCheckbox(index, widget.size.height * 0.10),
_buildRowCheckbox(
index, widget.size.height * 0.10),
...row
.map((cell) =>
_buildTableCell(cell.toString(), widget.size.height * 0.10))
.map((cell) => _buildTableCell(
cell.toString(),
widget.size.height * 0.10))
.toList(),
],
);
@ -222,7 +228,7 @@ class _DynamicTableState extends State<DynamicTable> {
statusColor = ColorsManager.red;
break;
default:
statusColor = Colors.black; // Default color
statusColor = Colors.black;
}
return Expanded(
@ -241,9 +247,11 @@ class _DynamicTableState extends State<DynamicTable> {
child: Text(
content,
style: TextStyle(
color: batteryLevel != null && batteryLevel < 20
color: (batteryLevel != null && batteryLevel < 20)
? ColorsManager.red
: statusColor, // Use the passed color or default to black
: (batteryLevel != null && batteryLevel > 20)
? ColorsManager.green
: statusColor,
fontSize: 10,
fontWeight: FontWeight.w400),
),

View File

@ -116,16 +116,20 @@ class _CurrentTempState extends State<CurrentTemp> {
description: '°C',
descriptionColor: ColorsManager.dialogBlueTitle,
onIncrement: () {
setState(() {
_adjustedValue++;
});
_onValueChanged(_adjustedValue);
if (_adjustedValue < 30) {
setState(() {
_adjustedValue++;
});
_onValueChanged(_adjustedValue);
}
},
onDecrement: () {
setState(() {
_adjustedValue--;
});
_onValueChanged(_adjustedValue);
if (_adjustedValue > 20) {
setState(() {
_adjustedValue--;
});
_onValueChanged(_adjustedValue);
}
}),
],
),

View File

@ -150,13 +150,14 @@ class DeviceManagementBloc
false);
return matchesCommunity && matchesUnit && matchesProductName;
}).toList();
_selectedDevices = [];
emit(DeviceManagementFiltered(
filteredDevices: filteredDevices,
selectedIndex: _selectedIndex,
selectedIndex: 0,
onlineCount: _onlineCount,
offlineCount: _offlineCount,
lowBatteryCount: _lowBatteryCount,
selectedDevice: null,
));
}
}

View File

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/bloc/device_managment_bloc.dart';
import 'package:syncrow_web/pages/device_managment/all_devices/widgets/device_managment_body.dart';
import 'package:syncrow_web/pages/device_managment/shared/navigate_home_grid_view.dart';
import 'package:syncrow_web/web_layout/web_scaffold.dart';
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
@ -17,6 +18,9 @@ class DeviceManagementPage extends StatelessWidget with HelperResponsiveLayout {
'Device Management',
style: Theme.of(context).textTheme.headlineLarge,
),
appBarBody: const [
NavigateHomeGridView(),
],
enableMenuSideba: isLargeScreenSize(context),
scaffoldBody: BlocBuilder<DeviceManagementBloc, DeviceManagementState>(
builder: (context, state) {

View File

@ -45,7 +45,7 @@ class DeviceManagementBody extends StatelessWidget with HelperResponsiveLayout {
}
final tabs = [
'All (${devices.length})',
'All',
'Online ($onlineCount)',
'Offline ($offlineCount)',
'Low Battery ($lowBatteryCount)',
@ -144,7 +144,7 @@ class DeviceManagementBody extends StatelessWidget with HelperResponsiveLayout {
device.room?.name ?? '',
device.batteryLevel != null
? '${device.batteryLevel}%'
: '',
: '-',
formatDateTime(DateTime.fromMillisecondsSinceEpoch(
(device.createTime ?? 0) * 1000)),
device.online == true ? 'Online' : 'Offline',

View File

@ -28,7 +28,7 @@ class _DeviceSearchFiltersState extends State<DeviceSearchFilters>
@override
Widget build(BuildContext context) {
return isLargeScreenSize(context)
return isExtraLargeScreenSize(context)
? Row(
children: [
_buildSearchField("Community", communityController, 200),

View File

@ -0,0 +1,33 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:go_router/go_router.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:syncrow_web/utils/constants/routes_const.dart';
class NavigateHomeGridView extends StatelessWidget {
const NavigateHomeGridView({
super.key,
});
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
InkWell(
onTap: () {
context.go(RoutesConst.home);
},
child: SvgPicture.asset(
height: 20,
width: 20,
Assets.grid,
),
),
const SizedBox(
width: 10,
)
],
);
}
}

View File

@ -2,15 +2,20 @@ import 'package:flutter/material.dart';
mixin HelperResponsiveLayout {
bool isSmallScreenSize(BuildContext context) {
return MediaQuery.of(context).size.width < 700;
return MediaQuery.of(context).size.width < 600;
}
bool isMediumScreenSize(BuildContext context) {
return MediaQuery.of(context).size.width >= 700 &&
MediaQuery.of(context).size.width < 1400;
return MediaQuery.of(context).size.width >= 600 &&
MediaQuery.of(context).size.width < 1024;
}
bool isLargeScreenSize(BuildContext context) {
return MediaQuery.of(context).size.width >= 1400;
return MediaQuery.of(context).size.width >= 1024 &&
MediaQuery.of(context).size.width < 1440;
}
bool isExtraLargeScreenSize(BuildContext context) {
return MediaQuery.of(context).size.width >= 1440;
}
}