push routines style and create scene view

This commit is contained in:
ashrafzarkanisala
2024-06-12 01:54:03 +03:00
parent 76f5c6d325
commit 1045d72bbe
21 changed files with 411 additions and 189 deletions
@@ -0,0 +1 @@
@@ -0,0 +1,28 @@
import 'package:equatable/equatable.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_event.dart';
import 'package:syncrow_app/features/scene/model/scene_model.dart';
part 'scene_state.dart';
class SceneBloc extends Bloc<SceneEvent, SceneState> {
SceneBloc() : super(SceneInitial()) {
on<LoadScenes>(_onLoadScenes);
}
void _onLoadScenes(LoadScenes event, Emitter<SceneState> emit) {
emit(SceneLoading());
try {
final scenes = _loadScenes();
emit(SceneLoaded(scenes));
} catch (_) {
emit(SceneError());
}
}
List<SceneModel> _loadScenes() {
//TODO: Load scenes
return [];
}
}
@@ -0,0 +1,9 @@
import 'package:equatable/equatable.dart';
abstract class SceneEvent extends Equatable {
@override
List<Object> get props => [];
}
class LoadScenes extends SceneEvent {}
@@ -0,0 +1,21 @@
part of 'scene_bloc.dart';
abstract class SceneState extends Equatable {
@override
List<Object> get props => [];
}
class SceneInitial extends SceneState {}
class SceneLoading extends SceneState {}
class SceneLoaded extends SceneState {
final List<SceneModel> scenes;
SceneLoaded(this.scenes);
@override
List<Object> get props => [scenes];
}
class SceneError extends SceneState {}
-20
View File
@@ -1,20 +0,0 @@
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_app/features/scene/model/scene_model.dart';
part 'scene_state.dart';
class SceneCubit extends Cubit<SceneState> {
SceneCubit() : super(SceneInitial()) {
getScenes();
}
static SceneCubit of(context) => BlocProvider.of<SceneCubit>(context);
void getScenes() {
emit(SceneLoading());
emit(SceneSuccess());
}
List<SceneModel> scenes = [];
}
-11
View File
@@ -1,11 +0,0 @@
part of 'scene_cubit.dart';
abstract class SceneState {}
class SceneInitial extends SceneState {}
class SceneLoading extends SceneState {}
class SceneSuccess extends SceneState {}
class SceneFailure extends SceneState {}
@@ -0,0 +1,74 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.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/text_widgets/body_medium.dart';
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_small.dart';
import 'package:syncrow_app/generated/assets.dart';
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/strings_manager.dart';
class CreateSceneView extends StatelessWidget {
const CreateSceneView({super.key});
@override
Widget build(BuildContext context) {
return const DefaultScaffold(
title: StringsManager.createScene,
padding: EdgeInsets.only(top: 24),
child: Column(
children: [
DefaultContainer(
width: double.infinity,
margin: EdgeInsets.symmetric(vertical: 4),
child: SceneListTile(
assetPath: Assets.handClickIcon,
title: StringsManager.tapToRun,
subtitle: StringsManager.turnOffAllLights,
),
),
DefaultContainer(
width: double.infinity,
margin: EdgeInsets.symmetric(vertical: 4),
child: SceneListTile(
assetPath: Assets.refreshIcon,
title: StringsManager.whenDeviceStatusChanges,
subtitle: StringsManager.whenUnusualActivityIsDetected,
),
),
],
),
);
}
}
class SceneListTile extends StatelessWidget {
const SceneListTile({
super.key,
required this.assetPath,
required this.title,
required this.subtitle,
});
final String assetPath;
final String title;
final String subtitle;
@override
Widget build(BuildContext context) {
return ListTile(
minLeadingWidth: 40,
leading: SvgPicture.asset(
assetPath,
width: 20,
height: 32,
),
title: BodyMedium(text: title),
subtitle: BodySmall(
text: subtitle,
style: context.bodySmall.copyWith(
fontWeight: FontWeight.w400, color: ColorsManager.greyColor),
),
);
}
}
+3 -3
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/home_cubit.dart';
import 'package:syncrow_app/features/scene/bloc/scene_cubit.dart';
import 'package:syncrow_app/features/scene/bloc/scene_bloc/scene_bloc.dart';
import 'package:syncrow_app/features/shared_widgets/create_unit.dart';
import 'package:syncrow_app/features/shared_widgets/default_container.dart';
import 'package:syncrow_app/features/shared_widgets/text_widgets/body_medium.dart';
@@ -16,8 +16,8 @@ class SceneView extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (BuildContext context) => SceneCubit(),
child: BlocBuilder<SceneCubit, SceneState>(
create: (BuildContext context) => SceneBloc(),
child: BlocBuilder<SceneBloc, SceneState>(
builder: (context, state) {
return HomeCubit.getInstance().spaces?.isEmpty ?? true
? const CreateUnitWidget()