mirror of
https://github.com/SyncrowIOT/syncrow-app.git
synced 2025-11-26 20:44:54 +00:00
SP-1397
This commit is contained in:
@ -20,60 +20,36 @@ class SceneRoomsTabBarDevicesView extends StatefulWidget {
|
||||
_SceneRoomsTabBarDevicesViewState();
|
||||
}
|
||||
|
||||
class _SceneRoomsTabBarDevicesViewState
|
||||
extends State<SceneRoomsTabBarDevicesView>
|
||||
class _SceneRoomsTabBarDevicesViewState extends State<SceneRoomsTabBarDevicesView>
|
||||
with SingleTickerProviderStateMixin {
|
||||
late final TabController _tabController;
|
||||
List<SubSpaceModel>? rooms = [];
|
||||
late final SpaceModel selectedSpace;
|
||||
var rooms = <SubSpaceModel>[];
|
||||
|
||||
@override
|
||||
void 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![0].id != '-1') {
|
||||
rooms?.insert(
|
||||
0,
|
||||
SubSpaceModel(
|
||||
name: 'All Devices',
|
||||
devices: context.read<DevicesCubit>().allDevices,
|
||||
id: '-1',
|
||||
),
|
||||
);
|
||||
}
|
||||
} else {
|
||||
rooms = [
|
||||
SubSpaceModel(
|
||||
name: 'All Devices',
|
||||
devices: context.read<DevicesCubit>().allDevices,
|
||||
id: '-1',
|
||||
)
|
||||
];
|
||||
if (rooms.isNotEmpty) {
|
||||
final isFirstRoomIdValid = rooms[0].id != '-1';
|
||||
if (isFirstRoomIdValid) {
|
||||
rooms.insert(0, defaultSubSpaceModel);
|
||||
}
|
||||
|
||||
_tabController = TabController(length: rooms!.length, vsync: this);
|
||||
_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;
|
||||
} else {
|
||||
rooms = [defaultSubSpaceModel];
|
||||
}
|
||||
|
||||
_tabController = TabController(length: rooms.length, vsync: this);
|
||||
_tabController.addListener(_handleTabSwitched);
|
||||
}
|
||||
|
||||
@override
|
||||
@ -83,18 +59,29 @@ class _SceneRoomsTabBarDevicesViewState
|
||||
_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
|
||||
Widget build(BuildContext context) {
|
||||
return DefaultScaffold(
|
||||
title: StringsManager.createScene,
|
||||
padding: EdgeInsets.zero,
|
||||
padding: EdgeInsetsDirectional.zero,
|
||||
leading: IconButton(
|
||||
onPressed: () {
|
||||
navigateToRoute(context, Routes.sceneTasksRoute);
|
||||
},
|
||||
icon: const Icon(
|
||||
Icons.arrow_back_ios,
|
||||
),
|
||||
onPressed: () => navigateToRoute(context, Routes.sceneTasksRoute),
|
||||
icon: const Icon(Icons.arrow_back_ios),
|
||||
),
|
||||
child: SceneDevicesBody(tabController: _tabController, rooms: rooms),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user