mirror of
https://github.com/SyncrowIOT/syncrow-app.git
synced 2025-07-16 18:16:21 +00:00
Refactor HomeCubit class for better instance management
Create a private static instance variable and refactor methods for better instance management in the HomeCubit class.
This commit is contained in:
@ -17,8 +17,10 @@ import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
|||||||
part 'home_state.dart';
|
part 'home_state.dart';
|
||||||
|
|
||||||
class HomeCubit extends Cubit<HomeState> {
|
class HomeCubit extends Cubit<HomeState> {
|
||||||
HomeCubit() : super(SpacesInitial()) {
|
// Create a private static instance variable
|
||||||
if (HomeCubit.spaces != null) {
|
static HomeCubit? _instance;
|
||||||
|
HomeCubit._() : super(HomeInitial()) {
|
||||||
|
if (spaces != null) {
|
||||||
if (selectedSpace == null) {
|
if (selectedSpace == null) {
|
||||||
fetchSpaces().then((value) {
|
fetchSpaces().then((value) {
|
||||||
if (selectedSpace != null) {
|
if (selectedSpace != null) {
|
||||||
@ -31,12 +33,17 @@ class HomeCubit extends Cubit<HomeState> {
|
|||||||
fetchSpaces(); // this is for the first time
|
fetchSpaces(); // this is for the first time
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
static HomeCubit getInstance() {
|
||||||
|
// If an instance already exists, return it
|
||||||
|
_instance ??= HomeCubit._();
|
||||||
|
return _instance!;
|
||||||
|
}
|
||||||
|
|
||||||
static HomeCubit get(context) => BlocProvider.of(context);
|
static HomeCubit get(context) => BlocProvider.of(context);
|
||||||
|
|
||||||
static List<SpaceModel>? spaces;
|
List<SpaceModel>? spaces;
|
||||||
|
|
||||||
static SpaceModel? selectedSpace;
|
SpaceModel? selectedSpace;
|
||||||
|
|
||||||
RoomModel? selectedRoom;
|
RoomModel? selectedRoom;
|
||||||
|
|
||||||
@ -46,7 +53,12 @@ class HomeCubit extends Cubit<HomeState> {
|
|||||||
|
|
||||||
var duration = const Duration(milliseconds: 300);
|
var duration = const Duration(milliseconds: 300);
|
||||||
|
|
||||||
selectSpace(SpaceModel space) {
|
// selectSpace(SpaceModel space) async {
|
||||||
|
// selectedSpace = space;
|
||||||
|
// emit(SpaceSelected(space));
|
||||||
|
// }
|
||||||
|
|
||||||
|
changeSelectedSpace(SpaceModel space) {
|
||||||
selectedSpace = space;
|
selectedSpace = space;
|
||||||
emit(SpaceSelected(space));
|
emit(SpaceSelected(space));
|
||||||
}
|
}
|
||||||
@ -102,7 +114,11 @@ class HomeCubit extends Cubit<HomeState> {
|
|||||||
emit(GetSpacesLoading());
|
emit(GetSpacesLoading());
|
||||||
try {
|
try {
|
||||||
spaces = await SpacesAPI.getSpaces();
|
spaces = await SpacesAPI.getSpaces();
|
||||||
selectedSpace = spaces!.isNotEmpty ? selectSpace(spaces!.first) : null;
|
selectedSpace = spaces!.isNotEmpty
|
||||||
|
?
|
||||||
|
// selectSpace(spaces!.first)
|
||||||
|
selectedSpace = spaces!.first
|
||||||
|
: null;
|
||||||
emit(GetSpacesLoaded(spaces!));
|
emit(GetSpacesLoaded(spaces!));
|
||||||
} on DioException catch (e) {
|
} on DioException catch (e) {
|
||||||
emit(GetSpacesError(ServerFailure.fromDioError(e).errMessage));
|
emit(GetSpacesError(ServerFailure.fromDioError(e).errMessage));
|
||||||
|
@ -2,7 +2,7 @@ part of 'home_cubit.dart';
|
|||||||
|
|
||||||
abstract class HomeState {}
|
abstract class HomeState {}
|
||||||
|
|
||||||
class SpacesInitial extends HomeState {}
|
class HomeInitial extends HomeState {}
|
||||||
|
|
||||||
class GetSpacesLoading extends HomeState {}
|
class GetSpacesLoading extends HomeState {}
|
||||||
|
|
||||||
|
@ -23,13 +23,13 @@ class AppLayout extends StatelessWidget {
|
|||||||
return MultiBlocProvider(
|
return MultiBlocProvider(
|
||||||
providers: [
|
providers: [
|
||||||
BlocProvider(
|
BlocProvider(
|
||||||
create: (context) => HomeCubit(),
|
create: (context) => HomeCubit.getInstance(),
|
||||||
),
|
),
|
||||||
BlocProvider(
|
BlocProvider(
|
||||||
create: (context) => DevicesCubit(),
|
create: (context) => DevicesCubit(),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
child: BlocListener<HomeCubit, HomeState>(
|
child: BlocConsumer<HomeCubit, HomeState>(
|
||||||
listener: (context, state) {
|
listener: (context, state) {
|
||||||
if (state is GetSpacesError) {
|
if (state is GetSpacesError) {
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
@ -41,42 +41,41 @@ class AppLayout extends StatelessWidget {
|
|||||||
.popUntil((route) => route.settings.name == Routes.authLogin);
|
.popUntil((route) => route.settings.name == Routes.authLogin);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
child: BlocBuilder<HomeCubit, HomeState>(
|
builder: (context, state) {
|
||||||
builder: (context, state) {
|
return AnnotatedRegion(
|
||||||
return AnnotatedRegion(
|
value: SystemUiOverlayStyle(
|
||||||
value: SystemUiOverlayStyle(
|
statusBarColor: ColorsManager.primaryColor.withOpacity(0.5),
|
||||||
statusBarColor: ColorsManager.primaryColor.withOpacity(0.5),
|
statusBarIconBrightness: Brightness.light,
|
||||||
statusBarIconBrightness: Brightness.light,
|
),
|
||||||
|
child: SafeArea(
|
||||||
|
child: BlocBuilder<HomeCubit, HomeState>(
|
||||||
|
builder: (context, state) {
|
||||||
|
return Scaffold(
|
||||||
|
backgroundColor: ColorsManager.backgroundColor,
|
||||||
|
extendBodyBehindAppBar: true,
|
||||||
|
extendBody: true,
|
||||||
|
appBar:
|
||||||
|
state is GetSpacesLoaded ? const DefaultAppBar() : null,
|
||||||
|
body: const AppBody(),
|
||||||
|
bottomNavigationBar: const DefaultNavBar(),
|
||||||
|
// floatingActionButton: FloatingActionButton(
|
||||||
|
// onPressed: () {
|
||||||
|
// Navigator.push(
|
||||||
|
// context,
|
||||||
|
// CustomPageRoute(
|
||||||
|
// builder: (context) =>
|
||||||
|
// const ThreeGangSwitchesView(),
|
||||||
|
// ),
|
||||||
|
// );
|
||||||
|
// },
|
||||||
|
// child: const Icon(Icons.arrow_forward_ios_sharp),
|
||||||
|
// ),
|
||||||
|
);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
child: SafeArea(
|
),
|
||||||
child: BlocBuilder<HomeCubit, HomeState>(
|
);
|
||||||
builder: (context, state) {
|
},
|
||||||
return const Scaffold(
|
|
||||||
backgroundColor: ColorsManager.backgroundColor,
|
|
||||||
extendBodyBehindAppBar: true,
|
|
||||||
extendBody: true,
|
|
||||||
appBar: DefaultAppBar(),
|
|
||||||
body: AppBody(),
|
|
||||||
bottomNavigationBar: DefaultNavBar(),
|
|
||||||
// floatingActionButton: FloatingActionButton(
|
|
||||||
// onPressed: () {
|
|
||||||
// Navigator.push(
|
|
||||||
// context,
|
|
||||||
// CustomPageRoute(
|
|
||||||
// builder: (context) =>
|
|
||||||
// const ThreeGangSwitchesView(),
|
|
||||||
// ),
|
|
||||||
// );
|
|
||||||
// },
|
|
||||||
// child: const Icon(Icons.arrow_forward_ios_sharp),
|
|
||||||
// ),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -9,70 +9,68 @@ import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
|
|||||||
import '../../../../generated/assets.dart';
|
import '../../../../generated/assets.dart';
|
||||||
|
|
||||||
class AppBarHomeDropdown extends StatelessWidget {
|
class AppBarHomeDropdown extends StatelessWidget {
|
||||||
const AppBarHomeDropdown({
|
const AppBarHomeDropdown({super.key});
|
||||||
super.key,
|
|
||||||
});
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return BlocBuilder<HomeCubit, HomeState>(
|
return BlocBuilder<HomeCubit, HomeState>(
|
||||||
builder: (context, state) {
|
builder: (context, state) {
|
||||||
return HomeCubit.selectedSpace == null
|
return Padding(
|
||||||
? const Center(child: BodyMedium(text: 'No Home Selected'))
|
padding: const EdgeInsets.only(left: 10, right: 10),
|
||||||
: Padding(
|
child: DropdownButton(
|
||||||
padding: const EdgeInsets.only(left: 10, right: 10),
|
icon: const Icon(
|
||||||
child: DropdownButton(
|
Icons.expand_more,
|
||||||
icon: const Icon(
|
color: Colors.black,
|
||||||
Icons.expand_more,
|
size: 25,
|
||||||
color: Colors.black,
|
),
|
||||||
size: 25,
|
underline: const SizedBox.shrink(),
|
||||||
),
|
padding: const EdgeInsets.all(0),
|
||||||
underline: const SizedBox.shrink(),
|
borderRadius: BorderRadius.circular(20),
|
||||||
padding: const EdgeInsets.all(0),
|
value: HomeCubit.getInstance().selectedSpace!.id,
|
||||||
borderRadius: BorderRadius.circular(20),
|
items: HomeCubit.getInstance().spaces!.map((space) {
|
||||||
value: HomeCubit.selectedSpace!.id,
|
return DropdownMenuItem(
|
||||||
items: HomeCubit.spaces!.map((space) {
|
value: space.id,
|
||||||
return DropdownMenuItem(
|
child: SizedBox(
|
||||||
value: space.id,
|
width: 100,
|
||||||
child: SizedBox(
|
child: Row(
|
||||||
width: 100,
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
child: Row(
|
mainAxisSize: MainAxisSize.min,
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
children: <Widget>[
|
||||||
mainAxisSize: MainAxisSize.min,
|
SvgPicture.asset(
|
||||||
children: <Widget>[
|
Assets.iconsHome,
|
||||||
SvgPicture.asset(
|
width: 25,
|
||||||
Assets.iconsHome,
|
height: 25,
|
||||||
width: 25,
|
colorFilter: const ColorFilter.mode(
|
||||||
height: 25,
|
ColorsManager.textPrimaryColor,
|
||||||
colorFilter: const ColorFilter.mode(
|
BlendMode.srcIn,
|
||||||
ColorsManager.textPrimaryColor,
|
|
||||||
BlendMode.srcIn,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const SizedBox(width: 5),
|
|
||||||
Expanded(
|
|
||||||
child: BodyMedium(
|
|
||||||
text: space.name ?? "??",
|
|
||||||
style: context.bodyMedium.copyWith(
|
|
||||||
fontSize: 15,
|
|
||||||
color: ColorsManager.textPrimaryColor,
|
|
||||||
overflow: TextOverflow.ellipsis,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
const SizedBox(width: 5),
|
||||||
}).toList(),
|
Expanded(
|
||||||
onChanged: (value) {
|
child: BodyMedium(
|
||||||
if (value != null) {
|
text: space.name ?? "??",
|
||||||
HomeCubit.get(context).selectSpace(HomeCubit.spaces!
|
style: context.bodyMedium.copyWith(
|
||||||
.firstWhere((element) => element.id == value));
|
fontSize: 15,
|
||||||
}
|
color: ColorsManager.textPrimaryColor,
|
||||||
},
|
overflow: TextOverflow.ellipsis,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
}).toList(),
|
||||||
|
onChanged: (value) {
|
||||||
|
if (value != null) {
|
||||||
|
HomeCubit.getInstance().changeSelectedSpace(
|
||||||
|
HomeCubit.getInstance()
|
||||||
|
.spaces!
|
||||||
|
.firstWhere((element) => element.id == value));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -37,9 +37,10 @@ class AppBody extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
builder: (context, state) {
|
builder: (context, state) {
|
||||||
return state is! GetSpacesLoading ||
|
return state is! GetSpacesLoading
|
||||||
state is! GetSpaceRoomsLoading
|
? state is! GetSpaceRoomsLoading
|
||||||
? HomeCubit.get(context).pages[HomeCubit.pageIndex]
|
? HomeCubit.getInstance().pages[HomeCubit.pageIndex]
|
||||||
|
: const Center(child: CircularProgressIndicator())
|
||||||
: const Center(child: CircularProgressIndicator());
|
: const Center(child: CircularProgressIndicator());
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
@ -20,11 +20,9 @@ class DefaultAppBar extends StatelessWidget implements PreferredSizeWidget {
|
|||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
leadingWidth: 150,
|
leadingWidth: 150,
|
||||||
toolbarHeight: Constants.appBarHeight,
|
toolbarHeight: Constants.appBarHeight,
|
||||||
leading: HomeCubit.spaces != null
|
leading: HomeCubit.getInstance().spaces!.isNotEmpty
|
||||||
? HomeCubit.spaces!.isNotEmpty
|
? HomeCubit.appBarLeading[
|
||||||
? HomeCubit.appBarLeading[
|
HomeCubit.bottomNavItems[HomeCubit.pageIndex].label]
|
||||||
HomeCubit.bottomNavItems[HomeCubit.pageIndex].label]
|
|
||||||
: const Center(child: BodySmall(text: 'Create Home'))
|
|
||||||
: null,
|
: null,
|
||||||
actions: HomeCubit.appBarActions[
|
actions: HomeCubit.appBarActions[
|
||||||
HomeCubit.bottomNavItems[HomeCubit.pageIndex].label],
|
HomeCubit.bottomNavItems[HomeCubit.pageIndex].label],
|
||||||
|
@ -15,7 +15,7 @@ class DefaultNavBar extends StatelessWidget {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return BlocBuilder<HomeCubit, HomeState>(
|
return BlocBuilder<HomeCubit, HomeState>(
|
||||||
builder: (context, state) {
|
builder: (context, state) {
|
||||||
var cubit = HomeCubit.get(context);
|
var cubit = HomeCubit.getInstance();
|
||||||
return SizedBox(
|
return SizedBox(
|
||||||
height: Constants.bottomNavBarHeight,
|
height: Constants.bottomNavBarHeight,
|
||||||
child: BottomNavigationBar(
|
child: BottomNavigationBar(
|
||||||
@ -25,8 +25,8 @@ class DefaultNavBar extends StatelessWidget {
|
|||||||
if (DevicesCubit.get(context).chosenCategoryView != null) {
|
if (DevicesCubit.get(context).chosenCategoryView != null) {
|
||||||
DevicesCubit().clearCategoriesSelection(context);
|
DevicesCubit().clearCategoriesSelection(context);
|
||||||
}
|
}
|
||||||
if (HomeCubit.get(context).selectedRoom != null) {
|
if (HomeCubit.getInstance().selectedRoom != null) {
|
||||||
HomeCubit.get(context).unselectRoom();
|
HomeCubit.getInstance().unselectRoom();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
currentIndex: HomeCubit.pageIndex,
|
currentIndex: HomeCubit.pageIndex,
|
||||||
|
@ -22,8 +22,8 @@ part 'devices_state.dart';
|
|||||||
|
|
||||||
class DevicesCubit extends Cubit<DevicesState> {
|
class DevicesCubit extends Cubit<DevicesState> {
|
||||||
DevicesCubit() : super(DevicesInitial()) {
|
DevicesCubit() : super(DevicesInitial()) {
|
||||||
if (HomeCubit.selectedSpace != null) {
|
if (HomeCubit.getInstance().selectedSpace != null) {
|
||||||
fetchGroups(HomeCubit.selectedSpace!.id!);
|
fetchGroups(HomeCubit.getInstance().selectedSpace!.id!);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bool _isClosed = false;
|
bool _isClosed = false;
|
||||||
|
@ -42,15 +42,19 @@ class DevicesViewBody extends StatelessWidget {
|
|||||||
Expanded(
|
Expanded(
|
||||||
child: PageView(
|
child: PageView(
|
||||||
controller:
|
controller:
|
||||||
HomeCubit.get(context).devicesPageController,
|
HomeCubit.getInstance().devicesPageController,
|
||||||
onPageChanged: (index) {
|
onPageChanged: (index) {
|
||||||
HomeCubit.get(context).devicesPageChanged(index);
|
HomeCubit.getInstance().devicesPageChanged(index);
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
const WizardPage(),
|
const WizardPage(),
|
||||||
if (HomeCubit.selectedSpace != null)
|
if (HomeCubit.getInstance().selectedSpace != null)
|
||||||
if (HomeCubit.selectedSpace!.rooms != null)
|
if (HomeCubit.getInstance().selectedSpace!.rooms !=
|
||||||
...HomeCubit.selectedSpace!.rooms!.map(
|
null)
|
||||||
|
...HomeCubit.getInstance()
|
||||||
|
.selectedSpace!
|
||||||
|
.rooms!
|
||||||
|
.map(
|
||||||
(room) {
|
(room) {
|
||||||
return RoomPage(
|
return RoomPage(
|
||||||
room: room,
|
room: room,
|
||||||
@ -60,15 +64,19 @@ class DevicesViewBody extends StatelessWidget {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
HomeCubit.selectedSpace != null
|
HomeCubit.getInstance().selectedSpace != null
|
||||||
? Padding(
|
? Padding(
|
||||||
padding: const EdgeInsets.symmetric(
|
padding: const EdgeInsets.symmetric(
|
||||||
vertical: 7,
|
vertical: 7,
|
||||||
),
|
),
|
||||||
child: SmoothPageIndicator(
|
child: SmoothPageIndicator(
|
||||||
controller:
|
controller:
|
||||||
HomeCubit.get(context).devicesPageController,
|
HomeCubit.getInstance().devicesPageController,
|
||||||
count: HomeCubit.selectedSpace!.rooms!.length + 1,
|
count: HomeCubit.getInstance()
|
||||||
|
.selectedSpace!
|
||||||
|
.rooms!
|
||||||
|
.length +
|
||||||
|
1,
|
||||||
effect: const WormEffect(
|
effect: const WormEffect(
|
||||||
paintStyle: PaintingStyle.stroke,
|
paintStyle: PaintingStyle.stroke,
|
||||||
dotHeight: 8,
|
dotHeight: 8,
|
||||||
|
@ -18,51 +18,55 @@ class RoomsSlider extends StatelessWidget {
|
|||||||
return SizedBox(
|
return SizedBox(
|
||||||
height: 40,
|
height: 40,
|
||||||
child: PageView(
|
child: PageView(
|
||||||
controller: HomeCubit.get(context).roomsPageController,
|
controller: HomeCubit.getInstance().roomsPageController,
|
||||||
onPageChanged: (index) {
|
onPageChanged: (index) {
|
||||||
HomeCubit.get(context).roomSliderPageChanged(index);
|
HomeCubit.getInstance().roomSliderPageChanged(index);
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 15),
|
padding: const EdgeInsets.symmetric(horizontal: 15),
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
HomeCubit.get(context).unselectRoom();
|
HomeCubit.getInstance().unselectRoom();
|
||||||
},
|
},
|
||||||
child: TitleMedium(
|
child: TitleMedium(
|
||||||
text: StringsManager.wizard,
|
text: StringsManager.wizard,
|
||||||
style: context.titleMedium.copyWith(
|
style: context.titleMedium.copyWith(
|
||||||
fontSize: 25,
|
fontSize: 25,
|
||||||
color: HomeCubit.get(context).selectedRoom == null
|
color: HomeCubit.getInstance().selectedRoom == null
|
||||||
? ColorsManager.textPrimaryColor
|
? ColorsManager.textPrimaryColor
|
||||||
: ColorsManager.textPrimaryColor.withOpacity(.2),
|
: ColorsManager.textPrimaryColor.withOpacity(.2),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (HomeCubit.selectedSpace != null)
|
if (HomeCubit.getInstance().selectedSpace != null)
|
||||||
if (HomeCubit.selectedSpace!.rooms != null)
|
if (HomeCubit.getInstance().selectedSpace!.rooms != null)
|
||||||
...HomeCubit.selectedSpace!.rooms!.map(
|
...HomeCubit.getInstance().selectedSpace!.rooms!.map(
|
||||||
(room) => Padding(
|
(room) => Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 15),
|
padding: const EdgeInsets.symmetric(horizontal: 15),
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
HomeCubit.get(context).roomSliderPageChanged(
|
HomeCubit.getInstance().roomSliderPageChanged(
|
||||||
HomeCubit.selectedSpace!.rooms!.indexOf(room));
|
HomeCubit.getInstance()
|
||||||
},
|
.selectedSpace!
|
||||||
child: TitleMedium(
|
.rooms!
|
||||||
text: room.name!,
|
.indexOf(room));
|
||||||
style: context.titleMedium.copyWith(
|
},
|
||||||
fontSize: 25,
|
child: TitleMedium(
|
||||||
color: HomeCubit.get(context).selectedRoom == room
|
text: room.name!,
|
||||||
? ColorsManager.textPrimaryColor
|
style: context.titleMedium.copyWith(
|
||||||
: ColorsManager.textPrimaryColor
|
fontSize: 25,
|
||||||
.withOpacity(.2),
|
color:
|
||||||
|
HomeCubit.getInstance().selectedRoom == room
|
||||||
|
? ColorsManager.textPrimaryColor
|
||||||
|
: ColorsManager.textPrimaryColor
|
||||||
|
.withOpacity(.2),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
)
|
||||||
),
|
|
||||||
)
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
Reference in New Issue
Block a user