Add HomeCubit and HomeState classes

This commit adds the HomeCubit class along with its corresponding HomeState
class. It also includes necessary imports and updates references to the
previously used SpacesCubit to the new HomeCubit in various files.
handled the multible onCreate -- HomeCubit
This commit is contained in:
Mohammad Salameh
2024-03-24 14:43:13 +03:00
parent c0bfd24751
commit e17c0af144
15 changed files with 72 additions and 77 deletions

View File

@ -14,11 +14,11 @@ import 'package:syncrow_app/services/api/network_exception.dart';
import 'package:syncrow_app/services/api/spaces_api.dart';
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
part 'spaces_state.dart';
part 'home_state.dart';
class SpacesCubit extends Cubit<SpacesState> {
SpacesCubit() : super(SpacesInitial()) {
if (SpacesCubit.spaces != null) {
class HomeCubit extends Cubit<SpacesState> {
HomeCubit() : super(SpacesInitial()) {
if (HomeCubit.spaces != null) {
if (selectedSpace == null) {
fetchSpaces().then((value) {
if (selectedSpace != null) {
@ -32,7 +32,7 @@ class SpacesCubit extends Cubit<SpacesState> {
}
}
static SpacesCubit get(context) => BlocProvider.of(context);
static HomeCubit get(context) => BlocProvider.of(context);
static List<SpaceModel>? spaces;
@ -236,7 +236,7 @@ class SpacesCubit extends Cubit<SpacesState> {
),
};
var bottomNavItems = [
static var bottomNavItems = [
defaultBottomNavBarItem(icon: Assets.iconsDashboard, label: 'Dashboard'),
// defaultBottomNavBarItem(icon: Assets.iconslayout, label: 'Layout'),
defaultBottomNavBarItem(icon: Assets.iconsDevices, label: 'Devices'),

View File

@ -1,4 +1,4 @@
part of 'spaces_cubit.dart';
part of 'home_cubit.dart';
abstract class SpacesState {}

View File

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_app/features/app_layout/bloc/spaces_cubit.dart';
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
import 'package:syncrow_app/features/app_layout/view/widgets/app_body.dart';
import 'package:syncrow_app/features/app_layout/view/widgets/default_app_bar.dart';
import 'package:syncrow_app/features/app_layout/view/widgets/default_nav_bar.dart';
@ -18,13 +18,13 @@ class AppLayout extends StatelessWidget {
return MultiBlocProvider(
providers: [
BlocProvider(
create: (context) => SpacesCubit(),
create: (context) => HomeCubit(),
),
BlocProvider(
create: (context) => DevicesCubit(),
),
],
child: BlocListener<SpacesCubit, SpacesState>(
child: BlocListener<HomeCubit, SpacesState>(
listener: (context, state) {
if (state is GetSpacesError) {
ScaffoldMessenger.of(context).showSnackBar(
@ -36,7 +36,7 @@ class AppLayout extends StatelessWidget {
.popUntil((route) => route.settings.name == Routes.authLogin);
}
},
child: BlocBuilder<SpacesCubit, SpacesState>(
child: BlocBuilder<HomeCubit, SpacesState>(
builder: (context, state) {
return AnnotatedRegion(
value: SystemUiOverlayStyle(
@ -44,7 +44,7 @@ class AppLayout extends StatelessWidget {
statusBarIconBrightness: Brightness.light,
),
child: SafeArea(
child: BlocBuilder<SpacesCubit, SpacesState>(
child: BlocBuilder<HomeCubit, SpacesState>(
builder: (context, state) {
return Scaffold(
backgroundColor: ColorsManager.backgroundColor,

View File

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:syncrow_app/features/app_layout/bloc/spaces_cubit.dart';
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
import 'package:syncrow_app/utils/context_extension.dart';
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
@ -15,9 +15,9 @@ class AppBarHomeDropdown extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<SpacesCubit, SpacesState>(
return BlocBuilder<HomeCubit, SpacesState>(
builder: (context, state) {
return SpacesCubit.selectedSpace == null
return HomeCubit.selectedSpace == null
? const Center(child: BodyMedium(text: 'No Home Selected'))
: Padding(
padding: const EdgeInsets.only(left: 10, right: 10),
@ -30,8 +30,8 @@ class AppBarHomeDropdown extends StatelessWidget {
underline: const SizedBox.shrink(),
padding: const EdgeInsets.all(0),
borderRadius: BorderRadius.circular(20),
value: SpacesCubit.selectedSpace!.id,
items: SpacesCubit.spaces!.map((space) {
value: HomeCubit.selectedSpace!.id,
items: HomeCubit.spaces!.map((space) {
return DropdownMenuItem(
value: space.id,
child: SizedBox(
@ -67,7 +67,7 @@ class AppBarHomeDropdown extends StatelessWidget {
}).toList(),
onChanged: (value) {
if (value != null) {
SpacesCubit.get(context).selectSpace(SpacesCubit.spaces!
HomeCubit.get(context).selectSpace(HomeCubit.spaces!
.firstWhere((element) => element.id == value));
}
},

View File

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_app/features/app_layout/bloc/spaces_cubit.dart';
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
import '../../../../generated/assets.dart';
@ -12,7 +12,7 @@ class AppBody extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<SpacesCubit, SpacesState>(
return BlocBuilder<HomeCubit, SpacesState>(
builder: (context, state) {
return Container(
width: MediaQuery.sizeOf(context).width,
@ -26,7 +26,7 @@ class AppBody extends StatelessWidget {
opacity: 0.4,
),
),
child: BlocConsumer<SpacesCubit, SpacesState>(
child: BlocConsumer<HomeCubit, SpacesState>(
listener: (context, state) {
if (state is GetSpacesError) {
ScaffoldMessenger.of(context).showSnackBar(
@ -39,7 +39,7 @@ class AppBody extends StatelessWidget {
builder: (context, state) {
return state is! GetSpacesLoading ||
state is! GetSpaceRoomsLoading
? SpacesCubit.get(context).pages[SpacesCubit.pageIndex]
? HomeCubit.get(context).pages[HomeCubit.pageIndex]
: const Center(child: CircularProgressIndicator());
},
),

View File

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_app/features/app_layout/bloc/spaces_cubit.dart';
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
import 'package:syncrow_app/utils/resource_manager/constants.dart';
class DefaultAppBar extends StatelessWidget implements PreferredSizeWidget {
@ -9,7 +9,7 @@ class DefaultAppBar extends StatelessWidget implements PreferredSizeWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<SpacesCubit, SpacesState>(
return BlocBuilder<HomeCubit, SpacesState>(
builder: (context, state) {
return Padding(
padding: const EdgeInsets.only(
@ -19,15 +19,14 @@ class DefaultAppBar extends StatelessWidget implements PreferredSizeWidget {
backgroundColor: Colors.transparent,
leadingWidth: 150,
toolbarHeight: Constants.appBarHeight,
leading: SpacesCubit.spaces != null
? SpacesCubit.spaces!.isNotEmpty
? SpacesCubit.appBarLeading[SpacesCubit()
.bottomNavItems[SpacesCubit.pageIndex]
.label]
leading: HomeCubit.spaces != null
? HomeCubit.spaces!.isNotEmpty
? HomeCubit.appBarLeading[
HomeCubit.bottomNavItems[HomeCubit.pageIndex].label]
: null
: null,
actions: SpacesCubit.appBarActions[
SpacesCubit().bottomNavItems[SpacesCubit.pageIndex].label],
actions: HomeCubit.appBarActions[
HomeCubit.bottomNavItems[HomeCubit.pageIndex].label],
),
);
},

View File

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_app/features/app_layout/bloc/spaces_cubit.dart';
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
import 'package:syncrow_app/features/devices/bloc/devices_cubit.dart';
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
import 'package:syncrow_app/utils/resource_manager/constants.dart';
@ -13,9 +13,9 @@ class DefaultNavBar extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<SpacesCubit, SpacesState>(
return BlocBuilder<HomeCubit, SpacesState>(
builder: (context, state) {
var cubit = SpacesCubit.get(context);
var cubit = HomeCubit.get(context);
return SizedBox(
height: Constants.bottomNavBarHeight,
child: BottomNavigationBar(
@ -25,11 +25,11 @@ class DefaultNavBar extends StatelessWidget {
if (DevicesCubit.get(context).chosenCategoryView != null) {
DevicesCubit().clearCategoriesSelection(context);
}
if (SpacesCubit.get(context).selectedRoom != null) {
SpacesCubit.get(context).unselectRoom();
if (HomeCubit.get(context).selectedRoom != null) {
HomeCubit.get(context).unselectRoom();
}
},
currentIndex: SpacesCubit.pageIndex,
currentIndex: HomeCubit.pageIndex,
selectedItemColor: ColorsManager.primaryColor,
selectedLabelStyle: const TextStyle(
color: ColorsManager.primaryColor,
@ -39,7 +39,7 @@ class DefaultNavBar extends StatelessWidget {
unselectedItemColor: Colors.grey,
type: BottomNavigationBarType.fixed,
elevation: 0,
items: cubit.bottomNavItems,
items: HomeCubit.bottomNavItems,
),
);
},