Skip to content

Latest commit

 

History

History
68 lines (58 loc) · 1.8 KB

viewmodel.md

File metadata and controls

68 lines (58 loc) · 1.8 KB

ViewModel

Usage

Common

class YourViewModel : PilotViewModel() {
    val someData: StateFlow<String> = MutableStateFlow("")
    val someNullableData: StateFlow<String?> = MutableStateFlow(null)
    
    fun yourFunction() {
        viewModelScope.launch {
            // Your code here
        }
    }
}

Android

Use the view model as you would use a regular android view model.

@Composable
fun YourView(viewModel: YourViewModel) {
    val someData by viewModel.someData.collectAsState()
    val someNullableData by viewModel.someNullableData.collectAsState()
}

iOS

struct YourView: View {
    @StateObject private var viewModelLifecycle: ViewModelLifecycleHandler<YourViewModel>
    @ObservedObject private var someData: StateObservable<String>
    @ObservedObject private var someNullableData: NullableStateObservable<String>
    
    private var viewModel: YourViewModel {
        viewModelLifecycle.viewModel
    }
    
    init(viewModel: YourViewModel) {
        _viewModelLifecycle = StateObject(wrappedValue: ViewModelLifecycleHandler(viewModel: viewModel))
        _someData = ObservedObject(wrappedValue: StateObservable(viewModel.someData))
        _someNullableData = ObservedObject(wrappedValue: NullableStateObservable(viewModel.someNullableData))
   }

    var body: some View {
        // Your code here where you can use viewModel, someData.value and someNullableData.value
    }
}

Installation

Common / Android

build.gradle.kts

repositories {
    maven(url = "https://s3.amazonaws.com/mirego-maven/public")
}

dependencies {
    implementation("com.mirego.pilot:viewmodel:<version>")
}

iOS

Podfile

pod 'Pilot/ViewModel', :git => '[email protected]:mirego/viewmodel-pilot.git', :tag => '<version>', :inhibit_warnings => true