Bug fixes 3

This commit is contained in:
mohammad
2024-09-23 16:33:02 +03:00
parent 429009aefa
commit dfae04076f
14 changed files with 593 additions and 307 deletions
@@ -22,8 +22,9 @@ class OneGangScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => OneGangBloc(switchCode: 'switch_1', oneGangId: device?.uuid ?? '')
..add(const InitialEvent(groupScreen: false)),
create: (context) =>
OneGangBloc(switchCode: 'switch_1', oneGangId: device?.uuid ?? '')
..add(const InitialEvent(groupScreen: false)),
child: BlocBuilder<OneGangBloc, OneGangState>(
builder: (context, state) {
OneGangModel oneGangModel = OneGangModel(
@@ -44,15 +45,19 @@ class OneGangScreen extends StatelessWidget {
}
return state is LoadingInitialState
? const Center(
child:
DefaultContainer(width: 50, height: 50, child: CircularProgressIndicator()),
child: DefaultContainer(
width: 50,
height: 50,
child: CircularProgressIndicator()),
)
: device == null
? OneGangList(oneGangList: groupOneGangModel, allSwitches: allSwitchesOn)
? OneGangList(
oneGangList: groupOneGangModel,
allSwitches: allSwitchesOn)
: RefreshIndicator(
onRefresh: () async {
BlocProvider.of<OneGangBloc>(context)
.add(InitialEvent(groupScreen: device != null ? false : true));
BlocProvider.of<OneGangBloc>(context).add(InitialEvent(
groupScreen: device != null ? false : true));
},
child: ListView(
children: [
@@ -65,8 +70,10 @@ class OneGangScreen extends StatelessWidget {
const Expanded(child: SizedBox.shrink()),
Expanded(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment:
MainAxisAlignment.spaceAround,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Column(
children: [
@@ -74,9 +81,12 @@ class OneGangScreen extends StatelessWidget {
threeGangSwitch: device!,
value: oneGangModel.firstSwitch,
action: () {
BlocProvider.of<OneGangBloc>(context).add(
ChangeFirstSwitchStatusEvent(
value: oneGangModel.firstSwitch));
BlocProvider.of<OneGangBloc>(
context)
.add(
ChangeFirstSwitchStatusEvent(
value: oneGangModel
.firstSwitch));
},
),
const SizedBox(height: 20),
@@ -84,7 +94,8 @@ class OneGangScreen extends StatelessWidget {
width: 70,
child: BodySmall(
text: " Entrance Light",
fontColor: ColorsManager.textPrimaryColor,
fontColor: ColorsManager
.textPrimaryColor,
textAlign: TextAlign.center,
),
),
@@ -96,31 +107,33 @@ class OneGangScreen extends StatelessWidget {
Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
const SizedBox(
width: 20,
),
Column(
mainAxisSize: MainAxisSize.min,
children: [
Card(
elevation: 3,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(100),
borderRadius:
BorderRadius.circular(100),
),
child: GestureDetector(
onTap: () {
Navigator.push(
context,
PageRouteBuilder(
pageBuilder:
(context, animation1, animation2) =>
TimerScheduleScreen(
switchCode: 'switch_1',
device: device!,
deviceCode: 'countdown_1',
)));
pageBuilder: (context,
animation1,
animation2) =>
TimerScheduleScreen(
switchCode:
'switch_1',
device: device!,
deviceCode:
'countdown_1',
)));
},
child: Stack(
alignment: Alignment.center,
@@ -130,7 +143,9 @@ class OneGangScreen extends StatelessWidget {
height: 60,
decoration: BoxDecoration(
color: Colors.grey[300],
borderRadius: BorderRadius.circular(100),
borderRadius:
BorderRadius.circular(
100),
),
),
Container(
@@ -138,13 +153,15 @@ class OneGangScreen extends StatelessWidget {
height: 40,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(100),
borderRadius:
BorderRadius.circular(
100),
),
child: Center(
child: Icon(
Icons.access_time,
color:
ColorsManager.primaryColorWithOpacity,
color: ColorsManager
.primaryColorWithOpacity,
size: 25,
),
),
@@ -157,7 +174,8 @@ class OneGangScreen extends StatelessWidget {
BodySmall(
text: "Timer",
style: context.bodyMedium.copyWith(
color: ColorsManager.textPrimaryColor,
color: ColorsManager
.textPrimaryColor,
),
),
],
@@ -17,16 +17,15 @@ import 'package:syncrow_app/utils/context_extension.dart';
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
import 'package:syncrow_app/utils/resource_manager/font_manager.dart';
class TimerScheduleScreen extends StatelessWidget {
final DeviceModel device;
final String deviceCode;
final String switchCode;
const TimerScheduleScreen(
{required this.device,
required this.deviceCode,
required this.switchCode,
super.key});
required this.deviceCode,
required this.switchCode,
super.key});
@override
Widget build(BuildContext context) {
@@ -37,9 +36,9 @@ class TimerScheduleScreen extends StatelessWidget {
),
child: BlocProvider(
create: (context) =>
OneGangBloc(switchCode: switchCode, oneGangId: device.uuid ?? '')
..add(GetCounterEvent(deviceCode: deviceCode))
..add(GetScheduleEvent()),
OneGangBloc(switchCode: switchCode, oneGangId: device.uuid ?? '')
..add(GetCounterEvent(deviceCode: deviceCode))
..add(GetScheduleEvent()),
child: BlocBuilder<OneGangBloc, OneGangState>(
builder: (context, state) {
final oneGangBloc = BlocProvider.of<OneGangBloc>(context);
@@ -64,7 +63,7 @@ class TimerScheduleScreen extends StatelessWidget {
},
child: DefaultTabController(
length: 2,
child: DefaultScaffold(
child: DefaultScaffold(
appBar: AppBar(
backgroundColor: Colors.transparent,
centerTitle: true,
@@ -74,175 +73,211 @@ class TimerScheduleScreen extends StatelessWidget {
fontWeight: FontsManager.bold,
),
actions: [
oneGangBloc.createSchedule == true ?
TextButton(
onPressed: () {
oneGangBloc.add(ThreeGangSave());
},
child: const Text('Save')
) :
oneGangBloc.selectedTabIndex==1? IconButton(
onPressed: () {
oneGangBloc.toggleCreateSchedule();
},
icon: const Icon(Icons.add),
):SizedBox(),
oneGangBloc.createSchedule == true
? TextButton(
onPressed: () {
oneGangBloc.add(ScheduleSave());
},
child: const Text('Save'))
: oneGangBloc.selectedTabIndex == 1
? IconButton(
onPressed: () {
// oneGangBloc.toggleCreateSchedule();
oneGangBloc.add(
const ToggleCreateScheduleEvent(
index: 1));
},
icon: const Icon(Icons.add),
)
: const SizedBox(),
],
),
child:
state is LoadingInitialState?
const Center(child: CircularProgressIndicator()):
Column(
children: [
Container(
width: MediaQuery.of(context).size.width,
decoration: const ShapeDecoration(
color: ColorsManager.onPrimaryColor,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(30)),
),
),
child: TabBar(
onTap: (value) {
if(value==0){
if(oneGangBloc.createSchedule == true){
oneGangBloc.toggleCreateSchedule();
}
oneGangBloc.toggleSelectedIndex(0);
}else{
oneGangBloc.toggleSelectedIndex(1);
}
},
indicatorColor: Colors.white, // Customize the indicator
dividerHeight: 0,
indicatorSize: TabBarIndicatorSize.tab,
indicator: const ShapeDecoration(
color: ColorsManager.slidingBlueColor,
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.all(Radius.circular(20)),
),
),
tabs: [
Tab(
child: Container(
padding: const EdgeInsets.symmetric(
vertical: 10),
child: BodySmall(
text: 'Countdown',
style: context.bodySmall.copyWith(
color: ColorsManager.blackColor,
fontSize: 12,
fontWeight: FontWeight.w400,
),
),
),
),
Tab(
child: Container(
padding: const EdgeInsets.symmetric(vertical: 10),
child: Text(
'Schedule',
style: context.bodySmall.copyWith(
color: ColorsManager.blackColor,
fontSize: 12,
fontWeight: FontWeight.w400,
),
),
),
),
],
),
),
Expanded(
child: TabBarView(
child: state is LoadingInitialState
? const Center(child: CircularProgressIndicator())
: Column(
children: [
Center(
child: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
countNum > 0
? BodyLarge(
text: _formatDuration(countNum),
fontColor:
ColorsManager.slidingBlueColor,
fontSize: 40,
)
: CupertinoTimerPicker(
mode: CupertinoTimerPickerMode.hm,
onTimerDurationChanged:
(Duration newDuration) {
duration = newDuration;
},
),
GestureDetector(
onTap: () {
if (state is LoadingNewSate) {
return;
}
if (countNum > 0) {
oneGangBloc.add(SetCounterValue(
deviceCode: deviceCode,
duration: Duration.zero));
} else if (duration != Duration.zero) {
oneGangBloc.add(SetCounterValue(
deviceCode: deviceCode,
duration: duration));
}
},
child: SvgPicture.asset(countNum > 0
? Assets.pauseIcon
: Assets.playIcon)),
],
Container(
width: MediaQuery.of(context).size.width,
decoration: const ShapeDecoration(
color: ColorsManager.onPrimaryColor,
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.all(Radius.circular(30)),
),
),
),
Column(
mainAxisAlignment:oneGangBloc.listSchedule.isNotEmpty?
MainAxisAlignment.start:MainAxisAlignment.center,
children: [
SizedBox(
child: oneGangBloc.createSchedule == true ?
CreateSchedule(
onToggleChanged: (bool isOn) {
oneGangBloc.toggleSchedule = isOn;
},
onDateTimeChanged: (DateTime dateTime) {
oneGangBloc.selectedTime=dateTime;
},
days: oneGangBloc.days,
selectDays: (List<String> selectedDays) {
oneGangBloc.selectedDays = selectedDays;
},
)
:
Padding(
padding: const EdgeInsets.only(top: 10),
child: ScheduleListView(
listSchedule: oneGangBloc.listSchedule, // Pass the schedule list here
onDismissed: (scheduleId) {
oneGangBloc.listSchedule.removeWhere((schedule) => schedule.scheduleId == scheduleId);
oneGangBloc.add(DeleteScheduleEvent(id: scheduleId));
},
onToggleSchedule: (scheduleId, isEnabled) {
oneGangBloc.add(ToggleScheduleEvent(
id: scheduleId,
toggle: isEnabled,
));
},
),
child: TabBar(
onTap: (value) {
if (value == 0) {
if (oneGangBloc.createSchedule ==
true) {
// oneGangBloc.toggleCreateSchedule();
oneGangBloc.add(
const ToggleCreateScheduleEvent(
index: 0));
}
oneGangBloc.add(
const ToggleSelectedEvent(
index: 0));
} else {
oneGangBloc.add(
const ToggleSelectedEvent(
index: 1));
}
},
indicatorColor:
Colors.white, // Customize the indicator
dividerHeight: 0,
indicatorSize: TabBarIndicatorSize.tab,
indicator: const ShapeDecoration(
color: ColorsManager.slidingBlueColor,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(
Radius.circular(20)),
),
),
],
tabs: [
Tab(
child: Container(
padding: const EdgeInsets.symmetric(
vertical: 10),
child: BodySmall(
text: 'Countdown',
style: context.bodySmall.copyWith(
color: ColorsManager.blackColor,
fontSize: 12,
fontWeight: FontWeight.w400,
),
),
),
),
Tab(
child: Container(
padding: const EdgeInsets.symmetric(
vertical: 10),
child: Text(
'Schedule',
style: context.bodySmall.copyWith(
color: ColorsManager.blackColor,
fontSize: 12,
fontWeight: FontWeight.w400,
),
),
),
),
],
),
),
Expanded(
child: TabBarView(
children: [
Center(
child: Container(
child: Column(
mainAxisAlignment:
MainAxisAlignment.center,
children: [
countNum > 0
? BodyLarge(
text: _formatDuration(
countNum),
fontColor: ColorsManager
.slidingBlueColor,
fontSize: 40,
)
: CupertinoTimerPicker(
mode:
CupertinoTimerPickerMode
.hm,
onTimerDurationChanged:
(Duration
newDuration) {
duration = newDuration;
},
),
GestureDetector(
onTap: () {
if (state
is LoadingNewSate) {
return;
}
if (countNum > 0) {
oneGangBloc.add(
SetCounterValue(
deviceCode:
deviceCode,
duration: Duration
.zero));
} else if (duration !=
Duration.zero) {
oneGangBloc.add(
SetCounterValue(
deviceCode:
deviceCode,
duration:
duration));
}
},
child: SvgPicture.asset(
countNum > 0
? Assets.pauseIcon
: Assets.playIcon)),
],
),
),
),
SizedBox(
child: oneGangBloc.createSchedule ==
true
? CreateSchedule(
onToggleChanged: (bool isOn) {
oneGangBloc.toggleSchedule =
isOn;
},
onDateTimeChanged:
(DateTime dateTime) {
oneGangBloc.selectedTime =
dateTime;
},
days: oneGangBloc.days,
selectDays: (List<String>
selectedDays) {
oneGangBloc.selectedDays =
selectedDays;
},
)
: Padding(
padding: const EdgeInsets.only(
top: 10),
child: ScheduleListView(
listSchedule: oneGangBloc
.listSchedule, // Pass the schedule list here
onDismissed: (scheduleId) {
oneGangBloc.listSchedule
.removeWhere((schedule) =>
schedule
.scheduleId ==
scheduleId);
oneGangBloc.add(
DeleteScheduleEvent(
id: scheduleId));
},
onToggleSchedule:
(scheduleId, isEnabled) {
oneGangBloc.add(
ToggleScheduleEvent(
id: scheduleId,
toggle: isEnabled,
));
},
),
),
),
],
),
),
],
),
),
],
),
))
);
)));
},
),
),
@@ -82,11 +82,14 @@ class TimerScheduleScreen extends StatelessWidget {
: threeGangBloc.selectedTabIndex == 1
? IconButton(
onPressed: () {
threeGangBloc.toggleCreateSchedule();
// oneGangBloc.toggleCreateSchedule();
threeGangBloc.add(
const ToggleCreateScheduleEvent(
index: 1));
},
icon: const Icon(Icons.add),
)
: SizedBox(),
: const SizedBox(),
],
),
child: state is LoadingInitialState
@@ -103,15 +106,34 @@ class TimerScheduleScreen extends StatelessWidget {
),
),
child: TabBar(
// onTap: (value) {
// if (value == 0) {
// if (threeGangBloc.createSchedule ==
// true) {
// threeGangBloc.toggleCreateSchedule();
// }
// threeGangBloc.toggleSelectedIndex(0);
// } else {
// threeGangBloc.toggleSelectedIndex(1);
// }
// },
onTap: (value) {
if (value == 0) {
if (threeGangBloc.createSchedule ==
true) {
threeGangBloc.toggleCreateSchedule();
// oneGangBloc.toggleCreateSchedule();
threeGangBloc.add(
const ToggleCreateScheduleEvent(
index: 0));
}
threeGangBloc.toggleSelectedIndex(0);
threeGangBloc.add(
const ToggleSelectedEvent(
index: 0));
} else {
threeGangBloc.toggleSelectedIndex(1);
threeGangBloc.add(
const ToggleSelectedEvent(
index: 1));
}
},
indicatorColor: Colors.white,
@@ -82,11 +82,14 @@ class TimerScheduleScreen extends StatelessWidget {
: twoGangBloc.selectedTabIndex == 1
? IconButton(
onPressed: () {
twoGangBloc.toggleCreateSchedule();
// oneGangBloc.toggleCreateSchedule();
twoGangBloc.add(
const ToggleCreateScheduleEvent(
index: 1));
},
icon: const Icon(Icons.add),
)
: SizedBox(),
: const SizedBox(),
],
),
child: state is LoadingInitialState
@@ -104,15 +107,21 @@ class TimerScheduleScreen extends StatelessWidget {
),
child: TabBar(
onTap: (value) {
print(value);
if (value == 0) {
if (twoGangBloc.createSchedule ==
true) {
twoGangBloc.toggleCreateSchedule();
// oneGangBloc.toggleCreateSchedule();
twoGangBloc.add(
const ToggleCreateScheduleEvent(
index: 0));
}
twoGangBloc.toggleSelectedIndex(0);
twoGangBloc.add(
const ToggleSelectedEvent(
index: 0));
} else {
twoGangBloc.toggleSelectedIndex(1);
twoGangBloc.add(
const ToggleSelectedEvent(
index: 1));
}
},
indicatorColor:
@@ -243,12 +252,20 @@ class TimerScheduleScreen extends StatelessWidget {
children: [
Expanded(
child: ScheduleListView(
listSchedule: twoGangBloc.listSchedule, // Pass the schedule list here
onDismissed:(scheduleId) {
twoGangBloc .listSchedule
.removeWhere( (schedule) => schedule .scheduleId == scheduleId);
listSchedule: twoGangBloc
.listSchedule, // Pass the schedule list here
onDismissed:
(scheduleId) {
twoGangBloc
.listSchedule
.removeWhere(
(schedule) =>
schedule
.scheduleId ==
scheduleId);
twoGangBloc.add(
DeleteScheduleEvent( id: scheduleId));
DeleteScheduleEvent(
id: scheduleId));
},
onToggleSchedule:
(scheduleId,
@@ -86,7 +86,10 @@ class WHTimerScheduleScreen extends StatelessWidget {
: waterHeaterBloc.selectedTabIndex == 1
? IconButton(
onPressed: () {
waterHeaterBloc.toggleCreateSchedule();
// waterHeaterBloc.toggleCreateSchedule();
waterHeaterBloc.add(
const ToggleCreateScheduleEvent(
index: 1));
},
icon: const Icon(Icons.add),
)
@@ -129,27 +132,45 @@ class WHTimerScheduleScreen extends StatelessWidget {
if (value == 0) {
if (waterHeaterBloc.createSchedule ==
true) {
waterHeaterBloc
.toggleCreateSchedule();
// waterHeaterBloc
// .toggleCreateSchedule();
waterHeaterBloc.add(
const ToggleCreateScheduleEvent(
index: 1));
}
waterHeaterBloc
.toggleSelectedIndex(value);
waterHeaterBloc.add(
ToggleSelectedEvent(
index: value));
// waterHeaterBloc
// .toggleSelectedIndex(value);
} else if (value == 2) {
if (waterHeaterBloc.createCirculate ==
true) {
waterHeaterBloc
.toggleCreateCirculate();
waterHeaterBloc.add(
ToggleCreateCirculateEvent(
index: value));
// waterHeaterBloc
// .toggleCreateCirculate();
}
waterHeaterBloc
.toggleSelectedIndex(value);
waterHeaterBloc.add(
ToggleSelectedEvent(
index: value));
// waterHeaterBloc
// .toggleSelectedIndex(value);
} else {
if (waterHeaterBloc.createSchedule ==
true) {
waterHeaterBloc
.toggleCreateSchedule();
waterHeaterBloc.add(
ToggleSelectedEvent(
index: value));
// waterHeaterBloc
// .toggleCreateSchedule();
}
waterHeaterBloc
.toggleSelectedIndex(value);
waterHeaterBloc.add(
ToggleSelectedEvent(
index: value));
// waterHeaterBloc
// .toggleSelectedIndex(value);
}
},
indicatorColor: Colors.white,