SubjectEventChannel
SubjectEventChannel
is a Dart class that extends Flutter's EventChannel
to facilitate asynchronous communication between Flutter and platform-specific code using RxDart
's Subject
types. This class enables the management and broadcasting of events through various types of RxDart
subjects, such as BehaviorSubject
, ReplaySubject
, and PublishSubject
.
Overview
The SubjectEventChannel
class is designed for efficient event handling and communication with platform-specific code. It leverages RxDart
's subjects to offer flexible event management strategies, including buffering and replaying of events.
Constructors
SubjectEventChannel
const SubjectEventChannel(
this.name, this.subject, { this.codec = const StandardMethodCodec(), this.maxSize, BinaryMessenger? binaryMessenger,})
- Parameters:
Parameter | Type | Description |
---|---|---|
name |
String |
The name of the event channel used for communication with the platform. |
subject |
Subject |
The RxDart Subject used for managing events. Can be BehaviorSubject , ReplaySubject , or PublishSubject . |
codec |
MethodCodec |
Optional. Specifies how to encode and decode messages between Dart and the platform. Defaults to StandardMethodCodec() . |
maxSize |
int? |
Optional. For ReplaySubject , specifies the maximum number of events to retain. If null , no limit is applied. |
binaryMessenger |
BinaryMessenger? |
Optional. The binary messenger for sending/receiving messages. If null , it defaults to the appropriate messenger based on runtime context. |
SubjectEventChannel.behavior
SubjectEventChannel.behavior(
this.name, { this.sync = false, this.codec = const StandardMethodCodec(), BinaryMessenger? binaryMessenger,})
- Parameters:
Parameter | Type | Description |
---|---|---|
name |
String |
The name of the event channel used for communication with the platform. |
sync |
bool |
Optional. Determines if the subject should be synchronous or asynchronous. Defaults to false . |
codec |
MethodCodec |
Optional. Codec for encoding/decoding method calls. |
binaryMessenger |
BinaryMessenger? |
Optional. The binary messenger for sending/receiving messages. If null , it defaults to the appropriate messenger based on runtime context. |
SubjectEventChannel.replay
SubjectEventChannel.replay(
this.name, { this.sync = false, this.maxSize, this.codec = const StandardMethodCodec(), BinaryMessenger? binaryMessenger,})
- Parameters:
Parameter | Type | Description |
---|---|---|
name |
String |
The name of the event channel used for communication with the platform. |
sync |
bool |
Optional. Determines if the subject should be synchronous or asynchronous. Defaults to false . |
maxSize |
int? |
Optional. The buffer size for storing old events in ReplaySubject . |
codec |
MethodCodec |
Optional. Codec for encoding/decoding method calls. |
binaryMessenger |
BinaryMessenger? |
Optional. The binary messenger for sending/receiving messages. If null , it defaults to the appropriate messenger based on runtime context. |
SubjectEventChannel.publish
SubjectEventChannel.publish(
this.name, { this.sync = false, this.codec = const StandardMethodCodec(), BinaryMessenger? binaryMessenger,})
- Parameters:
Parameter | Type | Description |
---|---|---|
name |
String |
The name of the event channel used for communication with the platform. |
sync |
bool |
Optional. Determines if the subject should be synchronous or asynchronous. Defaults to false . |
codec |
MethodCodec |
Optional. Codec for encoding/decoding method calls. |
binaryMessenger |
BinaryMessenger? |
Optional. The binary messenger for sending/receiving messages. If null , it defaults to the appropriate messenger based on runtime context. |
Bring your own subject:
You can supply a custom implementation of subject class by simply using default constructor:
final subject = XYSubject();
final eventChannel = SubjectEventChannel('name', subject);
Usage Example
see example project for more comprehensive example .
Add to your project:
dependencies:
rx_event_channel: ^1.0.0
License
This project is licensed under the MIT License. See the LICENSE file for details.
Contributing
If you would like to contribute to this project, please fork the repository and submit a pull request with your changes. For major changes, please open an issue first to discuss what you would like to change.
TODO:
x
Testing.x
publish to pub.dev.