McQuenji's Core Module
This is the core module for all my flutter projects. It contains all the basic functionalities that I use in all my projects. It is a work in progress and I will keep updating it as I go along.
Usage
To use this module in your project, add the following to your pubspec.yaml
file:
dependencies:
mcquenji_core:
git:
url: https://github.com/mcquenji/mcquenji_core.git
Then run flutter pub get
to install the package.
After that, import the module in your app's main module this:
import 'package:mcquenji_core/mcquenji_core.dart';
class AppModule extends Module {
@override
List<Module> get imports => [CoreModule()];
}
Now you can use all services and utilities provided by the module in your app.
final networkService = Modular.get<NetworkService>();
networkService.get('https://api.example.com').then((response) {
print(response.body);
});
Services
Services are classes that complete the most low-level tasks in the app. They are the only classes that can interact with the outside world. All other classes should depend on services to get their work done.
Defining a new service
To define a new service, create a new abstract class that extends the Service
class.
abstract class MyService extends Service {
@override
String get name => 'MyService';
// Your service implementation here
}
After that, create a new class that extends the abstract class and implements the required methods.
class MyServiceImpl extends MyService {
@override
Future<void> init() async {
// Initialize your service here
}
// Implement other methods here
}
Finally, register the service in the module the service is used in. If the service is also used in other modules, export it.
class MyModule extends Module {
@override
List<Module> get imports => [McQuenjiCore()];
@override
void binds(i){
i.add<MyService>(MyServiceImpl.new);
}
@override
exportBinds(i) {
i.add<MyService>(MyServiceImpl.new);
}
}
Datasources
Datasources are classes that interact with the data layer of the app. They are responsible for fetching and storing data from and to the data layer.
Defining a new datasource
To define a new datasource, create a new abstract class that extends the Datasource
class.
abstract class MyDatasource extends Datasource {
@override
String get name => 'MyDatasource';
MyDatasource(MyService service);
// Your datasource implementation here
}
After that, the steps are the same as defining a new service.
Repositories
Repositories are classes that provide tailored methods for a specific UI screen or feature. They are also responsible for state management and as extend Cubit
.
Defining a new repository
To define a new repository, create a new class that extends the Repository
class.
class MyRepository<MyState> extends Repository<MyState> {
MyRepository(MyService service, MyDatasource datasource) : super(myIntialState);
// Your repository implementation here
}
Libraries
- mcquenji_core
- McQuenji's Core Module