LiveDataX
LiveDataX is a Dart package that brings the original LiveData and MutableLiveData classes from native Android code to Dart. This package is designed to help you implement the MVVM (Model-View-ViewModel) pattern in your Dart applications, following Google's clean architecture principles.
Features
- LiveData and MutableLiveData classes for reactive data handling.
- Repository pattern for data management.
- ViewModel class to manage UI-related data in a lifecycle-conscious way.
Getting Started
To start using LiveDataX, add it to your pubspec.yaml
file:
dependencies:
livedatax: ^1.0.0
Then, import it into your Dart project:
import 'package:livedatax/livedatax.dart';
Usage
Here is a basic example of how to use LiveDataX in your project:
import 'package:livedatax/models/live_data.dart';
import 'package:livedatax/models/mutable_live_data.dart';
import 'package:livedatax/models/view_model.dart';
import '../model/example_model.dart';
import '../repo/example_repository.dart';
class ExampleViewModel extends ViewModel {
ExampleViewModel(dynamic value) : super(value);
ExampleRepository _repository = ExampleRepository();
final MutableLiveData<String> _liveData = MutableLiveData<String>();
late LiveData<String> liveData = _liveData;
@override
void init() {
var newModel = ExampleModel(100, 'Test-init');
_repository.set(newModel);
_liveData.setValue(newModel.value);
}
@override
void dispose() {
_liveData.dispose();
}
void getIntData() {
var newModel = ExampleModel(100, 'Test-fetch');
_repository.set(newModel);
_liveData.postValue(newModel.value);
}
void delete() {
var existingModel = ExampleModel(100, "Test-done");
bool isDeleted = _repository.delete(existingModel);
if (isDeleted) {
_liveData.setValue('Deleted: ${existingModel.value}');
} else {
_liveData.setValue('Delete failed');
}
}
}
import 'package:livedatax/models/repository.dart';
import '../model/example_model.dart';
class ExampleRepository extends Repository<ExampleModel> {
@override
bool delete(ExampleModel data) {
if (allData.value != null && allData.value!.containsKey(data.id)) {
allData.value!.remove(data.id);
return true;
}
return false;
}
@override
ExampleModel? get(ExampleModel? data) {
if (data != null && allData.value != null) {
return allData.value![data.id];
}
return null;
}
@override
void set(ExampleModel? data) {
if (data != null && data.id > 0) {
if (allData.value == null) {
var newMap = <int, ExampleModel?>{};
newMap[data.id] = data;
allData.value = newMap;
} else {
allData.value![data.id] = data;
}
} else {
throw UnimplementedError();
}
}
@override
bool update(ExampleModel data) {
if (allData.value != null && allData.value!.containsKey(data.id)) {
allData.value![data.id] = data;
return true;
}
return false;
}
}
Additional Information
For more information, visit the GitHub repository to browse through the code. You can also contribute to the package, file issues, and expect responses from the package authors.
License
This project is licensed under the MIT License. See the LICENSE file for details.
Libraries
- livedatax
- Support for doing something awesome.
- models/live_data
- models/live_data_interface
- models/model
- models/mutable_live_data
- models/repository
- models/view_model