Skip to content

stapesai/StapesHome

Repository files navigation

StapesHome App

Folder Structure

lib
β”œβ”€β”€ core
β”‚   β”œβ”€β”€ common
β”‚   β”‚   β”œβ”€β”€ bloc
β”‚   β”‚   β”œβ”€β”€ skeletons
β”‚   β”‚   └── widgets
β”‚   β”‚       β”œβ”€β”€ button.dart
β”‚   β”‚       β”œβ”€β”€ input
β”‚   β”‚       β”‚   β”œβ”€β”€ dropdown.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ password.dart
β”‚   β”‚       β”‚   └── textfield.dart
β”‚   β”‚       β”œβ”€β”€ iot
β”‚   β”‚       β”œβ”€β”€ popup.dart
β”‚   β”‚       β”œβ”€β”€ snackbar.dart
β”‚   β”‚       └── text_hyperlink.dart
β”‚   β”œβ”€β”€ config
β”‚   β”‚   └── config.dart
β”‚   β”œβ”€β”€ constants
β”‚   β”‚   β”œβ”€β”€ api_routes.dart
β”‚   β”‚   β”œβ”€β”€ app_route_constants.dart
β”‚   β”‚   └── logging_constants.dart
β”‚   β”œβ”€β”€ database
β”‚   β”‚   └── sqlite_service.dart
β”‚   β”œβ”€β”€ error
β”‚   β”‚   β”œβ”€β”€ exceptions.dart
β”‚   β”‚   └── failures.dart
β”‚   β”œβ”€β”€ logging
β”‚   β”‚   β”œβ”€β”€ custom_logger.dart
β”‚   β”‚   └── logging_config.dart
β”‚   β”œβ”€β”€ models
β”‚   β”‚   β”œβ”€β”€ device_model.dart
β”‚   β”‚   β”œβ”€β”€ fav_devices_model.dart
β”‚   β”‚   β”œβ”€β”€ floor_model.dart
β”‚   β”‚   β”œβ”€β”€ no_params.dart
β”‚   β”‚   β”œβ”€β”€ node_model.dart
β”‚   β”‚   β”œβ”€β”€ room_model.dart
β”‚   β”‚   β”œβ”€β”€ user_model.dart
β”‚   β”‚   β”œβ”€β”€ user_model.g.dart
β”‚   β”‚   β”œβ”€β”€ user_session_model.dart
β”‚   β”‚   └── user_session_model.g.dart
β”‚   β”œβ”€β”€ network
β”‚   β”‚   β”œβ”€β”€ dio_client.dart
β”‚   β”‚   β”œβ”€β”€ dio_interceptors.dart
β”‚   β”‚   β”œβ”€β”€ http_client.dart
β”‚   β”‚   └── network_info.dart
β”‚   β”œβ”€β”€ router
β”‚   β”‚   └── app_router.dart
β”‚   β”œβ”€β”€ theme
β”‚   β”‚   β”œβ”€β”€ app_colors.dart
β”‚   β”‚   β”œβ”€β”€ app_font_sizes.dart
β”‚   β”‚   β”œβ”€β”€ app_padding.dart
β”‚   β”‚   └── custom_gradient_and_padding_container.dart
β”‚   β”œβ”€β”€ usecase
β”‚   β”‚   └── usecase.dart
β”‚   β”œβ”€β”€ utils
β”‚   β”‚   └── repository_exceptions_helper.dart
β”‚   β”œβ”€β”€ validators
β”‚   β”‚   β”œβ”€β”€ date_validator.dart
β”‚   β”‚   └── email_regex_validator.dart
β”‚   └── websocket
β”‚       β”œβ”€β”€ websocket_bloc.dart
β”‚       β”œβ”€β”€ websocket_event.dart
β”‚       β”œβ”€β”€ websocket_messages_models.dart
β”‚       β”œβ”€β”€ websocket_service.dart
β”‚       └── websocket_state.dart
β”œβ”€β”€ features
β”‚   β”œβ”€β”€ auth
β”‚   β”‚   β”œβ”€β”€ data
β”‚   β”‚   β”‚   β”œβ”€β”€ datasources
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ local
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ auth_local_datasource.dart
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ device_info_local_datasource.dart
β”‚   β”‚   β”‚   β”‚   β”‚   └── fcm_token_local_datasource.dart
β”‚   β”‚   β”‚   β”‚   └── remote
β”‚   β”‚   β”‚   β”‚       β”œβ”€β”€ auth_remote_datasource.dart
β”‚   β”‚   β”‚   β”‚       └── fcm_token_remote_datasource.dart
β”‚   β”‚   β”‚   β”œβ”€β”€ models
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ device_info_model.dart
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ fcm_token_api_params.dart
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ forgot_password_api_parms.dart
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ login_api_parms.dart
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ otp_verification_api_parms.dart
β”‚   β”‚   β”‚   β”‚   └── signup_api_parms.dart
β”‚   β”‚   β”‚   └── repositories
β”‚   β”‚   β”‚       β”œβ”€β”€ auth_abs_class_impl.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ device_info_abs_class_impl.dart
β”‚   β”‚   β”‚       └── fcm_token_repo_abs_class_impl.dart
β”‚   β”‚   β”œβ”€β”€ domain
β”‚   β”‚   β”‚   β”œβ”€β”€ repository
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ auth_abs_class.dart
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ device_info_abs_class.dart
β”‚   β”‚   β”‚   β”‚   └── fcm_token_repo_abs_class.dart
β”‚   β”‚   β”‚   └── usecases
β”‚   β”‚   β”‚       β”œβ”€β”€ device_info_usecase.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ fcm_token_usecase.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ forgot_password_usecase.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ login_usecase.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ otp_verification_usecase.dart
β”‚   β”‚   β”‚       └── signup_usecase.dart
β”‚   β”‚   └── presentation
β”‚   β”‚       β”œβ”€β”€ blocs
β”‚   β”‚       β”‚   β”œβ”€β”€ forgot_password
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ forgot_password_email_input_bloc.dart
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ forgot_password_email_input_event.dart
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ forgot_password_email_input_state.dart
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ forgot_password_otp_verification_bloc.dart
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ forgot_password_otp_verification_event.dart
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ forgot_password_otp_verification_state.dart
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ forgot_password_reset_password_bloc.dart
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ forgot_password_reset_password_event.dart
β”‚   β”‚       β”‚   β”‚   └── forgot_password_reset_password_state.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ login
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ login_email_input_bloc.dart
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ login_email_input_event.dart
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ login_email_input_state.dart
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ login_otp_verification_bloc.dart
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ login_otp_verification_event.dart
β”‚   β”‚       β”‚   β”‚   └── login_otp_verification_state.dart
β”‚   β”‚       β”‚   └── signup
β”‚   β”‚       β”‚       β”œβ”€β”€ sign_up_email_input_bloc.dart
β”‚   β”‚       β”‚       β”œβ”€β”€ sign_up_email_input_event.dart
β”‚   β”‚       β”‚       β”œβ”€β”€ sign_up_email_input_state.dart
β”‚   β”‚       β”‚       β”œβ”€β”€ signup_create_new_password_bloc.dart
β”‚   β”‚       β”‚       β”œβ”€β”€ signup_create_new_password_event.dart
β”‚   β”‚       β”‚       β”œβ”€β”€ signup_create_new_password_state.dart
β”‚   β”‚       β”‚       β”œβ”€β”€ signup_details_form_bloc.dart
β”‚   β”‚       β”‚       β”œβ”€β”€ signup_details_form_event.dart
β”‚   β”‚       β”‚       β”œβ”€β”€ signup_details_form_state.dart
β”‚   β”‚       β”‚       β”œβ”€β”€ signup_otp_verification_bloc.dart
β”‚   β”‚       β”‚       β”œβ”€β”€ signup_otp_verification_event.dart
β”‚   β”‚       β”‚       └── signup_otp_verification_state.dart
β”‚   β”‚       β”œβ”€β”€ pages
β”‚   β”‚       β”‚   β”œβ”€β”€ forgot_password_email_input.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ forgot_password_otp_verification.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ forgot_password_reset_password.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ login_email_input.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ login_otp_verification.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ signup_create_new_password.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ signup_details_form.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ signup_email_input.dart
β”‚   β”‚       β”‚   └── signup_otp_verification.dart
β”‚   β”‚       └── widgets
β”‚   β”‚           └── otp_input_widget.dart
β”‚   β”œβ”€β”€ common
β”‚   β”‚   └── presentation
β”‚   β”‚       └── widgets
β”‚   β”‚           β”œβ”€β”€ hold_bottom_sheet_widget.dart
β”‚   β”‚           β”œβ”€β”€ iot
β”‚   β”‚           β”‚   β”œβ”€β”€ fan_widget.dart
β”‚   β”‚           β”‚   β”œβ”€β”€ light_widget.dart
β”‚   β”‚           β”‚   └── node_widget.dart
β”‚   β”‚           └── skeletons
β”‚   β”‚               β”œβ”€β”€ iot_device_skel.dart
β”‚   β”‚               └── node_skel.dart
β”‚   β”œβ”€β”€ dev
β”‚   β”‚   β”œβ”€β”€ data
β”‚   β”‚   └── presentation
β”‚   β”‚       β”œβ”€β”€ pages
β”‚   β”‚       β”‚   β”œβ”€β”€ dev_components_test_page.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ dev_floor_room_sel.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ dev_test_page.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ dev_user_details_show.dart
β”‚   β”‚       β”‚   └── dev_websocket_messages_test.dart
β”‚   β”‚       └── widgets
β”‚   β”‚           └── websocket_message.dart
β”‚   β”œβ”€β”€ devices
β”‚   β”‚   β”œβ”€β”€ data
β”‚   β”‚   β”‚   β”œβ”€β”€ datasources
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ local
β”‚   β”‚   β”‚   β”‚   β”‚   └── devices_local_datasource.dart
β”‚   β”‚   β”‚   β”‚   └── remote
β”‚   β”‚   β”‚   β”‚       └── devices_remote_datasource.dart
β”‚   β”‚   β”‚   β”œβ”€β”€ models
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ create_device_api_param.dart
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ delete_device_api_param.dart
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ get_devices_api_param.dart
β”‚   β”‚   β”‚   β”‚   └── update_device_api_param.dart
β”‚   β”‚   β”‚   └── repositories
β”‚   β”‚   β”‚       └── devices_repository_impl.dart
β”‚   β”‚   β”œβ”€β”€ domain
β”‚   β”‚   β”‚   β”œβ”€β”€ repositories
β”‚   β”‚   β”‚   β”‚   └── devices_repository.dart
β”‚   β”‚   β”‚   └── usecases
β”‚   β”‚   β”‚       β”œβ”€β”€ create_device_usecase.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ delete_device_usecase.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ get_all_devices_usecase.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ get_devices_by_node_id_usecase.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ get_devices_by_room_id_usecase.dart
β”‚   β”‚   β”‚       └── update_device_usecase.dart
β”‚   β”‚   └── presentation
β”‚   β”‚       └── pages
β”‚   β”‚           └── devices.dart
β”‚   β”œβ”€β”€ fav_devices
β”‚   β”‚   β”œβ”€β”€ data
β”‚   β”‚   β”‚   β”œβ”€β”€ datasources
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ local
β”‚   β”‚   β”‚   β”‚   β”‚   └── fav_device_local_datasource.dart
β”‚   β”‚   β”‚   β”‚   └── remote
β”‚   β”‚   β”‚   β”‚       └── fav_device_remote_datasource.dart
β”‚   β”‚   β”‚   β”œβ”€β”€ models
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ create_fav_devices_api_params.dart
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ delete_fav_devices_api_params.dart
β”‚   β”‚   β”‚   β”‚   └── get_fav_devices_api_params.dart
β”‚   β”‚   β”‚   └── repositories
β”‚   β”‚   β”‚       └── fav_device_repository_impl.dart
β”‚   β”‚   └── domain
β”‚   β”‚       β”œβ”€β”€ repositories
β”‚   β”‚       β”‚   └── fav_device_repository.dart
β”‚   β”‚       └── usecases
β”‚   β”‚           β”œβ”€β”€ create_fav_devices.dart
β”‚   β”‚           β”œβ”€β”€ get_fav_devices.dart
β”‚   β”‚           └── remove_fav_devices.dart
β”‚   β”œβ”€β”€ floor_room_sel
β”‚   β”‚   └── presentation
β”‚   β”‚       β”œβ”€β”€ bloc
β”‚   β”‚       β”‚   β”œβ”€β”€ floor
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ floor_bloc.dart
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ floor_event.dart
β”‚   β”‚       β”‚   β”‚   └── floor_state.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ floor_room_sel_bloc.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ floor_room_sel_event.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ floor_room_sel_state.dart
β”‚   β”‚       β”‚   └── room
β”‚   β”‚       β”‚       β”œβ”€β”€ room_bloc.dart
β”‚   β”‚       β”‚       β”œβ”€β”€ room_event.dart
β”‚   β”‚       β”‚       └── room_state.dart
β”‚   β”‚       β”œβ”€β”€ skeletons
β”‚   β”‚       β”‚   └── floor_room_name_skel.dart
β”‚   β”‚       └── widgets
β”‚   β”‚           β”œβ”€β”€ floor_room_name_button.dart
β”‚   β”‚           β”œβ”€β”€ floor_room_sel_widget.dart
β”‚   β”‚           └── plus_button.dart
β”‚   β”œβ”€β”€ floors
β”‚   β”‚   β”œβ”€β”€ data
β”‚   β”‚   β”‚   β”œβ”€β”€ datasources
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ local
β”‚   β”‚   β”‚   β”‚   β”‚   └── floors_local_datasource.dart
β”‚   β”‚   β”‚   β”‚   └── remote
β”‚   β”‚   β”‚   β”‚       └── floors_remote_datasource.dart
β”‚   β”‚   β”‚   β”œβ”€β”€ models
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ create_floor_api_param.dart
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ delete_floor_api_param.dart
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ get_floors_api_param.dart
β”‚   β”‚   β”‚   β”‚   └── update_floor_api_param.dart
β”‚   β”‚   β”‚   └── repositories
β”‚   β”‚   β”‚       └── floor_repository_impl.dart
β”‚   β”‚   β”œβ”€β”€ domain
β”‚   β”‚   β”‚   β”œβ”€β”€ repository
β”‚   β”‚   β”‚   β”‚   └── floor_repository.dart
β”‚   β”‚   β”‚   └── usecases
β”‚   β”‚   β”‚       β”œβ”€β”€ create_floor_usecase.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ delete_floor_usecase.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ get_floors_usecase.dart
β”‚   β”‚   β”‚       └── update_floor_usecase.dart
β”‚   β”‚   └── presentation
β”‚   β”‚       β”œβ”€β”€ bloc
β”‚   β”‚       β”‚   β”œβ”€β”€ create_floor_bloc.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ create_floor_event.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ create_floor_state.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ delete_floor_bloc.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ delete_floor_event.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ delete_floor_state.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ edit_floor_bloc.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ edit_floor_event.dart
β”‚   β”‚       β”‚   └── edit_floor_state.dart
β”‚   β”‚       β”œβ”€β”€ pages
β”‚   β”‚       β”‚   └── create_floor_page.dart
β”‚   β”‚       └── widgets
β”‚   β”‚           β”œβ”€β”€ create_floor_widget.dart
β”‚   β”‚           β”œβ”€β”€ delete_floor_widget.dart
β”‚   β”‚           └── edit_floor_widget.dart
β”‚   β”œβ”€β”€ home
β”‚   β”‚   └── presentation
β”‚   β”‚       └── pages
β”‚   β”‚           └── home.dart
β”‚   β”œβ”€β”€ iot_provisioning
β”‚   β”‚   β”œβ”€β”€ data
β”‚   β”‚   β”‚   β”œβ”€β”€ datasources
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ local
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ ble_local_datasource.dart
β”‚   β”‚   β”‚   β”‚   β”‚   └── wifi_local_datasource.dart
β”‚   β”‚   β”‚   β”‚   └── remote
β”‚   β”‚   β”‚   β”‚       └── .gitkeep
β”‚   β”‚   β”‚   β”œβ”€β”€ models
β”‚   β”‚   β”‚   β”‚   └── node_hw_info.dart
β”‚   β”‚   β”‚   └── repository
β”‚   β”‚   β”‚       └── iot_provisioning_repo_imp.dart
β”‚   β”‚   β”œβ”€β”€ domain
β”‚   β”‚   β”‚   β”œβ”€β”€ repository
β”‚   β”‚   β”‚   β”‚   └── iot_provisioning_repo.dart
β”‚   β”‚   β”‚   └── usecase
β”‚   β”‚   β”‚       β”œβ”€β”€ iot_provisioning_ble_check_wifi_credentials.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ iot_provisioning_ble_get_hw_info.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ iot_provisioning_ble_pair_node.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ iot_provisioning_ble_upload_config.dart
β”‚   β”‚   β”‚       └── iot_provisioning_wifi_get_available_nwtworks.dart
β”‚   β”‚   └── presentation
β”‚   β”‚       β”œβ”€β”€ bloc
β”‚   β”‚       β”‚   β”œβ”€β”€ iot_provisioning_bloc.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ iot_provisioning_event.dart
β”‚   β”‚       β”‚   └── iot_provisioning_state.dart
β”‚   β”‚       β”œβ”€β”€ old
β”‚   β”‚       β”‚   β”œβ”€β”€ enter_wifi_credentials.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ name_your_node.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ provisioning.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ select_node_options.dart
β”‚   β”‚       β”‚   └── wifi_credentials.dart
β”‚   β”‚       β”œβ”€β”€ pages
β”‚   β”‚       β”‚   └── iot_provisioning.dart
β”‚   β”‚       └── widgets
β”‚   β”‚           β”œβ”€β”€ enter_wifi_cred.dart
β”‚   β”‚           β”œβ”€β”€ name_your_node.dart
β”‚   β”‚           └── select_node_location.dart
β”‚   β”œβ”€β”€ navigation
β”‚   β”‚   β”œβ”€β”€ data
β”‚   β”‚   β”œβ”€β”€ domain
β”‚   β”‚   └── presentation
β”‚   β”‚       β”œβ”€β”€ blocs
β”‚   β”‚       β”‚   β”œβ”€β”€ navigation_bloc.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ navigation_event.dart
β”‚   β”‚       β”‚   └── navigation_state.dart
β”‚   β”‚       β”œβ”€β”€ mixin
β”‚   β”‚       β”‚   β”œβ”€β”€ keep_alive_mixin.dart
β”‚   β”‚       β”‚   └── preload_page_view_mixin.dart
β”‚   β”‚       β”œβ”€β”€ pages
β”‚   β”‚       β”‚   └── navigation_screen.dart
β”‚   β”‚       └── widgets
β”‚   β”‚           └── custom_navigation_bar.dart
β”‚   β”œβ”€β”€ nodes
β”‚   β”‚   β”œβ”€β”€ data
β”‚   β”‚   β”‚   β”œβ”€β”€ datasources
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ local
β”‚   β”‚   β”‚   β”‚   β”‚   └── nodes_local_datasource.dart
β”‚   β”‚   β”‚   β”‚   └── remote
β”‚   β”‚   β”‚   β”‚       └── nodes_remote_datasource.dart
β”‚   β”‚   β”‚   β”œβ”€β”€ models
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ complete_node_pairing_api_param.dart
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ delete_node_api_param.dart
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ get_nodes_by_room_id_api_param.dart
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ request_node_pairing_api_param.dart
β”‚   β”‚   β”‚   β”‚   └── update_node_api_param.dart
β”‚   β”‚   β”‚   └── repositories
β”‚   β”‚   β”‚       └── node_repository_impl.dart
β”‚   β”‚   β”œβ”€β”€ domain
β”‚   β”‚   β”‚   β”œβ”€β”€ repository
β”‚   β”‚   β”‚   β”‚   └── node_repository.dart
β”‚   β”‚   β”‚   └── usecases
β”‚   β”‚   β”‚       β”œβ”€β”€ delete_node_usecase.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ get_nodes_by_room_id_usecase.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ pair_node_usecase.dart
β”‚   β”‚   β”‚       └── update_node_usecase.dart
β”‚   β”‚   └── presentation
β”‚   β”‚       └── pages
β”‚   β”‚           └── nodes.dart
β”‚   β”œβ”€β”€ onboarding
β”‚   β”‚   β”œβ”€β”€ data
β”‚   β”‚   β”œβ”€β”€ domain
β”‚   β”‚   └── presentation
β”‚   β”‚       β”œβ”€β”€ bloc
β”‚   β”‚       └── pages
β”‚   β”‚           └── splash_screen.dart
β”‚   β”œβ”€β”€ rooms
β”‚   β”‚   β”œβ”€β”€ data
β”‚   β”‚   β”‚   β”œβ”€β”€ datasources
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ local
β”‚   β”‚   β”‚   β”‚   β”‚   └── rooms_local_datasource.dart
β”‚   β”‚   β”‚   β”‚   └── remote
β”‚   β”‚   β”‚   β”‚       └── rooms_remote_datasource.dart
β”‚   β”‚   β”‚   β”œβ”€β”€ models
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ create_room_api_param.dart
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ delete_room_api_param.dart
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ get_rooms_api_param.dart
β”‚   β”‚   β”‚   β”‚   └── update_room_api_param.dart
β”‚   β”‚   β”‚   └── repositories
β”‚   β”‚   β”‚       └── room_repository_impl.dart
β”‚   β”‚   β”œβ”€β”€ domain
β”‚   β”‚   β”‚   β”œβ”€β”€ repository
β”‚   β”‚   β”‚   β”‚   └── room_repository.dart
β”‚   β”‚   β”‚   └── usecases
β”‚   β”‚   β”‚       β”œβ”€β”€ create_room_usecase.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ delete_room_usecase.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ get_rooms_usecase.dart
β”‚   β”‚   β”‚       └── update_room_usecase.dart
β”‚   β”‚   └── presentation
β”‚   β”‚       β”œβ”€β”€ bloc
β”‚   β”‚       β”‚   β”œβ”€β”€ create_room_bloc.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ create_room_event.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ create_room_state.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ delete_room_bloc.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ delete_room_event.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ delete_room_state.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ edit_room_bloc.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ edit_room_event.dart
β”‚   β”‚       β”‚   └── edit_room_state.dart
β”‚   β”‚       β”œβ”€β”€ pages
β”‚   β”‚       β”‚   └── create_room_page.dart
β”‚   β”‚       └── widgets
β”‚   β”‚           β”œβ”€β”€ create_room_widget.dart
β”‚   β”‚           β”œβ”€β”€ delete_room_widget.dart
β”‚   β”‚           └── edit_room_widget.dart
β”‚   β”œβ”€β”€ scanner
β”‚   β”‚   β”œβ”€β”€ data
β”‚   β”‚   β”‚   └── models
β”‚   β”‚   β”‚       β”œβ”€β”€ pair_iot_node_qr_model.dart
β”‚   β”‚   β”‚       β”œβ”€β”€ pair_tv_qr_model.dart
β”‚   β”‚   β”‚       └── parse_qr_data_model.dart
β”‚   β”‚   └── presentation
β”‚   β”‚       β”œβ”€β”€ bloc
β”‚   β”‚       β”‚   β”œβ”€β”€ qr_scanner_bloc.dart
β”‚   β”‚       β”‚   β”œβ”€β”€ qr_scanner_event.dart
β”‚   β”‚       β”‚   └── qr_scanner_state.dart
β”‚   β”‚       β”œβ”€β”€ pages
β”‚   β”‚       β”‚   └── qr_scanner.dart
β”‚   β”‚       └── widgets
β”‚   β”‚           β”œβ”€β”€ scan_instructions.dart
β”‚   β”‚           └── scanner_overlay.dart
β”‚   β”œβ”€β”€ settings
β”‚   β”‚   β”œβ”€β”€ data
β”‚   β”‚   β”œβ”€β”€ domain
β”‚   β”‚   └── presentation
β”‚   └── tv_provisioning
β”‚       └── presentation
β”‚           └── pages
β”‚               └── tv_provisioning.dart
β”œβ”€β”€ firebase_options.dart
β”œβ”€β”€ main.dart
└── service_locator.dart

Layers

  1. Core: Contains code that is used across the entire application.
  2. Data: Responsible for data retrieval and storage.
  3. Domain: Contains business logic and defines the core functionality of the app.
  4. Presentation: Handles UI and user interactions.

Coding Standards

  1. Use camelCase for variable and function names.
  2. Use PascalCase for class names.
  3. Add a comment describing each variable at the top of the file.
  4. Add a function description comment at the start of each function.
  5. Add a file description comment at the top of each file.
  6. Use meaningful and descriptive names for variables, functions, and classes.
  7. Keep functions small and focused on a single responsibility.
  8. Use const and final keywords where appropriate.
  9. Follow the DRY (Don't Repeat Yourself) principle.

Example File Header

// File: example_file.dart
// Description: This file contains the ExampleClass which demonstrates...

import 'package:flutter/material.dart';

// Define constants and variables here
const int MAX_RETRY_COUNT = 3; // Maximum number of retry attempts

class ExampleClass {
  // Class implementation
}

Example Function Documentation

/// Fetches user data from the API
///
/// Parameters:
/// - userId: The unique identifier of the user
///
/// Returns:
/// A Future that resolves to a User object if successful, or null if an error occurs
Future<User?> fetchUserData(String userId) async {
  // Function implementation
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 5