six scene

This commit is contained in:
mohammad
2024-11-21 16:25:54 +03:00
parent 6c2c866969
commit 60dfb1607a
14 changed files with 699 additions and 565 deletions

View File

@ -1,5 +1,4 @@
import 'dart:async'; import 'dart:async';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_event.dart'; import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_event.dart';
@ -12,9 +11,11 @@ import 'package:syncrow_app/features/devices/model/scene_switch_model.dart';
import 'package:syncrow_app/features/devices/model/sex_scene_question_model.dart'; import 'package:syncrow_app/features/devices/model/sex_scene_question_model.dart';
import 'package:syncrow_app/features/devices/model/six_scene_model.dart'; import 'package:syncrow_app/features/devices/model/six_scene_model.dart';
import 'package:syncrow_app/features/devices/model/status_model.dart'; import 'package:syncrow_app/features/devices/model/status_model.dart';
import 'package:syncrow_app/features/devices/model/subspace_model.dart';
import 'package:syncrow_app/features/scene/model/scenes_model.dart'; import 'package:syncrow_app/features/scene/model/scenes_model.dart';
import 'package:syncrow_app/generated/assets.dart'; import 'package:syncrow_app/generated/assets.dart';
import 'package:syncrow_app/services/api/devices_api.dart'; import 'package:syncrow_app/services/api/devices_api.dart';
import 'package:syncrow_app/services/api/home_management_api.dart';
import 'package:syncrow_app/services/api/scene_api.dart'; import 'package:syncrow_app/services/api/scene_api.dart';
import 'package:syncrow_app/services/api/spaces_api.dart'; import 'package:syncrow_app/services/api/spaces_api.dart';
import 'package:syncrow_app/utils/helpers/snack_bar.dart'; import 'package:syncrow_app/utils/helpers/snack_bar.dart';
@ -28,7 +29,6 @@ class SixSceneBloc extends Bloc<SixSceneEvent, SixSceneState> {
on<ToggleNotificationEvent>(_toggleNotification); on<ToggleNotificationEvent>(_toggleNotification);
on<ChangeNameEvent>(_changeName); on<ChangeNameEvent>(_changeName);
on<SearchFaqEvent>(_onSearchFaq); on<SearchFaqEvent>(_onSearchFaq);
on<FetchRoomsEvent>(_fetchRoomsAndDevices);
on<ChangeSwitchStatusEvent>(changeSwitchStatus); on<ChangeSwitchStatusEvent>(changeSwitchStatus);
on<LoadScenes>(_onLoadScenes); on<LoadScenes>(_onLoadScenes);
on<SearchScenesEvent>(searchScene); on<SearchScenesEvent>(searchScene);
@ -42,6 +42,9 @@ class SixSceneBloc extends Bloc<SixSceneEvent, SixSceneState> {
on<SelectSceneEvent>(_selectScene); on<SelectSceneEvent>(_selectScene);
on<SixSceneInitialInfo>(fetchDeviceInfo); on<SixSceneInitialInfo>(fetchDeviceInfo);
on<ControlDeviceScene>(_controlDevice); on<ControlDeviceScene>(_controlDevice);
on<SaveNameEvent>(saveName);
on<AssignRoomEvent>(_assignDevice);
on<FetchRoomsEvent>(_fetchRoomsAndDevices);
} }
final TextEditingController nameController = final TextEditingController nameController =
@ -96,6 +99,64 @@ class SixSceneBloc extends Bloc<SixSceneEvent, SixSceneState> {
), ),
); );
List<SubSpaceModel> roomsList = [];
void _fetchRoomsAndDevices(
FetchRoomsEvent event, Emitter<SixSceneState> emit) async {
try {
emit(SixSceneLoadingState());
roomsList = await SpacesAPI.getSubSpaceBySpaceId(
event.unit.community.uuid, event.unit.id);
emit(FetchRoomsState(devicesList: allDevices, roomsList: roomsList));
} catch (e) {
emit(SixSceneFailedState(errorMessage: e.toString()));
return;
}
}
void _assignDevice(AssignRoomEvent event, Emitter<SixSceneState> emit) async {
try {
emit(SixSceneLoadingState());
if (_hasSelectionChanged) {
await HomeManagementAPI.assignDeviceToRoom(
event.unit.community.uuid, event.unit.id, event.roomId, sixSceneId);
final devicesList = await DevicesAPI.getDevicesByRoomId(
communityUuid: event.unit.community.uuid,
spaceUuid: event.unit.id,
roomId: event.roomId);
List<String> allDevicesIds = [];
allDevices.forEach((element) {
allDevicesIds.add(element.uuid!);
});
CustomSnackBar.displaySnackBar('Save Successfully');
emit(SaveSelectionSuccessState());
}
} catch (e) {
emit(SixSceneFailedState(errorMessage: e.toString()));
return;
}
}
Future<void> saveName(
SaveNameEvent event, Emitter<SixSceneState> emit) async {
if (_validateInputs()) return;
try {
add(const ChangeNameEvent(value: false));
isSaving = true;
emit(SixSceneLoadingState());
var response = await DevicesAPI.putDeviceName(
deviceId: sixSceneId, deviceName: nameController.text);
add(const SixSceneInitialInfo());
CustomSnackBar.displaySnackBar('Save Successfully');
emit(SaveState());
} catch (e) {
emit(SixSceneFailedState(errorMessage: e.toString()));
} finally {
isSaving = false;
}
}
Future fetchDeviceInfo( Future fetchDeviceInfo(
SixSceneInitialInfo event, Emitter<SixSceneState> emit) async { SixSceneInitialInfo event, Emitter<SixSceneState> emit) async {
try { try {
@ -122,7 +183,7 @@ class SixSceneBloc extends Bloc<SixSceneEvent, SixSceneState> {
statusModelList, statusModelList,
); );
add(const SexSceneSwitchInitial()); add(const SexSceneSwitchInitial());
emit(UpdateState(sensor: deviceStatus)); emit(UpdateState(device: deviceStatus));
} catch (e) { } catch (e) {
emit(SixSceneFailedState(errorMessage: e.toString())); emit(SixSceneFailedState(errorMessage: e.toString()));
return; return;
@ -138,7 +199,7 @@ class SixSceneBloc extends Bloc<SixSceneEvent, SixSceneState> {
final response = await DevicesAPI.getSceneBySwitchName( final response = await DevicesAPI.getSceneBySwitchName(
deviceId: sixSceneId, switchName: event.switchName); deviceId: sixSceneId, switchName: event.switchName);
selectedFormApiSceneId = response['scene']['uuid']; selectedFormApiSceneId = response['scene']['uuid'];
emit(UpdateState(sensor: deviceStatus)); emit(UpdateState(device: deviceStatus));
} catch (e) { } catch (e) {
emit(SixSceneFailedState(errorMessage: e.toString())); emit(SixSceneFailedState(errorMessage: e.toString()));
} }
@ -182,7 +243,7 @@ class SixSceneBloc extends Bloc<SixSceneEvent, SixSceneState> {
scene_id_group_id: '', scene_id_group_id: '',
switch_backlight: '', switch_backlight: '',
); );
emit(UpdateState(sensor: deviceStatus)); emit(UpdateState(device: deviceStatus));
} catch (e) { } catch (e) {
emit(SixSceneFailedState(errorMessage: e.toString())); emit(SixSceneFailedState(errorMessage: e.toString()));
return; return;
@ -231,10 +292,10 @@ class SixSceneBloc extends Bloc<SixSceneEvent, SixSceneState> {
void _toggleNotification( void _toggleNotification(
ToggleNotificationEvent event, Emitter<SixSceneState> emit) async { ToggleNotificationEvent event, Emitter<SixSceneState> emit) async {
emit(LoadingNewSate(sosSensor: deviceStatus)); emit(LoadingNewSate(device: deviceStatus));
try { try {
closingReminder = event.isClosingEnabled; closingReminder = event.isClosingEnabled;
emit(UpdateState(sensor: deviceStatus)); emit(UpdateState(device: deviceStatus));
} catch (e) { } catch (e) {
emit(SixSceneFailedState(errorMessage: e.toString())); emit(SixSceneFailedState(errorMessage: e.toString()));
} }
@ -283,19 +344,6 @@ class SixSceneBloc extends Bloc<SixSceneEvent, SixSceneState> {
List<DeviceModel> allDevices = []; List<DeviceModel> allDevices = [];
void _fetchRoomsAndDevices(
FetchRoomsEvent event, Emitter<SixSceneState> emit) async {
try {
emit(SixSceneLoadingState());
final roomsList = await SpacesAPI.getSubSpaceBySpaceId(
event.unit.community.uuid, event.unit.id);
emit(FetchRoomsState(devicesList: allDevices, roomsList: roomsList));
} catch (e) {
emit(const SixSceneFailedState(errorMessage: 'Something went wrong'));
return;
}
}
bool switchStatus = true; bool switchStatus = true;
Future<void> changeSwitchStatus( Future<void> changeSwitchStatus(
ChangeSwitchStatusEvent event, Emitter<SixSceneState> emit) async { ChangeSwitchStatusEvent event, Emitter<SixSceneState> emit) async {
@ -412,7 +460,7 @@ class SixSceneBloc extends Bloc<SixSceneEvent, SixSceneState> {
emit(SixSceneLoadingState()); emit(SixSceneLoadingState());
try { try {
deviceStatus.switch_backlight = !event.backLight!; deviceStatus.switch_backlight = !event.backLight!;
emit(UpdateState(sensor: deviceStatus)); emit(UpdateState(device: deviceStatus));
final response = await DevicesAPI.controlDevice( final response = await DevicesAPI.controlDevice(
DeviceControlModel( DeviceControlModel(
deviceId: sixSceneId, deviceId: sixSceneId,
@ -427,4 +475,25 @@ class SixSceneBloc extends Bloc<SixSceneEvent, SixSceneState> {
// add(InitialEvent(groupScreen: oneTouchGroup)); // add(InitialEvent(groupScreen: oneTouchGroup));
} }
} }
bool _validateInputs() {
final nameError = fullNameValidator(nameController.text);
if (nameError != null) {
CustomSnackBar.displaySnackBar(nameError);
return true;
}
return false;
}
String? fullNameValidator(String? value) {
if (value == null) return 'name is required';
final withoutExtraSpaces = value.replaceAll(RegExp(r"\s+"), ' ').trim();
if (withoutExtraSpaces.length < 2 || withoutExtraSpaces.length > 30) {
return 'name must be between 2 and 30 characters long';
}
if (RegExp(r"/[^ a-zA-Z0-9-\']/").hasMatch(withoutExtraSpaces)) {
return 'Only alphanumeric characters, space, dash and single quote are allowed';
}
return null;
}
} }

View File

@ -1,4 +1,5 @@
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:syncrow_app/features/app_layout/model/space_model.dart'; import 'package:syncrow_app/features/app_layout/model/space_model.dart';
import 'package:syncrow_app/features/devices/model/group_devices_model.dart'; import 'package:syncrow_app/features/devices/model/group_devices_model.dart';
@ -34,6 +35,10 @@ class SixSceneInitial extends SixSceneEvent {
const SixSceneInitial(); const SixSceneInitial();
} }
class SaveNameEvent extends SixSceneEvent {
const SaveNameEvent();
}
class SixSceneInitialInfo extends SixSceneEvent { class SixSceneInitialInfo extends SixSceneEvent {
const SixSceneInitialInfo(); const SixSceneInitialInfo();
} }
@ -201,3 +206,22 @@ class ControlDeviceScene extends SixSceneEvent {
final bool? backLight; final bool? backLight;
const ControlDeviceScene({this.backLight}); const ControlDeviceScene({this.backLight});
} }
class AssignRoomEvent extends SixSceneEvent {
final String roomId;
final SpaceModel unit;
final BuildContext context;
const AssignRoomEvent({
required this.roomId,
required this.unit,
required this.context,
});
@override
List<Object> get props => [
roomId,
unit,
context,
];
}

View File

@ -17,6 +17,7 @@ class SixSceneState extends Equatable {
class SixSceneInitialState extends SixSceneState {} class SixSceneInitialState extends SixSceneState {}
class SixSceneLoadingState extends SixSceneState {} class SixSceneLoadingState extends SixSceneState {}
class SaveState extends SixSceneState {}
class SixSceState extends SixSceneState {} class SixSceState extends SixSceneState {}
@ -36,19 +37,19 @@ class SixSceneFailedState extends SixSceneState {
} }
class UpdateState extends SixSceneState { class UpdateState extends SixSceneState {
final SixSceneModel sensor; final SixSceneModel device;
const UpdateState({required this.sensor}); const UpdateState({required this.device});
@override @override
List<Object> get props => [sensor]; List<Object> get props => [device];
} }
class LoadingNewSate extends SixSceneState { class LoadingNewSate extends SixSceneState {
final SixSceneModel sosSensor; final SixSceneModel device;
const LoadingNewSate({required this.sosSensor}); const LoadingNewSate({required this.device});
@override @override
List<Object> get props => [sosSensor]; List<Object> get props => [device];
} }
class NameEditingState extends SixSceneState { class NameEditingState extends SixSceneState {

View File

@ -5,68 +5,47 @@ import 'package:syncrow_app/features/app_layout/model/space_model.dart';
import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_bloc.dart'; import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_bloc.dart';
import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_event.dart'; import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_event.dart';
import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_state.dart'; import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_state.dart';
import 'package:syncrow_app/features/devices/model/six_scene_model.dart'; import 'package:syncrow_app/features/devices/model/four_scene_model.dart';
import 'package:syncrow_app/features/devices/model/subspace_model.dart';
import 'package:syncrow_app/features/shared_widgets/default_container.dart'; import 'package:syncrow_app/features/shared_widgets/default_container.dart';
import 'package:syncrow_app/features/shared_widgets/default_scaffold.dart'; import 'package:syncrow_app/features/shared_widgets/default_scaffold.dart';
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart'; import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
import 'package:syncrow_app/utils/resource_manager/color_manager.dart'; import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
class LocationSixScenePage extends StatefulWidget { class LocationSixScenePage extends StatelessWidget {
final SpaceModel? space; final SpaceModel? space;
LocationSixScenePage({super.key, this.space}); final String? deviceId;
@override const LocationSixScenePage({
_LocationSixScenePageState createState() => _LocationSixScenePageState(); super.key,
} this.space,
this.deviceId,
class _LocationSixScenePageState extends State<LocationSixScenePage> { });
String _selectedOption = 'Conference Room';
bool _hasSelectionChanged = false;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return DefaultScaffold( String roomIdSelected = '';
title: 'Device Location',
actions: [ return Scaffold(
InkWell( body: BlocProvider(
onTap: _hasSelectionChanged create: (context) => SixSceneBloc(sixSceneId: deviceId ?? '')
? () { ..add(const SixSceneInitial())
print('Save button clicked'); ..add(const SixSceneInitialInfo())
} ..add(FetchRoomsEvent(unit: space!)),
: null,
child: BodyMedium(
text: 'Save',
fontWeight: FontWeight.w700,
fontSize: 16,
fontColor: _hasSelectionChanged
? ColorsManager.slidingBlueColor
: ColorsManager.primaryTextColor,
),
),
const SizedBox(width: 20),
],
child: BlocProvider(
create: (context) => SixSceneBloc(sixSceneId: '')
..add(FetchRoomsEvent(unit: widget.space!)),
child: BlocBuilder<SixSceneBloc, SixSceneState>( child: BlocBuilder<SixSceneBloc, SixSceneState>(
builder: (context, state) { builder: (context, state) {
final sensor = BlocProvider.of<SixSceneBloc>(context); final _bloc = BlocProvider.of<SixSceneBloc>(context);
SixSceneModel model = SixSceneModel( FourSceneModelState model = FourSceneModelState(
scene_1: '', scene_1: '',
scene_2: '', scene_2: '',
scene_3: '', scene_3: '',
scene_4: '', scene_4: '',
scene_5: '',
scene_6: '',
scene_id_group_id: '', scene_id_group_id: '',
switch_backlight: ''); switch_backlight: '');
List<SubSpaceModel>? rooms = []; if (state is SaveSelectionSuccessState) {
if (state is LoadingNewSate) { new Future.delayed(const Duration(microseconds: 500), () {
model = state.sosSensor; _bloc.add(SixSceneInitialInfo());
} else if (state is FetchRoomsState) { Navigator.of(context).pop(true);
rooms = state.roomsList; });
} }
return state is SixSceneLoadingState return state is SixSceneLoadingState
? const Center( ? const Center(
@ -76,52 +55,93 @@ class _LocationSixScenePageState extends State<LocationSixScenePage> {
child: CircularProgressIndicator(), child: CircularProgressIndicator(),
), ),
) )
: RefreshIndicator( : DefaultScaffold(
onRefresh: () async { actions: [
sensor.add(const SixSceneInitial()); BlocBuilder<SixSceneBloc, SixSceneState>(
}, builder: (context, state) {
child: ListView( final bool canSave = state is OptionSelectedState &&
padding: const EdgeInsets.symmetric(vertical: 20), state.hasSelectionChanged;
children: [ return InkWell(
const BodyMedium( onTap: canSave
text: 'Smart Device Location', ? () {
fontWeight: FontWeight.w700, context.read<SixSceneBloc>().add(
fontSize: 12, AssignRoomEvent(
fontColor: ColorsManager.grayColor, context: context,
), roomId: roomIdSelected,
const SizedBox(height: 5), unit: space!));
DefaultContainer( }
padding: const EdgeInsets.all(20), : null,
child: ListView.builder( child: BodyMedium(
physics: const NeverScrollableScrollPhysics(), text: 'Save',
shrinkWrap: true, fontWeight: FontWeight.w700,
itemCount: rooms!.length, fontSize: 16,
itemBuilder: (context, index) { fontColor: canSave
final room = rooms![index]; ? ColorsManager.slidingBlueColor
return Column( : ColorsManager.primaryTextColor,
children: [ ),
_buildCheckboxOption( );
label: room.name!, },
onTap: (v) { ),
setState(() { const SizedBox(width: 20),
_selectedOption = v; ],
_hasSelectionChanged = true; child: RefreshIndicator(
}); onRefresh: () async {
}, // sensor.add(const SosInitial());
), },
if (index < rooms.length - 1) ...[ child: ListView(
const SizedBox(height: 10), shrinkWrap: true,
const Divider( padding: const EdgeInsets.symmetric(vertical: 20),
color: ColorsManager.dividerColor, children: [
), const BodyMedium(
const SizedBox(height: 10), text: 'Smart Device Location',
], fontWeight: FontWeight.w700,
], fontSize: 12,
); fontColor: ColorsManager.grayColor,
},
), ),
), const SizedBox(height: 5),
], DefaultContainer(
padding: const EdgeInsets.all(20),
child: ListView.builder(
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: _bloc.roomsList.length,
itemBuilder: (context, index) {
final fromRoom = _bloc.roomsList[index];
final isSelected = (state
is OptionSelectedState &&
state.selectedOption == fromRoom.id) ||
(state is! OptionSelectedState &&
fromRoom.id ==
_bloc.deviceInfo.subspace.uuid);
return Column(
children: [
_buildCheckboxOption(
label: fromRoom.name!,
isSelected: isSelected,
onTap: (label) {
context.read<SixSceneBloc>().add(
SelectOptionEvent(
selectedOption: fromRoom.id!,
),
);
roomIdSelected = fromRoom.id!;
},
),
if (index < _bloc.roomsList.length - 1) ...[
const SizedBox(height: 10),
const Divider(
color: ColorsManager.dividerColor,
),
const SizedBox(height: 10),
],
],
);
},
),
),
],
),
), ),
); );
}, },
@ -129,34 +149,6 @@ class _LocationSixScenePageState extends State<LocationSixScenePage> {
), ),
); );
} }
Widget _buildCheckboxOption(
{required String label, required Function(String) onTap}) {
return Padding(
padding: const EdgeInsets.only(bottom: 10, top: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
BodyMedium(
text: label,
style: const TextStyle(fontSize: 15, fontWeight: FontWeight.w400),
),
CircularCheckbox(
value: _selectedOption == label,
onChanged: (bool? value) {
if (value == true) {
setState(() {
_selectedOption = label;
_hasSelectionChanged = true;
});
onTap(label);
}
},
),
],
),
);
}
} }
class CircularCheckbox extends StatefulWidget { class CircularCheckbox extends StatefulWidget {
@ -202,3 +194,33 @@ class _CircularCheckboxState extends State<CircularCheckbox> {
); );
} }
} }
Widget _buildCheckboxOption({
required String label,
required bool isSelected,
required Function(String) onTap,
}) {
return Padding(
padding: const EdgeInsets.only(bottom: 10, top: 10),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
BodyMedium(
text: label,
style: const TextStyle(fontSize: 15, fontWeight: FontWeight.w400),
),
CircularCheckbox(
value: isSelected,
onChanged: (bool? value) {
if (value == true) {
onTap(label);
}
},
),
],
),
);
}
//LocationSixScenePage

View File

@ -39,9 +39,9 @@ class QuestionPage extends StatelessWidget {
scene_id_group_id: '', scene_id_group_id: '',
switch_backlight: ''); switch_backlight: '');
if (state is LoadingNewSate) { if (state is LoadingNewSate) {
model = state.sosSensor; model = state.device;
} else if (state is UpdateState) { } else if (state is UpdateState) {
model = state.sensor; model = state.device;
} }
return state is SixSceneLoadingState return state is SixSceneLoadingState
? const Center( ? const Center(

View File

@ -38,9 +38,9 @@ class ShareSixScenePage extends StatelessWidget {
scene_id_group_id: '', scene_id_group_id: '',
switch_backlight: ''); switch_backlight: '');
if (state is LoadingNewSate) { if (state is LoadingNewSate) {
model = state.sosSensor; model = state.device;
} else if (state is UpdateState) { } else if (state is UpdateState) {
model = state.sensor; model = state.device;
} }
return state is LoadingNewSate return state is LoadingNewSate
? const Center( ? const Center(

View File

@ -39,9 +39,9 @@ class SixSceneCreateGroup extends StatelessWidget {
scene_id_group_id: '', scene_id_group_id: '',
switch_backlight: ''); switch_backlight: '');
if (state is LoadingNewSate) { if (state is LoadingNewSate) {
model = state.sosSensor; model = state.device;
} else if (state is UpdateState) { } else if (state is UpdateState) {
model = state.sensor; model = state.device;
} }
return state is LoadingNewSate return state is LoadingNewSate
? const Center( ? const Center(

View File

@ -1,9 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_bloc.dart'; import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_bloc.dart';
import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_event.dart'; import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_event.dart';
import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_state.dart'; import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_state.dart';
import 'package:syncrow_app/features/devices/model/device_model.dart'; import 'package:syncrow_app/features/devices/model/device_model.dart';
import 'package:syncrow_app/features/devices/model/six_scene_model.dart'; import 'package:syncrow_app/features/devices/model/six_scene_model.dart';
import 'package:syncrow_app/features/shared_widgets/default_container.dart'; import 'package:syncrow_app/features/shared_widgets/default_container.dart';
@ -24,11 +24,12 @@ class SixSceneInfoPage extends StatelessWidget {
title: 'Device Information', title: 'Device Information',
child: BlocProvider( child: BlocProvider(
create: (context) => SixSceneBloc(sixSceneId: device?.uuid ?? '') create: (context) => SixSceneBloc(sixSceneId: device?.uuid ?? '')
..add(const SixSceneInitial()), ..add(const SixSceneInitial())
..add(const SixSceneInitialInfo()),
child: BlocBuilder<SixSceneBloc, SixSceneState>( child: BlocBuilder<SixSceneBloc, SixSceneState>(
builder: (context, state) { builder: (context, state) {
final sensor = BlocProvider.of<SixSceneBloc>(context); final _bloc = BlocProvider.of<SixSceneBloc>(context);
SixSceneModel model = SixSceneModel( SixSceneModel model = SixSceneModel(
scene_1: '', scene_1: '',
scene_2: '', scene_2: '',
scene_3: '', scene_3: '',
@ -38,9 +39,9 @@ class SixSceneInfoPage extends StatelessWidget {
scene_id_group_id: '', scene_id_group_id: '',
switch_backlight: ''); switch_backlight: '');
if (state is LoadingNewSate) { if (state is LoadingNewSate) {
model = state.sosSensor; model = state.device;
} else if (state is UpdateState) { } else if (state is UpdateState) {
model = state.sensor; model = state.device;
} }
return state is SixSceneLoadingState return state is SixSceneLoadingState
? const Center( ? const Center(
@ -51,11 +52,11 @@ class SixSceneInfoPage extends StatelessWidget {
) )
: RefreshIndicator( : RefreshIndicator(
onRefresh: () async { onRefresh: () async {
sensor.add(const SixSceneInitial()); _bloc.add(const SixSceneInitial());
}, },
child: DefaultContainer( child: DefaultContainer(
child: Padding( child: Padding(
padding: const EdgeInsets.only(left: 10, right: 10), padding: const EdgeInsets.only(left: 5, right: 5),
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -70,12 +71,24 @@ class SixSceneInfoPage extends StatelessWidget {
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
const BodySmall( BodySmall(
text: 'bf3575d0e0c8b6e0a6hybl', text: _bloc.deviceInfo.productUuid,
fontColor: ColorsManager.primaryTextColor, fontColor: ColorsManager.primaryTextColor,
), ),
InkWell( InkWell(
onTap: () {}, onTap: () {
Clipboard.setData(
ClipboardData(
text: _bloc.deviceInfo.productUuid,
),
);
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text("Copied to Clipboard"),
),
);
},
child: const Row( child: const Row(
children: [ children: [
Icon( Icon(
@ -94,18 +107,18 @@ class SixSceneInfoPage extends StatelessWidget {
const Divider( const Divider(
color: ColorsManager.dividerColor, color: ColorsManager.dividerColor,
), ),
const Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
BodyLarge( const BodyLarge(
text: 'MAC', text: 'MAC',
fontSize: 15, fontSize: 15,
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
fontColor: ColorsManager.blackColor, fontColor: ColorsManager.blackColor,
), ),
BodySmall( BodySmall(
text: 'bf3575d0e0c8b6e0a6hybl', text: _bloc.deviceInfo.macAddress,
fontColor: ColorsManager.primaryTextColor, fontColor: ColorsManager.primaryTextColor,
), ),
], ],
@ -113,18 +126,18 @@ class SixSceneInfoPage extends StatelessWidget {
const Divider( const Divider(
color: ColorsManager.dividerColor, color: ColorsManager.dividerColor,
), ),
const Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
BodyLarge( const BodyLarge(
text: 'Time Zone', text: 'Time Zone',
fontSize: 15, fontSize: 15,
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
fontColor: ColorsManager.blackColor, fontColor: ColorsManager.blackColor,
), ),
BodySmall( BodySmall(
text: 'Asia/Dubai', text: _bloc.deviceInfo.timeZone,
fontColor: ColorsManager.primaryTextColor, fontColor: ColorsManager.primaryTextColor,
), ),
], ],

View File

@ -5,10 +5,9 @@ import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_bloc.dart'; import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_bloc.dart';
import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_event.dart'; import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_event.dart';
import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_state.dart'; import 'package:syncrow_app/features/devices/bloc/6_scene_switch_bloc/6_scene_state.dart';
import 'package:syncrow_app/features/devices/model/device_model.dart'; import 'package:syncrow_app/features/devices/model/device_model.dart';
import 'package:syncrow_app/features/devices/model/six_scene_model.dart'; import 'package:syncrow_app/features/devices/model/six_scene_model.dart';
import 'package:syncrow_app/features/devices/view/widgets/6_scene_switch/6_scene_setting/location_setting.dart'; import 'package:syncrow_app/features/devices/view/widgets/four_scene_switch/four_scene_setting/location_setting_four_scene.dart';
import 'package:syncrow_app/features/shared_widgets/default_container.dart'; import 'package:syncrow_app/features/shared_widgets/default_container.dart';
import 'package:syncrow_app/features/shared_widgets/default_scaffold.dart'; import 'package:syncrow_app/features/shared_widgets/default_scaffold.dart';
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart'; import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
@ -26,13 +25,19 @@ class SixSceneProfilePage extends StatelessWidget {
return DefaultScaffold( return DefaultScaffold(
title: 'Device Settings', title: 'Device Settings',
leading: IconButton(
onPressed: () {
Navigator.of(context).pop(true);
},
icon: const Icon(Icons.arrow_back_ios)),
child: BlocProvider( child: BlocProvider(
create: (context) => SixSceneBloc(sixSceneId: device?.uuid ?? '') create: (context) => SixSceneBloc(sixSceneId: device?.uuid ?? '')
..add(const SixSceneInitial()), ..add(const SixSceneInitial())
..add(const SixSceneInitialInfo()),
child: BlocBuilder<SixSceneBloc, SixSceneState>( child: BlocBuilder<SixSceneBloc, SixSceneState>(
builder: (context, state) { builder: (context, state) {
final sensor = BlocProvider.of<SixSceneBloc>(context); final _bloc = BlocProvider.of<SixSceneBloc>(context);
SixSceneModel model = SixSceneModel( SixSceneModel model = SixSceneModel(
scene_1: '', scene_1: '',
scene_2: '', scene_2: '',
scene_3: '', scene_3: '',
@ -42,9 +47,9 @@ class SixSceneProfilePage extends StatelessWidget {
scene_id_group_id: '', scene_id_group_id: '',
switch_backlight: ''); switch_backlight: '');
if (state is LoadingNewSate) { if (state is LoadingNewSate) {
model = state.sosSensor; model = state.device;
} else if (state is UpdateState) { } else if (state is UpdateState) {
model = state.sensor; model = state.device;
} }
return state is SixSceneLoadingState return state is SixSceneLoadingState
? const Center( ? const Center(
@ -55,7 +60,7 @@ class SixSceneProfilePage extends StatelessWidget {
) )
: RefreshIndicator( : RefreshIndicator(
onRefresh: () async { onRefresh: () async {
sensor.add(const SixSceneInitial()); _bloc.add(const SixSceneInitial());
}, },
child: ListView( child: ListView(
children: [ children: [
@ -64,11 +69,13 @@ class SixSceneProfilePage extends StatelessWidget {
backgroundColor: Colors.white, backgroundColor: Colors.white,
child: CircleAvatar( child: CircleAvatar(
radius: 55, radius: 55,
backgroundColor: Colors.grey, backgroundColor: ColorsManager.graysColor,
child: ClipOval( child: ClipOval(
child: SvgPicture.asset( child: Center(
Assets.sosProfileIcon, child: SvgPicture.asset(
fit: BoxFit.fill, Assets.sixSceneIcon,
fit: BoxFit.cover,
),
), ),
), ),
), ),
@ -91,11 +98,11 @@ class SixSceneProfilePage extends StatelessWidget {
color: Colors.black, color: Colors.black,
), ),
textAlign: TextAlign.center, textAlign: TextAlign.center,
focusNode: sensor.focusNode, focusNode: _bloc.focusNode,
controller: sensor.nameController, controller: _bloc.nameController,
enabled: sensor.editName, enabled: _bloc.editName,
onEditingComplete: () { onEditingComplete: () {
// sensor.add(SaveNameEvent(context: context)); _bloc.add(const SaveNameEvent());
}, },
decoration: const InputDecoration( decoration: const InputDecoration(
hintText: "Your Name", hintText: "Your Name",
@ -109,8 +116,7 @@ class SixSceneProfilePage extends StatelessWidget {
const SizedBox(width: 5), const SizedBox(width: 5),
InkWell( InkWell(
onTap: () { onTap: () {
sensor _bloc.add(const ChangeNameEvent(value: true));
.add(const ChangeNameEvent(value: true));
}, },
child: const Padding( child: const Padding(
padding: EdgeInsets.symmetric(horizontal: 10), padding: EdgeInsets.symmetric(horizontal: 10),
@ -134,29 +140,34 @@ class SixSceneProfilePage extends StatelessWidget {
DefaultContainer( DefaultContainer(
padding: const EdgeInsets.all(20), padding: const EdgeInsets.all(20),
child: InkWell( child: InkWell(
onTap: () { onTap: () async {
Navigator.of(context).push( bool val = await Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (context) => LocationSixScenePage( builder: (context) => LocationFourScenePage(
space: spaces!.first, space: spaces!.first,
deviceId: device?.uuid ?? '',
)), )),
); );
if (val == true) {
_bloc.add(const SixSceneInitialInfo());
}
}, },
child: const Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
SizedBox( const SizedBox(
child: Text('Location'), child: Text('Location'),
), ),
Row( Row(
children: [ children: [
SizedBox( SizedBox(
child: BodyMedium( child: BodyMedium(
text: 'Syncroom', text: _bloc
.deviceInfo.subspace.subspaceName,
fontColor: ColorsManager.textGray, fontColor: ColorsManager.textGray,
), ),
), ),
Icon( const Icon(
Icons.arrow_forward_ios, Icons.arrow_forward_ios,
size: 15, size: 15,
color: ColorsManager.textGray, color: ColorsManager.textGray,

View File

@ -15,7 +15,6 @@ import 'package:syncrow_app/features/devices/view/widgets/6_scene_switch/6_scene
import 'package:syncrow_app/features/devices/view/widgets/6_scene_switch/6_scene_setting/six_scene_profile_page.dart'; import 'package:syncrow_app/features/devices/view/widgets/6_scene_switch/6_scene_setting/six_scene_profile_page.dart';
import 'package:syncrow_app/features/devices/view/widgets/6_scene_switch/6_scene_setting/six_scene_update_dialog.dart'; import 'package:syncrow_app/features/devices/view/widgets/6_scene_switch/6_scene_setting/six_scene_update_dialog.dart';
import 'package:syncrow_app/features/devices/view/widgets/6_scene_switch/6_scene_setting/six_scene_update_page.dart'; import 'package:syncrow_app/features/devices/view/widgets/6_scene_switch/6_scene_setting/six_scene_update_page.dart';
import 'package:syncrow_app/features/shared_widgets/default_container.dart'; import 'package:syncrow_app/features/shared_widgets/default_container.dart';
import 'package:syncrow_app/features/shared_widgets/default_scaffold.dart'; import 'package:syncrow_app/features/shared_widgets/default_scaffold.dart';
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart'; import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
@ -34,11 +33,13 @@ class SixSceneSettings extends StatelessWidget {
title: 'Device Settings', title: 'Device Settings',
child: BlocProvider( child: BlocProvider(
create: (context) => SixSceneBloc(sixSceneId: device?.uuid ?? '') create: (context) => SixSceneBloc(sixSceneId: device?.uuid ?? '')
..add(const SixSceneInitial()), ..add(const SixSceneInitial())
..add(const SixSceneInitial())
..add(SixSceneInitialInfo()),
child: BlocBuilder<SixSceneBloc, SixSceneState>( child: BlocBuilder<SixSceneBloc, SixSceneState>(
builder: (context, state) { builder: (context, state) {
final sensor = BlocProvider.of<SixSceneBloc>(context); final _bloc = BlocProvider.of<SixSceneBloc>(context);
SixSceneModel model = SixSceneModel( SixSceneModel model = SixSceneModel(
scene_1: '', scene_1: '',
scene_2: '', scene_2: '',
scene_3: '', scene_3: '',
@ -48,9 +49,9 @@ class SixSceneSettings extends StatelessWidget {
scene_id_group_id: '', scene_id_group_id: '',
switch_backlight: ''); switch_backlight: '');
if (state is LoadingNewSate) { if (state is LoadingNewSate) {
model = state.sosSensor; model = state.device;
} else if (state is UpdateState) { } else if (state is UpdateState) {
model = state.sensor; model = state.device;
} }
return state is SixSceneLoadingState return state is SixSceneLoadingState
? const Center( ? const Center(
@ -59,378 +60,374 @@ class SixSceneSettings extends StatelessWidget {
height: 50, height: 50,
child: CircularProgressIndicator()), child: CircularProgressIndicator()),
) )
: RefreshIndicator( : ListView(
onRefresh: () async { children: [
sensor.add(const SixSceneInitial()); Padding(
}, padding: const EdgeInsets.symmetric(
child: ListView( vertical: 10,
children: [ ),
Padding( child: InkWell(
padding: const EdgeInsets.symmetric( onTap: () async {
vertical: 10, bool val = await Navigator.of(context).push(
), MaterialPageRoute(
child: InkWell( builder: (context) => SixSceneProfilePage(
onTap: () { device: device,
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) =>
const SixSceneProfilePage(),
), ),
); ),
}, );
child: Stack( if (val == true) {
children: [ _bloc.add(const SixSceneInitialInfo());
const Column( }
crossAxisAlignment: CrossAxisAlignment.stretch, },
children: [ child: Stack(
SizedBox(height: 20), children: [
DefaultContainer( Column(
borderRadius: crossAxisAlignment: CrossAxisAlignment.stretch,
BorderRadius.all(Radius.circular(30)), children: [
SizedBox(height: 20),
DefaultContainer(
borderRadius:
BorderRadius.all(Radius.circular(30)),
child: Padding(
padding: EdgeInsets.all(10.0),
child: Padding( child: Padding(
padding: EdgeInsets.all(10.0), padding: EdgeInsets.only(left: 90),
child: Padding( child: Row(
padding: EdgeInsets.only(left: 90), mainAxisAlignment:
child: Row( MainAxisAlignment.spaceBetween,
mainAxisAlignment: children: [
MainAxisAlignment.spaceBetween, Column(
children: [ crossAxisAlignment:
Column( CrossAxisAlignment.start,
crossAxisAlignment: children: [
CrossAxisAlignment.start, BodyMedium(
children: [ text: _bloc.deviceInfo.name,
BodyMedium( fontWeight: FontWeight.bold,
text: '6 Scene Switch', ),
fontWeight: FontWeight.bold, SizedBox(
), height: 5,
SizedBox( ),
height: 5, BodySmall(
), text: _bloc.deviceInfo
BodySmall( .subspace.subspaceName),
text: "Room: Syncrow"), ],
], ),
), Icon(Icons.edit_sharp)
Icon(Icons.edit_sharp) ],
],
),
), ),
), ),
), ),
], ),
), ],
Positioned( ),
top: 0, Positioned(
left: 20, top: 0,
child: CircleAvatar( left: 20,
radius: 43, child: CircleAvatar(
radius: 43,
backgroundColor: Colors.white,
child: CircleAvatar(
radius: 40,
backgroundColor: Colors.white, backgroundColor: Colors.white,
child: CircleAvatar( child: CircleAvatar(
radius: 40, radius: 40,
backgroundColor: Colors.white, backgroundColor:
child: CircleAvatar( ColorsManager.backgroundColor,
radius: 40, child: SvgPicture.asset(
backgroundColor: Assets.sixSceneIcon,
ColorsManager.backgroundColor, fit: BoxFit.fill,
child: SvgPicture.asset(
Assets.sixSceneIcon,
fit: BoxFit.fill,
),
),
)),
),
],
),
),
),
const SizedBox(height: 20),
const BodyMedium(
text: 'Device Management',
fontWeight: FontWeight.w700,
fontSize: 12,
fontColor: ColorsManager.grayColor,
),
DefaultContainer(
child: Column(
children: [
SettingWidget(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) =>
const SixSceneInfoPage()),
);
},
text: 'Device Information',
icon: Assets.infoIcon,
),
const Divider(
color: ColorsManager.dividerColor,
),
SettingWidget(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) =>
ShareSixScenePage(device: device!)),
);
},
text: 'Tap-to Run and Automation',
icon: Assets.tapRunIcon,
),
],
),
),
const SizedBox(height: 20),
const BodyMedium(
text: 'Device Offline Notification',
fontWeight: FontWeight.w700,
fontSize: 12,
fontColor: ColorsManager.grayColor,
),
DefaultContainer(
child: Column(
children: [
SettingWidget(
onChanged: (p0) {},
isNotification: true,
onTap: () {},
text: 'Offline Notification',
icon: Assets.notificationIcon,
),
],
),
),
const SizedBox(height: 20),
const BodyMedium(
text: 'Others',
fontWeight: FontWeight.w700,
fontSize: 12,
fontColor: ColorsManager.grayColor,
),
const SizedBox(height: 5),
DefaultContainer(
child: Column(
children: [
SettingWidget(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) =>
ShareSixScenePage(device: device!)),
);
},
text: 'Share Device',
icon: Assets.shareIcon,
),
const Divider(
color: ColorsManager.dividerColor,
),
SettingWidget(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) =>
SixSceneCreateGroup(
device: device!)),
);
},
text: 'Create Group',
icon: Assets.createGroupIcon,
),
const Divider(
color: ColorsManager.dividerColor,
),
SettingWidget(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) =>
FaqSixScenePage(device: device!)),
);
},
text: 'Device FAQ',
icon: Assets.faqIcon,
),
const Divider(
color: ColorsManager.dividerColor,
),
SettingWidget(
onTapUpdate: () {
showDialog(
context: context,
builder: (context) {
return UpdateInfoDialog(
cancelTab: () {
Navigator.of(context).pop();
},
confirmTab: () {
// context
// .read<
// CreateSceneBloc>()
// .add(DeleteSceneEvent(
// sceneId: sceneId,
// unitUuid: HomeCubit
// .getInstance()
// .selectedSpace!
// .id!,
// ));
Navigator.of(context).pop();
},
);
},
);
},
isUpdate: true,
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) =>
const SixSceneUpdatePage()),
);
},
text: 'Device Update',
icon: Assets.updateIcon,
),
],
),
),
const SizedBox(height: 20),
InkWell(
onTap: () {
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return Container(
height: 200,
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
const BodyMedium(
text: 'Remove Device',
fontWeight: FontWeight.w700,
fontSize: 16,
fontColor: ColorsManager.red,
),
const SizedBox(height: 10),
const SizedBox(
width: 250,
child: Divider(
color: ColorsManager.dividerColor,
), ),
), ),
const SizedBox(height: 10), )),
Row( ),
mainAxisAlignment: ],
MainAxisAlignment.spaceBetween, ),
children: [ ),
InkWell( ),
onTap: () { const SizedBox(height: 20),
showDialog( const BodyMedium(
context: context, text: 'Device Management',
builder: (context) { fontWeight: FontWeight.w700,
return DisconnectDeviceDialog( fontSize: 12,
cancelTab: () { fontColor: ColorsManager.grayColor,
Navigator.of(context) ),
.pop(); DefaultContainer(
}, child: Column(
confirmTab: () { children: [
// context SettingWidget(
// .read< onTap: () {
// CreateSceneBloc>() Navigator.of(context).push(
// .add(DeleteSceneEvent( MaterialPageRoute(
// sceneId: sceneId, builder: (context) => SixSceneInfoPage(
// unitUuid: HomeCubit device: device,
// .getInstance() )),
// .selectedSpace!
// .id!,
// ));
Navigator.of(context)
.pop();
},
);
},
);
},
child: const BodyMedium(
text: 'Disconnect Device',
fontWeight: FontWeight.w400,
fontSize: 15,
fontColor: ColorsManager
.textPrimaryColor,
),
),
const Icon(
Icons.keyboard_arrow_right,
color: ColorsManager.textGray,
)
],
),
const SizedBox(height: 20),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
InkWell(
onTap: () {
showDialog(
context: context,
builder: (context) {
return DisconnectWipeData(
cancelTab: () {
Navigator.of(context)
.pop();
},
confirmTab: () {
// context
// .read<
// CreateSceneBloc>()
// .add(DeleteSceneEvent(
// sceneId: sceneId,
// unitUuid: HomeCubit
// .getInstance()
// .selectedSpace!
// .id!,
// ));
Navigator.of(context)
.pop();
},
);
},
);
},
child: const BodyMedium(
text:
'Disconnect Device and Wipe Data',
fontWeight: FontWeight.w400,
fontSize: 15,
fontColor: ColorsManager
.textPrimaryColor,
),
),
const Icon(
Icons.keyboard_arrow_right,
color: ColorsManager.textGray,
)
],
),
],
),
); );
}, },
); text: 'Device Information',
}, icon: Assets.infoIcon,
child: const Center(
child: BodyMedium(
text: 'Remove Device',
fontWeight: FontWeight.w400,
fontSize: 15,
fontColor: ColorsManager.red,
), ),
const Divider(
color: ColorsManager.dividerColor,
),
SettingWidget(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) =>
ShareSixScenePage(device: device!)),
);
},
text: 'Tap-to Run and Automation',
icon: Assets.tapRunIcon,
),
],
),
),
const SizedBox(height: 20),
const BodyMedium(
text: 'Device Offline Notification',
fontWeight: FontWeight.w700,
fontSize: 12,
fontColor: ColorsManager.grayColor,
),
DefaultContainer(
child: Column(
children: [
SettingWidget(
onChanged: (p0) {},
isNotification: true,
onTap: () {},
text: 'Offline Notification',
icon: Assets.notificationIcon,
),
],
),
),
const SizedBox(height: 20),
const BodyMedium(
text: 'Others',
fontWeight: FontWeight.w700,
fontSize: 12,
fontColor: ColorsManager.grayColor,
),
const SizedBox(height: 5),
DefaultContainer(
child: Column(
children: [
SettingWidget(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) =>
ShareSixScenePage(device: device!)),
);
},
text: 'Share Device',
icon: Assets.shareIcon,
),
const Divider(
color: ColorsManager.dividerColor,
),
SettingWidget(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) =>
SixSceneCreateGroup(device: device!)),
);
},
text: 'Create Group',
icon: Assets.createGroupIcon,
),
const Divider(
color: ColorsManager.dividerColor,
),
SettingWidget(
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) =>
FaqSixScenePage(device: device!)),
);
},
text: 'Device FAQ',
icon: Assets.faqIcon,
),
const Divider(
color: ColorsManager.dividerColor,
),
SettingWidget(
onTapUpdate: () {
showDialog(
context: context,
builder: (context) {
return UpdateInfoDialog(
cancelTab: () {
Navigator.of(context).pop();
},
confirmTab: () {
// context
// .read<
// CreateSceneBloc>()
// .add(DeleteSceneEvent(
// sceneId: sceneId,
// unitUuid: HomeCubit
// .getInstance()
// .selectedSpace!
// .id!,
// ));
Navigator.of(context).pop();
},
);
},
);
},
isUpdate: true,
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) =>
const SixSceneUpdatePage()),
);
},
text: 'Device Update',
icon: Assets.updateIcon,
),
],
),
),
const SizedBox(height: 20),
InkWell(
onTap: () {
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return Container(
height: 200,
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
const BodyMedium(
text: 'Remove Device',
fontWeight: FontWeight.w700,
fontSize: 16,
fontColor: ColorsManager.red,
),
const SizedBox(height: 10),
const SizedBox(
width: 250,
child: Divider(
color: ColorsManager.dividerColor,
),
),
const SizedBox(height: 10),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
InkWell(
onTap: () {
showDialog(
context: context,
builder: (context) {
return DisconnectDeviceDialog(
cancelTab: () {
Navigator.of(context).pop();
},
confirmTab: () {
// context
// .read<
// CreateSceneBloc>()
// .add(DeleteSceneEvent(
// sceneId: sceneId,
// unitUuid: HomeCubit
// .getInstance()
// .selectedSpace!
// .id!,
// ));
Navigator.of(context).pop();
},
);
},
);
},
child: const BodyMedium(
text: 'Disconnect Device',
fontWeight: FontWeight.w400,
fontSize: 15,
fontColor:
ColorsManager.textPrimaryColor,
),
),
const Icon(
Icons.keyboard_arrow_right,
color: ColorsManager.textGray,
)
],
),
const SizedBox(height: 20),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
InkWell(
onTap: () {
showDialog(
context: context,
builder: (context) {
return DisconnectWipeData(
cancelTab: () {
Navigator.of(context).pop();
},
confirmTab: () {
// context
// .read<
// CreateSceneBloc>()
// .add(DeleteSceneEvent(
// sceneId: sceneId,
// unitUuid: HomeCubit
// .getInstance()
// .selectedSpace!
// .id!,
// ));
Navigator.of(context).pop();
},
);
},
);
},
child: const BodyMedium(
text:
'Disconnect Device and Wipe Data',
fontWeight: FontWeight.w400,
fontSize: 15,
fontColor:
ColorsManager.textPrimaryColor,
),
),
const Icon(
Icons.keyboard_arrow_right,
color: ColorsManager.textGray,
)
],
),
],
),
);
},
);
},
child: const Center(
child: BodyMedium(
text: 'Remove Device',
fontWeight: FontWeight.w400,
fontSize: 15,
fontColor: ColorsManager.red,
), ),
), ),
], ),
), ],
); );
}, },
), ),

View File

@ -58,9 +58,9 @@ class SixSceneScreen extends StatelessWidget {
switch_backlight: ''); switch_backlight: '');
if (state is LoadingNewSate) { if (state is LoadingNewSate) {
model = state.sosSensor; model = state.device;
} else if (state is UpdateState) { } else if (state is UpdateState) {
model = state.sensor; model = state.device;
} }
return state is SixSceneLoadingState return state is SixSceneLoadingState
? const Center( ? const Center(

View File

@ -162,17 +162,13 @@ class FourSceneScreen extends StatelessWidget {
cancelTab: () { cancelTab: () {
Navigator.of(context).pop(); Navigator.of(context).pop();
}, },
confirmTab: confirmTab: (switchSelected) async {
(switchSelected) async {
Navigator.of(context).push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (context) => builder: (context) =>
FourSelectSceneFourPage( FourSelectSceneFourPage(
switchSelected: switchSelected:switchSelected,
switchSelected, deviceId: device!.uuid)),
deviceId:
device!
.uuid)),
); );
}, },
); );

View File

@ -25,7 +25,7 @@ class FourSceneInfoPage extends StatelessWidget {
child: BlocProvider( child: BlocProvider(
create: (context) => FourSceneBloc(fourSceneId: device?.uuid ?? '') create: (context) => FourSceneBloc(fourSceneId: device?.uuid ?? '')
..add(const FourSceneInitial()) ..add(const FourSceneInitial())
..add(FourSceneInitialInfo()), ..add(const FourSceneInitialInfo()),
child: BlocBuilder<FourSceneBloc, FourSceneState>( child: BlocBuilder<FourSceneBloc, FourSceneState>(
builder: (context, state) { builder: (context, state) {
final _bloc = BlocProvider.of<FourSceneBloc>(context); final _bloc = BlocProvider.of<FourSceneBloc>(context);

View File

@ -189,6 +189,7 @@ class DevicesAPI {
path: ApiEndpoints.deviceByUuid.replaceAll('{deviceUuid}', deviceId), path: ApiEndpoints.deviceByUuid.replaceAll('{deviceUuid}', deviceId),
showServerMessage: false, showServerMessage: false,
expectedResponseModel: (json) { expectedResponseModel: (json) {
print('json==$json');
return json; return json;
}); });
return response; return response;