mirror of
https://github.com/SyncrowIOT/syncrow-app.git
synced 2026-10-26 03:07:55 +00:00
push routines style and create scene view
This commit is contained in:
@@ -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 {}
|
||||
@@ -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 = [];
|
||||
}
|
||||
@@ -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),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user