This commit is contained in:
Faris Armoush
2025-04-16 15:11:43 +03:00
parent 87a2c08f64
commit 443eea9421

View File

@ -20,60 +20,36 @@ class SceneRoomsTabBarDevicesView extends StatefulWidget {
_SceneRoomsTabBarDevicesViewState(); _SceneRoomsTabBarDevicesViewState();
} }
class _SceneRoomsTabBarDevicesViewState class _SceneRoomsTabBarDevicesViewState extends State<SceneRoomsTabBarDevicesView>
extends State<SceneRoomsTabBarDevicesView>
with SingleTickerProviderStateMixin { with SingleTickerProviderStateMixin {
late final TabController _tabController; late final TabController _tabController;
List<SubSpaceModel>? rooms = [];
late final SpaceModel selectedSpace; late final SpaceModel selectedSpace;
var rooms = <SubSpaceModel>[];
@override @override
void initState() { void initState() {
super.initState(); super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) { selectedSpace = HomeCubit.getInstance().selectedSpace!;
selectedSpace = HomeCubit.getInstance().selectedSpace!;
rooms = List.from(selectedSpace.subspaces ?? []); rooms = List.from(selectedSpace.subspaces);
final defaultSubSpaceModel = SubSpaceModel(
name: 'All Devices',
devices: context.read<DevicesCubit>().allDevices,
id: '-1',
);
if (rooms != null && rooms!.isNotEmpty) { if (rooms.isNotEmpty) {
if (rooms![0].id != '-1') { final isFirstRoomIdValid = rooms[0].id != '-1';
rooms?.insert( if (isFirstRoomIdValid) {
0, rooms.insert(0, defaultSubSpaceModel);
SubSpaceModel(
name: 'All Devices',
devices: context.read<DevicesCubit>().allDevices,
id: '-1',
),
);
}
} else {
rooms = [
SubSpaceModel(
name: 'All Devices',
devices: context.read<DevicesCubit>().allDevices,
id: '-1',
)
];
} }
} else {
_tabController = TabController(length: rooms!.length, vsync: this); rooms = [defaultSubSpaceModel];
_tabController.addListener(_handleTabSwitched);
setState(() {});
});
}
void _handleTabSwitched() {
if (_tabController.indexIsChanging) {
final value = _tabController.index;
/// select tab
context.read<TabBarBloc>().add(TabChanged(
selectedIndex: value,
roomId: rooms?[value].id ?? '',
unit: selectedSpace));
return;
} }
_tabController = TabController(length: rooms.length, vsync: this);
_tabController.addListener(_handleTabSwitched);
} }
@override @override
@ -83,18 +59,29 @@ class _SceneRoomsTabBarDevicesViewState
_tabController.removeListener(() {}); _tabController.removeListener(() {});
} }
void _handleTabSwitched() {
if (_tabController.indexIsChanging) {
final index = _tabController.index;
context.read<TabBarBloc>().add(
TabChanged(
selectedIndex: index,
roomId: rooms[index].id ?? '',
unit: selectedSpace,
),
);
return;
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return DefaultScaffold( return DefaultScaffold(
title: StringsManager.createScene, title: StringsManager.createScene,
padding: EdgeInsets.zero, padding: EdgeInsetsDirectional.zero,
leading: IconButton( leading: IconButton(
onPressed: () { onPressed: () => navigateToRoute(context, Routes.sceneTasksRoute),
navigateToRoute(context, Routes.sceneTasksRoute); icon: const Icon(Icons.arrow_back_ios),
},
icon: const Icon(
Icons.arrow_back_ios,
),
), ),
child: SceneDevicesBody(tabController: _tabController, rooms: rooms), child: SceneDevicesBody(tabController: _tabController, rooms: rooms),
); );