Dart Stream Developer
  • 👋Dartstream Framework
  • Prologue
    • Release Notes
      • Latest Release Notes
      • All Release Notes
    • Upgrade Guide
    • Contribution Guide
  • Getting Started
    • 😀Installation
    • ✨Our Features
      • Standard
        • CLI
        • Frontend Frameworks
        • Authentication
        • Cloud Storage
        • Database
        • Data Streaming
        • Feature Flags
        • Middleware
      • Enhanced
        • Email Management
        • Payment System Integration
        • Notifications
        • Localization and Internalization
        • Access Control and Security
        • Media Management
        • Search and Filtering
        • Audit Logging and Compliance
        • Analytics and Insights
    • 😀Directory Structure
    • 🦕Deployment
  • Product Guides
    • 📪Making a post
    • 📎Understanding Projects
    • 💡Video Guides
  • Documentation
    • 🛠️Fundamentals
      • 📝The Basics
        • Routing
        • Middleware
        • CSRF Protection
        • Controllers
        • Requests
        • Responses
        • Asset Bundling
        • URL Generation
        • Session
        • Validation
        • Error Handling
        • Logging
      • ℹ️Advanced
        • Broadcasting
        • Cache
        • Events
        • Feature Flags
        • File Storage
          • GCP
          • Amazon S3
          • Microsoft Blob Storage
        • Helpers
        • Http Client
        • Localization
        • Mail
        • Notifications
        • ORM
    • 📦Packages
      • 🧰Tools
      • 🍮Standard
      • 💸Enhanced
      • 💸Experimental
    • 😀SDKS
      • Firebase Admin SDK
      • Amazon Cognito SDK
      • Azure AD SDK
  • API Reference
  • Use Cases
    • 🎨For Designers
    • 🖥️For Developers
      • DartStream Extension Registration System
Powered by GitBook
On this page
  • Understanding the Dartstream Extension Registration System
  • Creating an Extension Class
  • Registering Extensions
  • Testing and Debugging Extensions
  • Advanced Features
  • Common Pitfalls and Troubleshooting
  • Conclusion
  1. Use Cases
  2. For Developers

DartStream Extension Registration System

PreviousFor Developers

Last updated 6 months ago

Overview

Dartstream is an extensible framework that allows developers to enhance and extend its core functionality through extensions. Extensions are modular components that can add new features, modify existing functionality, or integrate third-party services into Dartstream.

This guide explains how to create, register, and configure extensions in Dartstream, providing step-by-step instructions with practical examples.

Table of Contents

    • 2.1

    • 3.1

    • 3.2

    • 3.3

Understanding the Dartstream Extension Registration System

Levels of Extension Registration

Dartstream allows extensions to be registered at three levels, each serving a different purpose:

  1. Core Extensions: These affect Dartstream's core functionality. They can modify or add features to the fundamental components of the framework.

  2. Custom Features: These extend or modify existing core features. They can add specific functionality on top of the core features.

  3. Framework Extensions: These integrate third-party services or tools with Dartstream. They are typically used for connecting external libraries or services like Firebase, AWS, or other frameworks.

Extension Lifecycle

Extensions in Dartstream follow this lifecycle:

  1. Initialization: Set up any dependencies and perform necessary configuration tasks.

  2. Execution: Perform the core functionality of the extension.

  3. Disposal: Clean up resources when the extension is no longer needed.

Each extension follows these phases to ensure it integrates seamlessly into the Dartstream framework.

Creating an Extension Class

Overview

To create a Dartstream extension, you need to implement the DartstreamFeatureExtension interface. This interface defines the essential methods that every extension must implement.

1. Create a New Dartstream Extension Class

To create a new extension, define a class that extends DartstreamFeatureExtension. Here's an example of a simple core extension:

class MyCoreExtension extends DartstreamFeatureExtension {
  @override
  Future<void> initialize() async {
    // Initialization code
    print("Initializing MyCoreExtension...");
  }

  @override
  Future<void> execute() async {
    // Core functionality code
    print("Executing MyCoreExtension functionality...");
  }

  @override
  Future<void> dispose() async {
    // Clean-up code
    print("Disposing MyCoreExtension...");
  }

  @override
  String get name => 'MyCoreExtension';
  @override
  String get version => '1.0.0';
  @override
  String get compatibleVersion => '>=2.0.0';
  @override
  List<String> get requiredExtensions => [];
  @override
  String get description => 'A sample core extension for Dartstream';
  @override
  String get documentationUrl => 'http://docs.mycoreextension.com';
}

2.1 Explanation of Interface Methods

The DartstreamFeatureExtension interface provides several key methods and properties that your extension must implement:

  • initialize(): This method is called when the extension is initialized. It's used to set up any services, dependencies, or configurations needed for the extension to work.

  • execute(): This method defines the core functionality of the extension. This is where your extension performs its main tasks, such as modifying data, interacting with other services, or providing new features.

  • dispose(): This method is called when the extension is no longer needed. It allows you to clean up resources, close connections, or perform any necessary shutdown tasks.

  • name: The name of the extension. It should be unique to avoid conflicts with other extensions.

  • version: The version of your extension. This helps track changes and ensure compatibility with different versions of Dartstream.

  • compatibleVersion: Specifies the minimum version of Dartstream that is compatible with your extension.

  • requiredExtensions: This property lists other extensions that your extension depends on. Dartstream will ensure that these extensions are initialized before your extension.

  • description: A brief description of what your extension does. This is useful for documentation purposes.

  • documentationUrl: A URL where users can find more information about the extension.

Registering Extensions

Overview

Once you've created your extension class, the next step is to register it with the Dartstream framework. Dartstream provides an extension system that allows you to register your extensions at different levels (core, custom, or framework).

3.1 Registering Core Extensions

Core extensions are foundational extensions that modify or enhance Dartstream's core features. Here's how you can register a core extension:

Example:

DartstreamExtensionSystem extensionSystem = DartstreamExtensionSystem(
  container: diContainer,
  services: services,
  logger: logger,
);

await extensionSystem.registerCoreExtension(MyCoreExtension());

In this example, DartstreamExtensionSystem is used to register the MyCoreExtension class. Once registered, Dartstream will initialize the core extension and its associated services.

3.2 Registering Custom Features

Custom features extend the functionality of core extensions. Here's how to register a custom feature that builds on top of a core extension:

Example:

await extensionSystem.registerCustomFeature(MyCustomFeature(), 'MyCoreExtension');

In this example, MyCustomFeature extends MyCoreExtension, and the registration ensures that the core extension is initialized before the custom feature.

3.3 Registering Framework Extensions

Framework extensions are used to integrate third-party services or tools into Dartstream. For example, you might register an extension that connects Dartstream to Firebase or AWS.

Example:

await extensionSystem.registerFrameworkExtension(
  MyFrameworkExtension(),
  'Firebase',
  'MyCoreExtension',
);

Here, MyFrameworkExtension integrates with Firebase, and the registration links it to the core extension (MyCoreExtension) that it depends on.

Testing and Debugging Extensions

Debugging Extensions

When developing extensions, use the DartstreamLogger to track the execution of your extensions and troubleshoot any issues. Here's an example of how you can log messages within your extension:

_logger.log('MyCoreExtension initialized');

Unit Testing Extensions

To unit test your extensions, you can mock the services and dependencies using packages like mockito or mocktail. This allows you to test the extension's behavior in isolation.

Example:

final mockService = MockService();
final extension = MyCoreExtension(service: mockService);

test('Test MyCoreExtension initialization', () {
  extension.initialize();
  expect(mockService.called, true);
});

Advanced Features

Lazy Loading Extensions

Extensions can be loaded lazily to improve startup performance. This means extensions are only loaded when they're needed, rather than at application startup.

Dependency Management

Dartstream ensures that extensions are loaded in the correct order, based on their dependencies. Use the requiredExtensions property to specify which extensions your feature depends on.


Common Pitfalls and Troubleshooting

Missing Dependencies

If you encounter errors about missing dependencies, check that the required extensions are registered correctly. Ensure that the extension names in the requiredExtensions list are accurate.

Version Compatibility Issues

Ensure the version numbers for your extensions are compatible with your Dartstream version. Use the compatibleVersion property to specify version compatibility.

Conclusion

Summary

This guide covered the entire process of registering core, custom, and framework extensions in Dartstream. You learned how to create your own extensions, integrate third-party services, and extend Dartstream's core functionality.

Next Steps

Now that you understand the registration process, try creating your own extensions. Use the provided examples as a starting point and adjust them based on your project's needs.


This documentation structure is comprehensive and organized, ensuring that users can easily follow along from creating their first extension to integrating complex third-party services. It includes all relevant code samples, explanations of interface methods, troubleshooting tips, and advanced features to give users a well-rounded understanding of how to extend Dartstream.

🖥️
Understanding the Dartstream Extension Registration System
Creating an Extension Class
Explanation of Interface Methods
Registering Extensions
Registering Core Extensions
Registering Custom Features
Registering Framework Extensions
Testing and Debugging Extensions
Advanced Features
Common Pitfalls and Troubleshooting
Conclusion