mirror of
https://github.com/SyncrowIOT/syncrow-app.git
synced 2026-10-25 14:17:55 +00:00
restructured the application
added .end files switched to BLoC state-management removed unnecessary helpers initialized Scenes Page
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:meta/meta.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());
|
||||
Future.delayed(const Duration(seconds: 5), () {
|
||||
emit(SceneSuccess());
|
||||
});
|
||||
}
|
||||
|
||||
var scenes = <SceneModel>[];
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
part of 'scene_cubit.dart';
|
||||
|
||||
@immutable
|
||||
abstract class SceneState {}
|
||||
|
||||
class SceneInitial extends SceneState {}
|
||||
|
||||
class SceneLoading extends SceneState {}
|
||||
|
||||
class SceneSuccess extends SceneState {}
|
||||
|
||||
class SceneFailure extends SceneState {}
|
||||
@@ -0,0 +1,46 @@
|
||||
class SceneModel {
|
||||
final String id;
|
||||
final String name;
|
||||
final String description;
|
||||
final String imageUrl;
|
||||
final String location;
|
||||
final String type;
|
||||
final String rating;
|
||||
final String price;
|
||||
final String duration;
|
||||
final String date;
|
||||
final String time;
|
||||
final String status;
|
||||
|
||||
SceneModel({
|
||||
required this.id,
|
||||
required this.name,
|
||||
required this.description,
|
||||
required this.imageUrl,
|
||||
required this.location,
|
||||
required this.type,
|
||||
required this.rating,
|
||||
required this.price,
|
||||
required this.duration,
|
||||
required this.date,
|
||||
required this.time,
|
||||
required this.status,
|
||||
});
|
||||
|
||||
factory SceneModel.fromJson(Map<String, dynamic> json) {
|
||||
return SceneModel(
|
||||
id: json['id'],
|
||||
name: json['name'],
|
||||
description: json['description'],
|
||||
imageUrl: json['imageUrl'],
|
||||
location: json['location'],
|
||||
type: json['type'],
|
||||
rating: json['rating'],
|
||||
price: json['price'],
|
||||
duration: json['duration'],
|
||||
date: json['date'],
|
||||
time: json['time'],
|
||||
status: json['status'],
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'scene_state.dart';
|
||||
|
||||
class SceneProvider extends ChangeNotifier {
|
||||
final state = SceneState();
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
class SceneState {
|
||||
|
||||
SceneState() {
|
||||
// init some variables
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import 'scene_provider.dart';
|
||||
|
||||
class ScenePage extends StatelessWidget {
|
||||
const ScenePage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ChangeNotifierProvider(
|
||||
create: (BuildContext context) => SceneProvider(),
|
||||
builder: (context, child) => const Center(
|
||||
child: Text('Scene Page'),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:syncrow_app/features/scene/bloc/scene_cubit.dart';
|
||||
import 'package:syncrow_app/features/scene/view/widgets/scene_view_no_scenes.dart';
|
||||
|
||||
class SceneView extends StatelessWidget {
|
||||
const SceneView({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BlocProvider(
|
||||
create: (BuildContext context) => SceneCubit(),
|
||||
child: BlocBuilder<SceneCubit, SceneState>(
|
||||
builder: (context, state) {
|
||||
return state is SceneLoading
|
||||
? const Center(child: CircularProgressIndicator())
|
||||
: const SceneViewNoScenes();
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gap/gap.dart';
|
||||
import 'package:syncrow_app/features/shared_widgets/default_text_button.dart';
|
||||
import 'package:syncrow_app/utils/resource_manager/assets_manager.dart';
|
||||
|
||||
class SceneViewNoScenes extends StatelessWidget {
|
||||
const SceneViewNoScenes({
|
||||
super.key,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Center(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 40),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Image.asset(
|
||||
ImageManager.automation,
|
||||
scale: 1,
|
||||
opacity: const AlwaysStoppedAnimation(.5),
|
||||
width: 140,
|
||||
),
|
||||
const Gap(15),
|
||||
const Text(
|
||||
'Home automation saves your time and effort by automating routine tasks.',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(color: Colors.grey),
|
||||
),
|
||||
const Gap(20),
|
||||
const DefaultTextButton(
|
||||
text: 'Create Scene',
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user