push search, space color selection, global user access fixes

This commit is contained in:
ashrafzarkanisala
2024-09-05 00:43:57 +03:00
parent c9160debd3
commit 74dccbf899
12 changed files with 203 additions and 192 deletions
+6 -3
View File
@@ -4,6 +4,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:syncrow_web/pages/auth/bloc/auth_bloc.dart';
import 'package:syncrow_web/pages/home/bloc/home_bloc.dart';
import 'package:syncrow_web/pages/home/bloc/home_event.dart';
import 'package:syncrow_web/pages/visitor_password/bloc/visitor_password_bloc.dart';
import 'package:go_router/go_router.dart';
import 'package:syncrow_web/services/locator.dart';
@@ -13,7 +14,8 @@ import 'package:syncrow_web/utils/theme/theme.dart';
Future<void> main() async {
try {
const environment = String.fromEnvironment('FLAVOR', defaultValue: 'development');
const environment =
String.fromEnvironment('FLAVOR', defaultValue: 'development');
await dotenv.load(fileName: '.env.$environment');
WidgetsFlutterBinding.ensureInitialized();
initialSetup();
@@ -43,10 +45,11 @@ class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
HomeBloc.fetchUserInfo();
//HomeBloc.fetchUserInfo();
return MultiBlocProvider(
providers: [
BlocProvider(create: (context) => HomeBloc()),
BlocProvider(
create: (context) => HomeBloc()..add(const FetchUserInfo())),
BlocProvider<VisitorPasswordBloc>(
create: (context) => VisitorPasswordBloc(),
)
@@ -134,11 +134,27 @@ class DeviceManagementBloc
void _onSearchDevices(
SearchDevices event, Emitter<DeviceManagementState> emit) {
if (_devices.isNotEmpty) {
_selectedDevices.clear();
_selectedIndex = 0;
// If the search fields are all empty, restore the last filtered devices
if ((event.community == null || event.community!.isEmpty) &&
(event.unitName == null || event.unitName!.isEmpty) &&
(event.productName == null || event.productName!.isEmpty)) {
// If the current state is filtered, re-emit the filtered state
if (state is DeviceManagementFiltered) {
add(FilterDevices(_getFilterFromIndex(_selectedIndex)));
}
}
final filteredDevices = _devices.where((device) {
List<AllDevicesModel> devicesToSearch = _devices;
if (state is DeviceManagementFiltered) {
devicesToSearch = (state as DeviceManagementFiltered).filteredDevices;
}
if (devicesToSearch.isNotEmpty) {
_selectedDevices.clear();
_selectedIndex = _selectedIndex;
final filteredDevices = devicesToSearch.where((device) {
final matchesCommunity = event.community == null ||
event.community!.isEmpty ||
(device.room?.name
@@ -157,11 +173,21 @@ class DeviceManagementBloc
?.toLowerCase()
.contains(event.productName!.toLowerCase()) ??
false);
return matchesCommunity && matchesUnit && matchesProductName;
final matchesDeviceName = event.productName == null ||
event.productName!.isEmpty ||
(device.categoryName
?.toLowerCase()
.contains(event.productName!.toLowerCase()) ??
false);
return matchesCommunity &&
matchesUnit &&
(matchesProductName || matchesDeviceName);
}).toList();
emit(DeviceManagementFiltered(
filteredDevices: filteredDevices,
selectedIndex: 0,
selectedIndex: _selectedIndex,
onlineCount: _onlineCount,
offlineCount: _offlineCount,
lowBatteryCount: _lowBatteryCount,
@@ -119,7 +119,7 @@ class AllDevicesModel {
timeZone = json['timeZone']?.toString();
updateTime = int.tryParse(json['updateTime']?.toString() ?? '');
uuid = json['uuid']?.toString();
batteryLevel = int.tryParse(json['batteryLevel']?.toString() ?? '');
batteryLevel = int.tryParse(json['battery']?.toString() ?? '');
}
Map<String, dynamic> toJson() {
final data = <String, dynamic>{};
@@ -151,7 +151,7 @@ class AllDevicesModel {
data['timeZone'] = timeZone;
data['updateTime'] = updateTime;
data['uuid'] = uuid;
data['batteryLevel'] = batteryLevel;
data['battery'] = batteryLevel;
return data;
}
}
@@ -53,18 +53,19 @@ class PresenceSpaceType extends StatelessWidget {
return GestureDetector(
onTap: () => action(spaceType.name),
child: Container(
width: 40,
height: 40,
padding: const EdgeInsets.all(8),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(100),
border: Border.all(
color: value == spaceType
? ColorsManager.blueColor
: Colors.transparent,
),
color: value == spaceType
? ColorsManager.primaryColorWithOpacity
: ColorsManager.textGray,
),
child: SvgPicture.asset(
icon,
width: 40,
height: 40,
width: 25,
height: 22,
),
),
);
+10 -10
View File
@@ -16,7 +16,7 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> {
final BuchheimWalkerConfiguration builder = BuchheimWalkerConfiguration();
List<Node> sourcesList = [];
List<Node> destinationsList = [];
static UserModel? user;
UserModel? user;
HomeBloc() : super((HomeInitial())) {
on<CreateNewNode>(_createNode);
@@ -50,15 +50,15 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> {
}
}
static Future fetchUserInfo() async {
try {
var uuid =
await const FlutterSecureStorage().read(key: UserModel.userUuidKey);
user = await HomeApi().fetchUserInfo(uuid);
} catch (e) {
return;
}
}
// static Future fetchUserInfo() async {
// try {
// var uuid =
// await const FlutterSecureStorage().read(key: UserModel.userUuidKey);
// user = await HomeApi().fetchUserInfo(uuid);
// } catch (e) {
// return;
// }
// }
List<HomeItemModel> homeItems = [
HomeItemModel(
+1 -15
View File
@@ -1,25 +1,11 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_web/pages/home/bloc/home_bloc.dart';
import 'package:syncrow_web/pages/home/bloc/home_event.dart';
import 'package:syncrow_web/pages/home/view/home_page_mobile.dart';
import 'package:syncrow_web/pages/home/view/home_page_web.dart';
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
class HomePage extends StatefulWidget {
class HomePage extends StatelessWidget with HelperResponsiveLayout {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> with HelperResponsiveLayout {
@override
void initState() {
super.initState();
context.read<HomeBloc>().add(const FetchUserInfo());
}
@override
Widget build(BuildContext context) {
final isSmallScreen = isSmallScreenSize(context);
+9 -9
View File
@@ -5,9 +5,7 @@ import 'package:syncrow_web/pages/home/bloc/home_state.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
import '../pages/auth/model/user_model.dart';
class WebAppBar extends StatefulWidget{
class WebAppBar extends StatefulWidget {
final Widget? title;
final Widget? centerBody;
final Widget? rightBody;
@@ -18,16 +16,18 @@ class WebAppBar extends StatefulWidget{
State<WebAppBar> createState() => _WebAppBarState();
}
class _WebAppBarState extends State<WebAppBar> with HelperResponsiveLayout {
class _WebAppBarState extends State<WebAppBar> with HelperResponsiveLayout {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
bool isSmallScreen = isSmallScreenSize(context);
bool isHalfMediumScreen = isHafMediumScreenSize(context);
return BlocBuilder<HomeBloc, HomeState>(builder: (context, state) {
final user = context.read<HomeBloc>().user;
return Container(
height: (isSmallScreen || isHalfMediumScreen) ? 130 : 100,
decoration: const BoxDecoration(color: ColorsManager.secondaryColor),
@@ -46,7 +46,7 @@ class _WebAppBarState extends State<WebAppBar> with HelperResponsiveLayout {
padding: const EdgeInsets.only(top: 8.0),
child: widget.centerBody,
),
if (widget.rightBody != null || HomeBloc.user != null)
if (widget.rightBody != null || user != null)
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
@@ -69,9 +69,9 @@ class _WebAppBarState extends State<WebAppBar> with HelperResponsiveLayout {
const SizedBox(
width: 10,
),
if (HomeBloc.user != null)
if (user != null)
Text(
'${HomeBloc.user!.firstName} ${HomeBloc.user!.lastName}',
'${user.firstName} ${user.lastName}',
style: Theme.of(context).textTheme.bodyLarge,
),
],
@@ -123,9 +123,9 @@ class _WebAppBarState extends State<WebAppBar> with HelperResponsiveLayout {
const SizedBox(
width: 10,
),
if (HomeBloc.user != null)
if (user != null)
Text(
'${HomeBloc.user!.firstName} ${HomeBloc.user!.lastName}',
'${user.firstName} ${user.lastName}',
style: Theme.of(context).textTheme.bodyLarge,
),
],