Jonny Borges

update to 4.3.4

## [4.3.4]
- Improve docs
## [4.3.3]
- Fix Get.reset
... ...
... ... @@ -1097,6 +1097,74 @@ The only way to actually delete a `GetxService`, is with `Get.reset()` which is
"Hot Reboot" of your app. So remember, if you need absolute persistence of a class instance during the
lifetime of your app, use `GetxService`.
### Tests
You can test your controllers like any other class, including their lifecycles:
```dart
class Controller extends GetxController {
@override
void onInit() {
super.onInit();
//Change value to name2
name.value = 'name2';
}
@override
void onClose() {
name.value = '';
super.onClose();
}
final name = 'name1'.obs;
void changeName() => name.value = 'name3';
}
void main() {
test('''
Test the state of the reactive variable "name" across all of its lifecycles''',
() {
/// You can test the controller without the lifecycle,
/// but it's not recommended unless you're not using
/// GetX dependency injection
final controller = Controller();
expect(controller.name.value, 'name1');
/// If you are using it, you can test everything,
/// including the state of the application after each lifecycle.
Get.put(controller); // onInit was called
expect(controller.name.value, 'name2');
/// Test your functions
controller.changeName();
expect(controller.name.value, 'name3');
/// onClose was called
Get.delete<Controller>();
expect(controller.name.value, '');
});
}
```
#### Tips
##### Mockito or mocktail
If you need to mock your GetxController/GetxService, you should extend GetxController, and mixin it with Mock, that way
```dart
class NotificationServiceMock extends GetxService with Mock implements NotificationService {}
```
##### Using Get.reset()
If you are testing widgets, or test groups, use Get.reset at the end of your test or in tearDown to reset all settings from your previous test.
##### Get.testMode
if you are using your navigation in your controllers, use `Get.testMode = true` at the beginning of your main.
# Breaking changes from 2.0
1- Rx types:
... ...
... ... @@ -3,6 +3,7 @@
/// injection, and route management in a quick and practical way.
library get;
export 'get_common/get_reset.dart';
export 'get_connect/connect.dart';
export 'get_core/get_core.dart';
export 'get_instance/get_instance.dart';
... ...
import '../get.dart';
extension GetResetExt on GetInterface {
void reset(
{@deprecated bool clearFactory = true, bool clearRouteBindings = true}) {
GetInstance().resetInstance(clearRouteBindings: clearRouteBindings);
Get.clearRouteTree();
Get.clearTranslations();
Get.resetRootNavigator();
}
}
... ...
... ... @@ -95,14 +95,14 @@ extension Inst on GetInterface {
/// - [clearFactory] clears the callbacks registered by `Get.lazyPut()`
/// - [clearRouteBindings] clears Instances associated with Routes when using
/// [GetMaterialApp].
bool reset(
{@deprecated bool clearFactory = true,
@deprecated bool clearRouteBindings = true}) =>
GetInstance().reset(
// ignore: deprecated_member_use_from_same_package
clearFactory: clearFactory,
// ignore: deprecated_member_use_from_same_package
clearRouteBindings: clearRouteBindings);
// bool reset(
// {@deprecated bool clearFactory = true,
// @deprecated bool clearRouteBindings = true}) =>
// GetInstance().reset(
// // ignore: deprecated_member_use_from_same_package
// clearFactory: clearFactory,
// // ignore: deprecated_member_use_from_same_package
// clearRouteBindings: clearRouteBindings);
/// Deletes the `Instance<S>`, cleaning the memory and closes any open
/// controllers (`DisposableInterface`).
... ...
... ... @@ -290,9 +290,8 @@ class GetInstance {
/// [clearFactory] clears the callbacks registered by [lazyPut]
/// [clearRouteBindings] clears Instances associated with routes.
///
bool reset(
{@deprecated bool clearFactory = true,
@deprecated bool clearRouteBindings = true}) {
bool resetInstance(
{@deprecated bool clearFactory = true, bool clearRouteBindings = true}) {
// if (clearFactory) _factory.clear();
// deleteAll(force: true);
if (clearRouteBindings) RouterReportManager.clearRouteKeys();
... ...
... ... @@ -1014,17 +1014,17 @@ you can only use widgets and widget functions here''';
Get.log = logWriterCallback;
}
if (defaultPopGesture != null) {
getxController.defaultPopGesture = defaultPopGesture;
_getxController.defaultPopGesture = defaultPopGesture;
}
if (defaultOpaqueRoute != null) {
getxController.defaultOpaqueRoute = defaultOpaqueRoute;
_getxController.defaultOpaqueRoute = defaultOpaqueRoute;
}
if (defaultTransition != null) {
getxController.defaultTransition = defaultTransition;
_getxController.defaultTransition = defaultTransition;
}
if (defaultDurationTransition != null) {
getxController.defaultTransitionDuration = defaultDurationTransition;
_getxController.defaultTransitionDuration = defaultDurationTransition;
}
}
... ... @@ -1050,18 +1050,18 @@ you can only use widgets and widget functions here''';
engine!.performReassemble();
}
void appUpdate() => getxController.update();
void appUpdate() => _getxController.update();
void changeTheme(ThemeData theme) {
getxController.setTheme(theme);
_getxController.setTheme(theme);
}
void changeThemeMode(ThemeMode themeMode) {
getxController.setThemeMode(themeMode);
_getxController.setThemeMode(themeMode);
}
GlobalKey<NavigatorState>? addKey(GlobalKey<NavigatorState> newKey) {
return getxController.addKey(newKey);
return _getxController.addKey(newKey);
}
GlobalKey<NavigatorState>? nestedKey(dynamic key) {
... ... @@ -1206,45 +1206,49 @@ you can only use widgets and widget functions here''';
// /// give access to Immutable MediaQuery.of(context).size.width
// double get width => MediaQuery.of(context).size.width;
GlobalKey<NavigatorState> get key => getxController.key;
GlobalKey<NavigatorState> get key => _getxController.key;
Map<dynamic, GlobalKey<NavigatorState>> get keys => getxController.keys;
Map<dynamic, GlobalKey<NavigatorState>> get keys => _getxController.keys;
GetMaterialController get rootController => getxController;
GetMaterialController get rootController => _getxController;
bool get defaultPopGesture => getxController.defaultPopGesture;
bool get defaultOpaqueRoute => getxController.defaultOpaqueRoute;
bool get defaultPopGesture => _getxController.defaultPopGesture;
bool get defaultOpaqueRoute => _getxController.defaultOpaqueRoute;
Transition? get defaultTransition => getxController.defaultTransition;
Transition? get defaultTransition => _getxController.defaultTransition;
Duration get defaultTransitionDuration {
return getxController.defaultTransitionDuration;
return _getxController.defaultTransitionDuration;
}
Curve get defaultTransitionCurve => getxController.defaultTransitionCurve;
Curve get defaultTransitionCurve => _getxController.defaultTransitionCurve;
Curve get defaultDialogTransitionCurve {
return getxController.defaultDialogTransitionCurve;
return _getxController.defaultDialogTransitionCurve;
}
Duration get defaultDialogTransitionDuration {
return getxController.defaultDialogTransitionDuration;
return _getxController.defaultDialogTransitionDuration;
}
Routing get routing => getxController.routing;
Routing get routing => _getxController.routing;
Map<String, String?> get parameters => getxController.parameters;
Map<String, String?> get parameters => _getxController.parameters;
set parameters(Map<String, String?> newParameters) =>
getxController.parameters = newParameters;
_getxController.parameters = newParameters;
CustomTransition? get customTransition => getxController.customTransition;
CustomTransition? get customTransition => _getxController.customTransition;
set customTransition(CustomTransition? newTransition) =>
getxController.customTransition = newTransition;
_getxController.customTransition = newTransition;
bool get testMode => getxController.testMode;
set testMode(bool isTest) => getxController.testMode = isTest;
bool get testMode => _getxController.testMode;
set testMode(bool isTest) => _getxController.testMode = isTest;
static GetMaterialController getxController = GetMaterialController();
void resetRootNavigator() {
_getxController = GetMaterialController();
}
static GetMaterialController _getxController = GetMaterialController();
}
extension NavTwoExt on GetInterface {
... ... @@ -1252,6 +1256,10 @@ extension NavTwoExt on GetInterface {
routeTree.addRoutes(getPages);
}
void clearRouteTree() {
_routeTree.routes.clear();
}
static late final _routeTree = ParseRouteTree(routes: []);
ParseRouteTree get routeTree => _routeTree;
... ...
... ... @@ -57,8 +57,7 @@ class GetDelegate extends RouterDelegate<GetNavConfig>
final List<NavigatorObserver>? navigatorObservers;
final TransitionDelegate<dynamic>? transitionDelegate;
GlobalKey<NavigatorState> get navigatorKey =>
GetNavigation.getxController.key;
GlobalKey<NavigatorState> get navigatorKey => Get.key;
GetDelegate({
GetPage? notFoundRoute,
... ...
... ... @@ -34,6 +34,7 @@ class RouterReportManager<T> {
static void clearRouteKeys() {
_routesKey.clear();
_routesByCreate.clear();
}
static void appendRouteByCreate(GetLifeCycleBase i) {
... ...
... ... @@ -96,6 +96,10 @@ extension LocalesIntl on GetInterface {
translations.addAll(tr);
}
void clearTranslations() {
translations.clear();
}
void appendTranslations(Map<String, Map<String, String>> tr) {
tr.forEach((key, map) {
if (translations.containsKey(key)) {
... ...
name: get
description: Open screens/snackbars/dialogs without context, manage states and inject dependencies easily with GetX.
version: 4.3.3
version: 4.3.4
homepage: https://github.com/jonataslaw/getx
environment:
... ...