diff --git a/lib/features/scene/view/scene_rooms_tabbar.dart b/lib/features/scene/view/scene_rooms_tabbar.dart index c677a72..65d4423 100644 --- a/lib/features/scene/view/scene_rooms_tabbar.dart +++ b/lib/features/scene/view/scene_rooms_tabbar.dart @@ -20,60 +20,36 @@ class SceneRoomsTabBarDevicesView extends StatefulWidget { _SceneRoomsTabBarDevicesViewState(); } -class _SceneRoomsTabBarDevicesViewState - extends State +class _SceneRoomsTabBarDevicesViewState extends State with SingleTickerProviderStateMixin { late final TabController _tabController; - List? rooms = []; late final SpaceModel selectedSpace; + var rooms = []; @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().allDevices, + id: '-1', + ); - if (rooms != null && rooms!.isNotEmpty) { - if (rooms![0].id != '-1') { - rooms?.insert( - 0, - SubSpaceModel( - name: 'All Devices', - devices: context.read().allDevices, - id: '-1', - ), - ); - } - } else { - rooms = [ - SubSpaceModel( - name: 'All Devices', - devices: context.read().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().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().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), );