Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A Kotlin Multiplatform library that provides a simple event bus implementation using KotlinX Coroutines Channels. Multi-keys, multi-producers, single-consumer and thread-safe event bus backed by kotlinx.coroutines.channels.Channels

License

NotificationsYou must be signed in to change notification settings

Kotlin-Multiplatform-Foundation/kotlin-channel-event-bus

Repository files navigation

maven-centralcodecovBuild and publish snapshotBuild samplePublish ReleaseKotlin versionKotlinX Coroutines versionHitsGitHub licensebadgebadgebadgebadgebadgebadgebadgebadgebadgebadgebadgebadgebadge

Multi-keys, multi-producers, single-consumer event bus backed bykotlinx.coroutines.channels.Channels.

  • A Kotlin Multiplatform library that provides a simple event bus implementation usingkotlinx.coroutines.channels.Channels.This is useful for UI applications where you want to send events to communicate betweendifferent parts / scope of your application (e.g. send results from one screen to another).

  • This bus is thread-safe to be used by multiple threads.It is safe to send events from multiple threads without any synchronization.

  • ChannelEvent.Key will be used to identify a bus for a specific type of events.Each bus has aChannel to send events to and aFlow to receive events from.

  • TheChannel is unbounded (Channel.UNLIMITED - default) or conflatedChannel.CONFLATED.TheFlow is cold and only one collector is allowed at a time.This makes sure all events are consumed.

Like some of my work? Could you buy me a coffee (or more likely a beer)?

Buy Me A Coffee

Docs

Installation

allprojects {  repositories {    [...]    mavenCentral()  }}
implementation("io.github.hoc081098:channel-event-bus:0.1.0")

Snapshot

Snapshots of the development version are available in Sonatype's snapshots repository.
  • Kotlin
allprojects {  repositories {    [...]    maven(url="https://s01.oss.sonatype.org/content/repositories/snapshots/")  }}dependencies {  implementation("io.github.hoc081098:channel-event-bus:0.1.1-SNAPSHOT")}
  • Groovy
allprojects {  repositories {    [...]    maven { url"https://s01.oss.sonatype.org/content/repositories/snapshots/" }  }}dependencies {  implementation'io.github.hoc081098:channel-event-bus:0.1.1-SNAPSHOT'}

Basic usage

// Create your event typedata classAwesomeEvent(valpayload:Int) : ChannelEvent<AwesomeEvent> {overrideval key get()=Keycompanionobject Key : ChannelEventKey<AwesomeEvent>(AwesomeEvent::class)}// Create your bus instanceval bus=ChannelEventBus()// Send events to the busbus.send(AwesomeEvent(1))bus.send(AwesomeEvent(2))bus.send(AwesomeEvent(3))// Receive events from the busbus  .receiveAsFlow(AwesomeEvent)// or bus.receiveAsFlow(AwesomeEvent.Key) if you want to be explicit  .collect { e:AwesomeEvent->println(e) }

Supported targets

  • jvm /android.
  • js (IR).
  • wasmJs.
  • Darwin targets:
    • iosArm64,iosX64,iosSimulatorArm64.
    • watchosArm32,watchosArm64,watchosX64,watchosSimulatorArm64,watchosDeviceArm64.
    • tvosX64,tvosSimulatorArm64,tvosArm64.
    • macosX64,macosArm64.
  • mingwX64
  • linuxX64,linuxArm64.
  • androidNativeArm32,androidNativeArm64,androidNativeX86,androidNativeX64.

Sample

  • Android Compose sample:an Android app using Compose UI to show how to use the library.It has two nested navigation graphs:Register andHome.

    • InRegister, we have 3 steps (3 screens) to allow the user to input their information, stepbystep.

      • ARegisterSharedViewModel (bound toRegister navigation graph scope) is usedto hold the whole state of the registration process.It observes events from theChannelEventBus and updates the state accordingly.

      • Each step screen has aViewModel to hold the state of the screen and will send events totheChannelEventBus,then theRegisterSharedViewModel will receive those events and update the state.

    • In theHome nav graph, we have 2 screens:Home andDetail.

      • TheHome screen has aHomeViewModel to hold the results received from theDetail screen.Those result events are sent from theDetail screen to theChannelEventBus,and theHomeViewModel will receive those events and update the state.

      • TheDetail screen will send events to theChannelEventBus when the user clicks on the button.TheHomeViewModel will receive those events and update the state.

Screen_recording_20231203_155312.mp4

Roadmap

  • Support more targets:wasm (depends on supported targets bykotlinx.coroutines) (since0.1.0).
  • More samples.
  • More docs.
  • More tests.

License

                                 Apache License                           Version 2.0, January 2004                        http://www.apache.org/licenses/

Packages

No packages published

Contributors3

  •  
  •  
  •  

[8]ページ先頭

©2009-2025 Movatter.jp