Flutter Tutorial:
Flutter Widgets:
Flutter Advance
Flutter REST API
Advanced Concepts
Wrap vs Builder vs OverBarFlow
Circular progress contain Icon
Flutter State management Comparison
Flutter Database
Flutter Token Expired Handling
Flutter Provider
Flutter GetX
Flutter with Native
Flutter Tips:
Interview Questions
Flutter 100 Interview Questions
GetX Tutorial Part II
Controllers in GetX
There are three types of controllers available in GetX: GetxController, GetxService, and GetxControllerMixin
GetxController:
This is the most commonly used type of controller in GetX. It extends the Disposable Interface and provides a lifecycle management system. It is suitable for managing state within a specific scope like a widget or a screen. Example:
In this example, the CounterController extends GetxController and manages the state of a counter. It has a count variable wrapped in an observable (obs). The increment method updates the count. The onInit method is called when the controller is initialized, and the onClose method is called when the controller is closed.
import 'package:get/get.dart';
class CounterController extends GetxController {
RxInt count = 0.obs;
void increment() {
count.value++;
}
@override
void onInit() {
super.onInit();
print('CounterController initialized');
}
@override
void onClose() {
super.onClose();
print('CounterController closed');
}
}
GetxService:
This type of controller is similar to GetxController, but it has a longer lifecycle. It can be accessed from anywhere in the app and is useful for managing global state or shared dependencies. Example:
In this example, the AuthService extends GetxService and manages the authentication state of the app. It has an isLoggedIn variable wrapped in an observable (obs). The login and logout methods update the authentication state. The onInit method is called when the service is initialized, and the onClose method is called when the service is closed.
import 'package:get/get.dart';
class AuthService extends GetxService {
RxBool isLoggedIn = false.obs;
void login() {
isLoggedIn.value = true;
}
void logout() {
isLoggedIn.value = false;
}
@override
void onInit() {
super.onInit();
print('AuthService initialized');
}
@override
void onClose() {
super.onClose();
print('AuthService closed');
}
}
GetxControllerMixin:
This mixin is used when you want to combine multiple controllers into a single class. It allows you to use multiple controllers within a single class by providing a clean way to manage their lifecycle. Example:
In this example, the MixinController is a mixin that defines a mixinMethod. The MyCombinedController extends GetxController and uses the MixinController mixin. It also manages the state of a name with the name variable wrapped in an observable. The setName method updates the name. The onInit method is called when the controller is initialized, and the onClose method is called when the controller is closed.
import 'package:get/get.dart';
mixin MixinController on GetxController {
void mixinMethod() {
print('Mixin method called');
}
}
class MyCombinedController extends GetxController with MixinController {
RxString name = ''.obs;
void setName(String newName) {
name.value = newName;
}
@override
void onInit() {
super.onInit();
print('MyCombinedController initialized');
}
@override
void onClose() {
super.onClose();
print('MyCombinedController closed');
}
}
When to use each type of controller:
Use GetxController when you want to manage the state within a specific scope like a widget or a screen. It provides the onInit and onClose methods for initialization and cleanup.
Use GetxService when you want to manage global state or shared dependencies that can be accessed from anywhere in the app. It has a longer lifecycle compared to GetxController and can be used to maintain data across multiple screens or widgets.
Use GetxControllerMixin when you need to combine multiple controllers into a single class. This allows you to reuse and organize your code more effectively by separating different concerns into different controllers.
It’s important to note that all types of controllers in GetX should extend the Disposable Interface and use the dispose method to clean up any resources or subscriptions when they are no longer needed.