Last updated:
0 purchases
get controller plus
get_controller_plus #
Extension of GetxController from GetX package with support Widgets.
Features #
Awareness of a running process with duration which requires users to be notified
Convenient error handler macro functions
Further encouraging decoupling of Views and View Logics
Provided with support widgets
Getting started #
Prerequisites #
GetX package
Knowledge of using GetxController class
Knowledge of connecting Get Observables
Usage #
Implementation is the same like GetxController
import 'package:get_controller_plus/get_controller_plus.dart';
class MySmartController extends GetxControllerPlus {
copied to clipboard
Capabilities #
Load Aware
Introducing LoadAware capabilities, the GetxControllerPlus provides extension methods:
isLoading getter and setter, and with tag variant, isLoadingByTag and setIsLoadingByTag.
// under GetxControllerPlus scope
isLoading = true;
isLoading = false;
setIsLoadingByTag(true, "anotherProcess",);
// within Views
Obx(
() => {
final isLoading = controller.isLoading;
// or
// final isLoading = controller.isLoadingByTag("anotherProcess",);
return IgnorePointer(
ignoring: isLoading,
child: ElevatedButton(
onPressed: () {},
child: isLoading ? CircularProgressIndicator.adaptive() : Text("Go",),
),
);
},
)
copied to clipboard
wait method
// run a Future and resolves it while automatically managing the isLoading state
// usable under GetxControllerPlus scope
final result = await wait(
download(),
);
copied to clipboard
Support Widget LoadAwareGetView and LoadAwareWillPopScope
// examples
import 'package:get_controller_plus/support_widgets.dart';
LoadAwareGetView<MySmartController>(
builder: (BuildContext context, bool isLoading, Widget? child) {
if (isLoading) {
return CircularProgressIndicator.adaptive();
} else {
return MySmartView();
}
},
)
// this widget will not pop out if isLoading is true
LoadAwareWillPopScope<MySmartController>(
// you may override the default onWillPop behavior
// onWillPop: ...
child: Scaffold(),
)
copied to clipboard
Error Handling
GetxControllerPlus comes with two additional methods to handle errors.
setErrorHandler<T>
// public method, can be called from View scope or the controller scope itself
// set this first to make it available within handleError method.
// within View
controller.setErrorHandler<IOException>(
showAlertDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text("Error",),
content: Text("Connection Error!",),
);
},
),
);
// within controller
// preferrably within onInit state
void _showFormatError() {
_hasError.value = true;
}
@override
void onInit() {
super.onInit();
setErrorHandler<FormatException>(
_showFormatError,
);
}
copied to clipboard
handleError(Object err)
// protected method, call within controller's scope
Future<void> doSomething() async {
try {
// myMagic();
} catch (err) {
handleError(err,);
}
}
copied to clipboard
Additional information #
Additional ideas and concepts are welcome by publishing on Git issues.
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.