neom_core

Core for Open Neom Modules. neom_core serves as the foundational package for the entire Open Neom ecosystem. It is meticulously designed to encapsulate the absolute essentials: the central business logic, fundamental data models, and the universal abstract interfaces (services) that define the contracts for communication across all other modules. This package is key to embodying the foundational principles for integrating neuroscience and biofeedback within the platform's robust, modular, and testable architecture.

🌟 Features & Responsibilities neom_core is the backbone of the Open Neom platform, responsible for: β€’ Universal Models & Enums: Defining core data models (e.g., AppUser, AppProfile, Post base structure) and universal enums (e.g., MediaType, MediaUploadDestination, UserRole, SubscriptionLevel) that are utilized across the entire Neom ecosystem. β€’ Core Services Interfaces (Use Cases): Providing abstract interfaces (services) for fundamental functionalities that are consumed by multiple modules. This adheres to the Dependency Inversion Principle (DIP), ensuring minimal coupling and facilitating flexible implementations. β€’ Infrastructure Utilities: Offering essential, application-wide utilities for concerns such as logging (AppConfig), application routing constants (AppRouteConstants), and common Firebase-related constants. β€’ Base Implementations: Housing the core implementations for foundational services like UserController (implementing UserService) and AppHiveController (implementing AppHiveService), which are then registered and injected at the application's composition root. β€’ Firebase Integration (Core Services): Managing the foundational Firebase SDKs (firebase_core, cloud_firestore, cloud_functions, firebase_storage, firebase_auth, firebase_messaging, firebase_crashlytics) that provide essential backend services for data persistence, cloud functions, and messaging. β€’ Authentication Integration: Incorporating core authentication SDKs (firebase_auth, google_sign_in, sign_in_with_apple, googleapis_auth) to provide the fundamental layers for user authentication flows across the ecosystem. β€’ Location & Maps Integration: Providing core functionalities and models related to geolocation (geolocator, geocoding) and map services (Maps_flutter, google_api_headers, neom_maps_services, neom_google_places). β€’ In-App Purchase Integration: Handling the foundational integration for platform-specific in-app purchase functionalities. β€’ Dynamic Configuration & Flavor Management (AppConfig & AppProperties): - AppConfig: Manages application-wide configurations, including the active application flavor (AppInUse), current app versioning, and logic for selecting the appropriate root page based on authentication status or version compatibility. It centralizes initialization flows and provides a global logger instance. - AppProperties: Facilitates the loading of dynamic properties from JSON assets (e.g., properties.json, service_account.json). This allows for granular, flavor-specific data such as API keys, external URLs, contact information, and other configurable values to be managed outside the codebase, enabling modifications without requiring code changes or recompilation for different application flavors.

πŸ“¦ Installation Add neom_core as a Git dependency in your pubspec.yaml file:

dependencies: neom_core: git: url: https://github.com/Open-Neom/neom_core.git

Then, run flutter pub get in your project's root directory.

πŸš€ Usage As a foundational package, neom_core is primarily consumed by other domain-specific Neom modules (e.g., neom_auth, neom_home, neom_posts) and the main application (neom_app). It is not typically used to build direct UI components but rather provides the underlying contracts and data.

Example of consuming a core service interface (e.g., in neom_posts): Dart // In a controller from another module (e.g., neom_posts) import 'package:get/get.dart'; import 'package:neom_core/core/domain/use_cases/user_service.dart'; // Import the interface from neom_core

class MyFeatureController extends GetxController { // Inject the UserService interface final UserService _userService = Get.find

void displayUserName() {
    print("Current User: ${_userService.user.name}");
}

}

Registering the implementation at the Composition Root (e.g., in neom_app/lib/root_binding.dart): Dart // In your main application's RootBinding import 'package:get/get.dart'; import 'package:neom_core/core/domain/use_cases/user_service.dart'; // Interface from neom_core import 'package:neom_core/core/data/implementations/user_controller.dart'; // Implementation from neom_core

class RootBinding extends Bindings { @override List

πŸ› οΈ Dependencies neom_core relies on the following key packages to provide its foundational functionalities: β€’ flutter: The Flutter SDK. β€’ get: For state management and robust dependency injection. β€’ Firebase SDKs: firebase_core, cloud_firestore, cloud_functions, firebase_storage, firebase_auth, firebase_messaging, firebase_crashlytics for comprehensive backend services. β€’ Authentication: google_sign_in, sign_in_with_apple, googleapis_auth for various user authentication methods. β€’ System Utilities: logger, url_launcher, http, hive_flutter, path_provider, rflutter_alert, enum_to_string, package_info_plus, upgrader, permission_handler. β€’ Location & Maps: geolocator, geocoding, Maps_flutter, google_api_headers, neom_maps_services, neom_google_places. β€’ Networking & Caching: cached_network_image. β€’ In-App Purchases: in_app_purchase.

🀝 Contributing We welcome contributions to neom_core! Please refer to the main Open Neom repository for detailed contribution guidelines and code of conduct.

πŸ“„ License This project is licensed under the Apache License, Version 2.0, January 2004. See the LICENSE file for details.

Libraries

app_config
app_properties
data/api_services/admob/ad_manager
data/api_services/push_notification/firebase_messaging_calls
data/api_services/wordpress/blog_entries_api
data/firestore/activity_feed_firestore
data/firestore/app_info_firestore
data/firestore/app_media_item_firestore
data/firestore/app_release_item_firestore
data/firestore/app_upload_firestore
data/firestore/band_firestore
data/firestore/bank_firestore
data/firestore/constants/app_firestore_collection_constants
data/firestore/constants/app_firestore_constants
data/firestore/coupon_firestore
data/firestore/event_firestore
data/firestore/facility_firestore
data/firestore/frequency_firestore
data/firestore/genre_firestore
data/firestore/hashtag_firestore
data/firestore/inbox_firestore
data/firestore/instrument_firestore
data/firestore/itemlist_firestore
data/firestore/mate_firestore
data/firestore/nupale_session_firestore
data/firestore/order_firestore
data/firestore/place_firestore
data/firestore/post_firestore
data/firestore/product_firestore
data/firestore/profile_firestore
data/firestore/report_firestore
data/firestore/request_firestore
data/firestore/subscription_plan_firestore
data/firestore/transaction_firestore
data/firestore/user_firestore
data/firestore/user_subscription_firestore
data/implementations/app_hive_controller
data/implementations/app_initialization_controller
data/implementations/geolocator_controller
data/implementations/maps_controller
data/implementations/mate_controller
data/implementations/neom_stopwatch
data/implementations/report_controller
data/implementations/subscription_controller
data/implementations/user_controller
domain/model/activity_feed
domain/model/address
domain/model/app_coupon
domain/model/app_info
domain/model/app_item
domain/model/app_media_item
domain/model/app_order
domain/model/app_physical_item
domain/model/app_product
domain/model/app_profile
domain/model/app_release_item
domain/model/app_request
domain/model/app_transaction
domain/model/app_user
domain/model/band
domain/model/band_fulfillment
domain/model/band_member
domain/model/booking
domain/model/comment_reply
domain/model/event
domain/model/event_activity
domain/model/event_offer
domain/model/event_type_model
domain/model/facility
domain/model/facility_commodity
domain/model/genre
domain/model/hashtag
domain/model/inbox
domain/model/inbox_message
domain/model/instrument
domain/model/instrument_fulfillment
domain/model/invoice
domain/model/item_found_in_list
domain/model/item_list
domain/model/neom/chamber
domain/model/neom/chamber_preset
domain/model/neom/neom_chamber
domain/model/neom/neom_frequency
domain/model/neom/neom_parameter
domain/model/nupale/nupale_session
domain/model/place
domain/model/place_commodity
domain/model/post
domain/model/post_comment
domain/model/post_event
domain/model/price
domain/model/report
domain/model/review
domain/model/stripe/stripe_price
domain/model/stripe/stripe_product
domain/model/stripe/stripe_session
domain/model/subscription_plan
domain/model/user_locations
domain/model/user_subscription
domain/model/wallet
domain/model/wordpress/blog_entry
domain/repository/activity_feed_repository
domain/repository/analytics_repository
domain/repository/app_info_repository
domain/repository/app_media_item_repository
domain/repository/app_release_item_repository
domain/repository/app_upload_repository
domain/repository/band_repository
domain/repository/bank_repository
domain/repository/chamber_repository
domain/repository/coupon_repository
domain/repository/event_repository
domain/repository/facility_repository
domain/repository/frequency_repository
domain/repository/genre_repository
domain/repository/hashtag_repository
domain/repository/inbox_repository
domain/repository/instrument_repository
domain/repository/invoice_repository
domain/repository/itemlist_repository
domain/repository/job_repository
domain/repository/mate_repository
domain/repository/order_repository
domain/repository/place_repository
domain/repository/post_repository
domain/repository/product_repository
domain/repository/profile_instruments_repository
domain/repository/profile_repository
domain/repository/report_repository
domain/repository/request_repository
domain/repository/transaction_repository
domain/repository/user_repository
domain/repository/wallet_repository
domain/use_cases/app_drawer_service
domain/use_cases/app_hive_service
domain/use_cases/audio_handler_service
domain/use_cases/audio_lite_player_service
domain/use_cases/audio_player_invoker_service
domain/use_cases/band_details_service
domain/use_cases/band_service
domain/use_cases/bank_service
domain/use_cases/blog_editor_service
domain/use_cases/camera_service
domain/use_cases/chamber_service
domain/use_cases/download_service
domain/use_cases/event_details_service
domain/use_cases/event_service
domain/use_cases/frequency_service
domain/use_cases/genre_service
domain/use_cases/geolocator_service
domain/use_cases/google_book_gateway_service
domain/use_cases/home_service
domain/use_cases/image_editor_service
domain/use_cases/inbox_service
domain/use_cases/instrument_service
domain/use_cases/itemlist_service
domain/use_cases/login_service
domain/use_cases/maps_service
domain/use_cases/mate_service
domain/use_cases/media_player_service
domain/use_cases/media_upload_service
domain/use_cases/miniplayer_service
domain/use_cases/notification_service
domain/use_cases/nupale_session_service
domain/use_cases/onboarding_service
domain/use_cases/payment_gateway_service
domain/use_cases/post_upload_service
domain/use_cases/profile_service
domain/use_cases/release_upload_service
domain/use_cases/report_service
domain/use_cases/request_service
domain/use_cases/search_service
domain/use_cases/settings_service
domain/use_cases/stripe_api_service
domain/use_cases/stripe_gateway_service
domain/use_cases/subscription_service
domain/use_cases/timeline_service
domain/use_cases/user_service
domain/use_cases/wallet_service
domain/use_cases/woo_gateway_service
domain/use_cases/woo_media_service
ui/root_page
utils/constants/app_facebook_constants
utils/constants/app_google_utilities
utils/constants/app_hive_constants
utils/constants/app_payment_constants
utils/constants/app_route_constants
utils/constants/app_shared_preference_constants
utils/constants/app_youtube_constants
utils/constants/core_constants
utils/constants/data_assets
utils/constants/url_constants
utils/core_utilities
utils/enums/activity_feed_type
utils/enums/add_substract
utils/enums/app_currency
utils/enums/app_file_from
utils/enums/app_hive_box
utils/enums/app_in_use
utils/enums/app_item_size
utils/enums/app_item_state
utils/enums/app_item_type
utils/enums/app_locale
utils/enums/app_media_source
utils/enums/app_media_type
utils/enums/app_release_item_type
utils/enums/auth_status
utils/enums/band_member_role
utils/enums/booking_status
utils/enums/cancellation_reason
utils/enums/chamber_preset_state
utils/enums/coupon_type
utils/enums/event_action
utils/enums/event_status
utils/enums/event_type
utils/enums/facilitator_type
utils/enums/inbox_room_type
utils/enums/instrument_level
utils/enums/itemlist_type
utils/enums/media_item_type
utils/enums/media_search_type
utils/enums/media_type
utils/enums/media_upload_destination
utils/enums/owner_type
utils/enums/place_type
utils/enums/post_type
utils/enums/product_type
utils/enums/profile_type
utils/enums/push_notification_type
utils/enums/reference_type
utils/enums/release_status
utils/enums/release_type
utils/enums/report_type
utils/enums/request_decision
utils/enums/request_type
utils/enums/scale_degree
utils/enums/search_type
utils/enums/signed_in_with
utils/enums/sort_user
utils/enums/subscription_level
utils/enums/subscription_status
utils/enums/transaction_status
utils/enums/transaction_type
utils/enums/usage_reason
utils/enums/user_role
utils/enums/validation_error
utils/enums/verification_level
utils/enums/vocal_type
utils/enums/wallet_status
utils/position_utilities
utils/validator