CrossPlatformLiveData.Android
1.0.2
See the version list below for details.
dotnet add package CrossPlatformLiveData.Android --version 1.0.2
NuGet\Install-Package CrossPlatformLiveData.Android -Version 1.0.2
<PackageReference Include="CrossPlatformLiveData.Android" Version="1.0.2" />
paket add CrossPlatformLiveData.Android --version 1.0.2
#r "nuget: CrossPlatformLiveData.Android, 1.0.2"
// Install CrossPlatformLiveData.Android as a Cake Addin #addin nuget:?package=CrossPlatformLiveData.Android&version=1.0.2 // Install CrossPlatformLiveData.Android as a Cake Tool #tool nuget:?package=CrossPlatformLiveData.Android&version=1.0.2
CrossPlatformLiveData
Android LiveData inspired .NET implementation - lifecycle aware rx streams
CrossPlatformLiveData is a C# library inspired by Android Jetpack LiveData, intended for platform independent use with Xamarin and other cross platform frameworks.
CrossPlatformLiveData is a light weight solution to effective implementation of MVVM architecture pattern.
Features:
- Rx stream with UI lifecycle awareness,
- Last value cache - state preservation,
- Everything that you need to implement MVVM pattern
Installation
- Core/Logic project - add CrossPlatformLiveData nuget,
- Android project - add CrossPlatformLiveData, CrossPlatformLiveData.Android nuggets,
- iOS project - add CrossPlatformLiveData, CrossPlatformLiveData.iOS nuggets
CrossPlatformLiveData.Android provides base UI classes with LifecycleManger linked to lifecycle events:
LiveDataActivity, LiveDataAppCompatActivity, LiveDataAppCompatDialogFragment, LiveDataFragment, LiveDataFragmentActivity, LiveDataSupportDialogFragment, LiveDataSupportFragment
CrossPlatformLiveData.iOS provides base UI classes with LifecycleManger linked to lifecycle events:
LiveDataViewController
For other platforms all you need to do is provide LifecycleManger with lifecyle events when they occur, implementation should be self explanatory.
Usage
Logic/Core:
Add LiveData fields in ViewModel/Presenter class:
public ILiveData<string> SampleLiveData { get; } = new LiveData<string>();
Post new value to LiveData:
SampleLiveData.PostValue("Hello World!");
UI:
Observe LiveData streams with LifecycleManager
viewModel.SampleLiveData.Observe(LifecycleManager, OnNextSample, e => {//handle error here}));
private void OnNextSample(string newText)
{
someTextView.Text = newText;
}
RxWrapper (Optional)
Optionally you can use RxWrapper template class that reduces boilerplate code by bundling value, request status, and exception in single model:
public ILiveData<RxWrapper<SampleResponse>> NetworkingLiveData { get; } = new LiveData<RxWrapper<SampleResponse>>();
//Notify UI that request is pending
NetworkingLiveData.PostValue(RxWrapper<SampleResponse>.Pending());
//Data fetch has succeded
NetworkingLiveData.PostValue(RxWrapper<SampleResponse>.Ok(model1));
//Error has occured during network call
NetworkingLiveData.PostValue(RxWrapper<SampleResponse>.Error(new Exception("No network")));
private void OnNextNetworkingData(RxWrapper<SampleResponse> response)
{
switch (response.Status)
{
case RxStatus.Ok:
//Update UI on succes
break;
case RxStatus.Pending:
//Show loading spinner
break;
case RxStatus.Error:
//Display error alert
break;
}
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
MonoAndroid | monoandroid90 is compatible. |
-
.NETStandard 2.0
- CrossPlatformLiveData (>= 1.0.0)
-
MonoAndroid 9.0
- Xamarin.Android.Support.Fragment (>= 28.0.0.1)
- Xamarin.Android.Support.v7.AppCompat (>= 28.0.0.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.