Showing
11 changed files
with
82 additions
and
90 deletions
1 | #The name of your workflow. | 1 | #The name of your workflow. |
2 | -name: build | 2 | +name: build |
3 | # Trigger the workflow on push or pull request | 3 | # Trigger the workflow on push or pull request |
4 | on: | 4 | on: |
5 | push: | 5 | push: |
6 | - branches: [ master ] | 6 | + branches: [master] |
7 | pull_request: | 7 | pull_request: |
8 | - branches: [ master ] | 8 | + branches: [master] |
9 | #A workflow run is made up of one or more jobs. Jobs run in parallel by default. | 9 | #A workflow run is made up of one or more jobs. Jobs run in parallel by default. |
10 | jobs: | 10 | jobs: |
11 | - | ||
12 | test: | 11 | test: |
13 | #The type of machine to run the job on. [windows,macos, ubuntu , self-hosted] | 12 | #The type of machine to run the job on. [windows,macos, ubuntu , self-hosted] |
14 | defaults: | 13 | defaults: |
@@ -24,8 +23,8 @@ jobs: | @@ -24,8 +23,8 @@ jobs: | ||
24 | # https://github.com/marketplace/actions/flutter-action | 23 | # https://github.com/marketplace/actions/flutter-action |
25 | - uses: subosito/flutter-action@v1 | 24 | - uses: subosito/flutter-action@v1 |
26 | with: | 25 | with: |
27 | - flutter-version: '1.20.4' | ||
28 | - channel: 'stable' | 26 | + flutter-version: "1.22.2" |
27 | + channel: "stable" | ||
29 | - run: flutter pub get | 28 | - run: flutter pub get |
30 | #- run: flutter analyze | 29 | #- run: flutter analyze |
31 | # run flutter widgets tests and unit tests | 30 | # run flutter widgets tests and unit tests |
@@ -33,4 +32,3 @@ jobs: | @@ -33,4 +32,3 @@ jobs: | ||
33 | # Upload coverage reports to Codecov | 32 | # Upload coverage reports to Codecov |
34 | # https://github.com/marketplace/actions/codecov | 33 | # https://github.com/marketplace/actions/codecov |
35 | - uses: codecov/codecov-action@v1.0.7 | 34 | - uses: codecov/codecov-action@v1.0.7 |
36 | - |
@@ -19,7 +19,10 @@ class HomeController extends GetxController { | @@ -19,7 +19,10 @@ class HomeController extends GetxController { | ||
19 | 19 | ||
20 | /// When the controller is initialized, make the http request | 20 | /// When the controller is initialized, make the http request |
21 | @override | 21 | @override |
22 | - void onInit() => fetchDataFromApi(); | 22 | + void onInit() { |
23 | + super.onInit(); | ||
24 | + fetchDataFromApi(); | ||
25 | + } | ||
23 | 26 | ||
24 | /// fetch cases from Api | 27 | /// fetch cases from Api |
25 | Future<void> fetchDataFromApi() async { | 28 | Future<void> fetchDataFromApi() async { |
@@ -170,7 +170,9 @@ class Controller extends GetxController { | @@ -170,7 +170,9 @@ class Controller extends GetxController { | ||
170 | super.onReady(); | 170 | super.onReady(); |
171 | } | 171 | } |
172 | 172 | ||
173 | + @override | ||
173 | void onClose() { | 174 | void onClose() { |
175 | + super.onClose(); | ||
174 | print('onClose'); | 176 | print('onClose'); |
175 | } | 177 | } |
176 | } | 178 | } |
lib/get_core/src/typedefs.dart
0 → 100644
1 | +typedef ValueUpdater<T> = T Function(); |
1 | +import 'package:meta/meta.dart'; | ||
2 | +import '../../get_core/get_core.dart'; | ||
3 | + | ||
1 | /// Special callable class to keep the contract of a regular method, and avoid | 4 | /// Special callable class to keep the contract of a regular method, and avoid |
2 | /// overrides if you extend the class that uses it, as Dart has no final | 5 | /// overrides if you extend the class that uses it, as Dart has no final |
3 | /// methods. | 6 | /// methods. |
4 | /// Used in [DisposableInterface] to avoid the danger of overriding onStart. | 7 | /// Used in [DisposableInterface] to avoid the danger of overriding onStart. |
5 | -/// | ||
6 | class _InternalFinalCallback<T> { | 8 | class _InternalFinalCallback<T> { |
7 | - T Function() callback; | 9 | + ValueUpdater<T> _callback; |
8 | 10 | ||
9 | - _InternalFinalCallback(); | 11 | + _InternalFinalCallback({ValueUpdater<T> callback}) : _callback = callback; |
10 | 12 | ||
11 | - T call() => callback.call(); | 13 | + T call() => _callback.call(); |
12 | } | 14 | } |
13 | 15 | ||
14 | -mixin GetLifeCycle { | 16 | +/// The [GetLifeCycle] |
17 | +/// | ||
18 | +/// ```dart | ||
19 | +/// class SomeController with GetLifeCycle { | ||
20 | +/// SomeController() { | ||
21 | +/// initLifeCycle(); | ||
22 | +/// } | ||
23 | +/// } | ||
24 | +/// ``` | ||
25 | +mixin GetLifeCycle { | ||
26 | + /// The `initLifeCycle` works as a constructor for the [GetLifeCycle] | ||
27 | + /// | ||
28 | + /// This method must be invoked in the constructor of the implementation | ||
29 | + void initLifeCycle() { | ||
30 | + onStart._callback = _onStart; | ||
31 | + onDelete._callback = _onDelete; | ||
32 | + } | ||
33 | + | ||
15 | /// Called at the exact moment the widget is allocated in memory. | 34 | /// Called at the exact moment the widget is allocated in memory. |
16 | /// It uses an internal "callable" type, to avoid any @overrides in subclases. | 35 | /// It uses an internal "callable" type, to avoid any @overrides in subclases. |
17 | /// This method should be internal and is required to define the | 36 | /// This method should be internal and is required to define the |
18 | /// lifetime cycle of the subclass. | 37 | /// lifetime cycle of the subclass. |
19 | final onStart = _InternalFinalCallback<void>(); | 38 | final onStart = _InternalFinalCallback<void>(); |
20 | 39 | ||
40 | + /// Internal callback that starts the cycle of this controller. | ||
21 | final onDelete = _InternalFinalCallback<void>(); | 41 | final onDelete = _InternalFinalCallback<void>(); |
22 | 42 | ||
23 | /// Called immediately after the widget is allocated in memory. | 43 | /// Called immediately after the widget is allocated in memory. |
24 | /// You might use this to initialize something for the controller. | 44 | /// You might use this to initialize something for the controller. |
45 | + @mustCallSuper | ||
25 | void onInit() {} | 46 | void onInit() {} |
26 | 47 | ||
27 | /// Called 1 frame after onInit(). It is the perfect place to enter | 48 | /// Called 1 frame after onInit(). It is the perfect place to enter |
28 | /// navigation events, like snackbar, dialogs, or a new route, or | 49 | /// navigation events, like snackbar, dialogs, or a new route, or |
29 | /// async request. | 50 | /// async request. |
51 | + @mustCallSuper | ||
30 | void onReady() {} | 52 | void onReady() {} |
31 | 53 | ||
32 | /// Called before [onDelete] method. [onClose] might be used to | 54 | /// Called before [onDelete] method. [onClose] might be used to |
@@ -35,7 +57,32 @@ mixin GetLifeCycle { | @@ -35,7 +57,32 @@ mixin GetLifeCycle { | ||
35 | /// Or dispose objects that can potentially create some memory leaks, | 57 | /// Or dispose objects that can potentially create some memory leaks, |
36 | /// like TextEditingControllers, AnimationControllers. | 58 | /// like TextEditingControllers, AnimationControllers. |
37 | /// Might be useful as well to persist some data on disk. | 59 | /// Might be useful as well to persist some data on disk. |
60 | + @mustCallSuper | ||
38 | void onClose() {} | 61 | void onClose() {} |
62 | + | ||
63 | + bool _initialized = false; | ||
64 | + | ||
65 | + /// Checks whether the controller has already been initialized. | ||
66 | + bool get initialized => _initialized; | ||
67 | + | ||
68 | + // Internal callback that starts the cycle of this controller. | ||
69 | + void _onStart() { | ||
70 | + if (_initialized) return; | ||
71 | + onInit(); | ||
72 | + _initialized = true; | ||
73 | + } | ||
74 | + | ||
75 | + bool _isClosed = false; | ||
76 | + | ||
77 | + /// Checks whether the controller has already been closed. | ||
78 | + bool get isClosed => _isClosed; | ||
79 | + | ||
80 | + // Internal callback that starts the cycle of this controller. | ||
81 | + void _onDelete() { | ||
82 | + if (_isClosed) return; | ||
83 | + _isClosed = true; | ||
84 | + onClose(); | ||
85 | + } | ||
39 | } | 86 | } |
40 | 87 | ||
41 | /// Allow track difference between GetxServices and GetxControllers | 88 | /// Allow track difference between GetxServices and GetxControllers |
1 | +import 'package:flutter/material.dart'; | ||
1 | import 'package:flutter/scheduler.dart'; | 2 | import 'package:flutter/scheduler.dart'; |
2 | import '../../../get_instance/src/lifecycle.dart'; | 3 | import '../../../get_instance/src/lifecycle.dart'; |
3 | 4 | ||
@@ -10,45 +11,24 @@ import '../../../get_instance/src/lifecycle.dart'; | @@ -10,45 +11,24 @@ import '../../../get_instance/src/lifecycle.dart'; | ||
10 | abstract class GetxService extends DisposableInterface with GetxServiceMixin {} | 11 | abstract class GetxService extends DisposableInterface with GetxServiceMixin {} |
11 | 12 | ||
12 | abstract class DisposableInterface with GetLifeCycle { | 13 | abstract class DisposableInterface with GetLifeCycle { |
13 | - bool _initialized = false; | ||
14 | - | ||
15 | - /// Checks whether the controller has already been initialized. | ||
16 | - bool get initialized => _initialized; | ||
17 | - | ||
18 | - bool _isClosed = false; | ||
19 | - | ||
20 | - /// Checks whether the controller has already been closed. | ||
21 | - bool get isClosed => _isClosed; | ||
22 | - | ||
23 | DisposableInterface() { | 14 | DisposableInterface() { |
24 | - onStart.callback = _onStart; | ||
25 | - onDelete.callback = _onDelete; | ||
26 | - } | ||
27 | - | ||
28 | - // Internal callback that starts the cycle of this controller. | ||
29 | - void _onStart() { | ||
30 | - if (_initialized) return; | ||
31 | - onInit(); | ||
32 | - _initialized = true; | ||
33 | - SchedulerBinding.instance?.addPostFrameCallback((_) => onReady()); | ||
34 | - } | ||
35 | - | ||
36 | - // Internal callback that starts the cycle of this controller. | ||
37 | - void _onDelete() { | ||
38 | - if (_isClosed) return; | ||
39 | - _isClosed = true; | ||
40 | - onClose(); | 15 | + initLifeCycle(); |
41 | } | 16 | } |
42 | 17 | ||
43 | /// Called immediately after the widget is allocated in memory. | 18 | /// Called immediately after the widget is allocated in memory. |
44 | /// You might use this to initialize something for the controller. | 19 | /// You might use this to initialize something for the controller. |
45 | @override | 20 | @override |
46 | - void onInit() {} | 21 | + @mustCallSuper |
22 | + void onInit() { | ||
23 | + super.onInit(); | ||
24 | + SchedulerBinding.instance?.addPostFrameCallback((_) => onReady()); | ||
25 | + } | ||
47 | 26 | ||
48 | /// Called 1 frame after onInit(). It is the perfect place to enter | 27 | /// Called 1 frame after onInit(). It is the perfect place to enter |
49 | /// navigation events, like snackbar, dialogs, or a new route, or | 28 | /// navigation events, like snackbar, dialogs, or a new route, or |
50 | /// async request. | 29 | /// async request. |
51 | @override | 30 | @override |
31 | + @mustCallSuper | ||
52 | void onReady() {} | 32 | void onReady() {} |
53 | 33 | ||
54 | /// Called before [onDelete] method. [onClose] might be used to | 34 | /// Called before [onDelete] method. [onClose] might be used to |
@@ -38,36 +38,17 @@ typedef Condition = bool Function(); | @@ -38,36 +38,17 @@ typedef Condition = bool Function(); | ||
38 | 38 | ||
39 | abstract class GetNotifier<T> extends Value<T> with GetLifeCycle { | 39 | abstract class GetNotifier<T> extends Value<T> with GetLifeCycle { |
40 | GetNotifier(T initial) : super(initial) { | 40 | GetNotifier(T initial) : super(initial) { |
41 | - onStart.callback = _onStart; | ||
42 | - onDelete.callback = _onDelete; | 41 | + initLifeCycle(); |
43 | _fillEmptyStatus(); | 42 | _fillEmptyStatus(); |
44 | } | 43 | } |
45 | 44 | ||
46 | - bool _initialized = false; | ||
47 | - | ||
48 | - /// Checks whether the controller has already been initialized. | ||
49 | - bool get initialized => _initialized; | ||
50 | - | ||
51 | - bool _isClosed = false; | ||
52 | - | ||
53 | - /// Checks whether the controller has already been closed. | ||
54 | - bool get isClosed => _isClosed; | ||
55 | - | ||
56 | - // Internal callback that starts the cycle of this controller. | ||
57 | - void _onStart() { | ||
58 | - if (_initialized) return; | ||
59 | - onInit(); | ||
60 | - _initialized = true; | 45 | + @override |
46 | + @mustCallSuper | ||
47 | + void onInit() { | ||
48 | + super.onInit(); | ||
61 | SchedulerBinding.instance?.addPostFrameCallback((_) => onReady()); | 49 | SchedulerBinding.instance?.addPostFrameCallback((_) => onReady()); |
62 | } | 50 | } |
63 | 51 | ||
64 | - // Internal callback that starts the cycle of this controller. | ||
65 | - void _onDelete() { | ||
66 | - if (_isClosed) return; | ||
67 | - _isClosed = true; | ||
68 | - onClose(); | ||
69 | - } | ||
70 | - | ||
71 | RxStatus _status; | 52 | RxStatus _status; |
72 | 53 | ||
73 | bool get isNullOrEmpty { | 54 | bool get isNullOrEmpty { |
@@ -4,11 +4,12 @@ version: 3.13.2 | @@ -4,11 +4,12 @@ version: 3.13.2 | ||
4 | homepage: https://github.com/jonataslaw/getx | 4 | homepage: https://github.com/jonataslaw/getx |
5 | 5 | ||
6 | environment: | 6 | environment: |
7 | - sdk: ">=2.8.0 <3.0.0" | 7 | + sdk: ">=2.10.0 <3.0.0" |
8 | 8 | ||
9 | dependencies: | 9 | dependencies: |
10 | flutter: | 10 | flutter: |
11 | sdk: flutter | 11 | sdk: flutter |
12 | + meta: 1.3.0-nullsafety.3 | ||
12 | 13 | ||
13 | dev_dependencies: | 14 | dev_dependencies: |
14 | flutter_test: | 15 | flutter_test: |
@@ -11,29 +11,7 @@ class Mock { | @@ -11,29 +11,7 @@ class Mock { | ||
11 | 11 | ||
12 | class DisposableController with GetLifeCycle { | 12 | class DisposableController with GetLifeCycle { |
13 | DisposableController() { | 13 | DisposableController() { |
14 | - onStart.callback = _onStart; | ||
15 | - onDelete.callback = _onDelete; | ||
16 | - } | ||
17 | - | ||
18 | - // Internal callback that starts the cycle of this controller. | ||
19 | - void _onStart() { | ||
20 | - if (initialized) return; | ||
21 | - onInit(); | ||
22 | - } | ||
23 | - | ||
24 | - // Internal callback that starts the cycle of this controller. | ||
25 | - void _onDelete() { | ||
26 | - if (isClosed) return; | ||
27 | - isClosed = true; | ||
28 | - onClose(); | ||
29 | - } | ||
30 | - | ||
31 | - bool initialized = false; | ||
32 | - | ||
33 | - bool isClosed = false; | ||
34 | - | ||
35 | - void onInit() async { | ||
36 | - initialized = true; | 14 | + initLifeCycle(); |
37 | } | 15 | } |
38 | } | 16 | } |
39 | 17 |
@@ -73,7 +73,6 @@ void main() { | @@ -73,7 +73,6 @@ void main() { | ||
73 | var expected = ''; | 73 | var expected = ''; |
74 | void logFunction(String prefix, dynamic value, String info, | 74 | void logFunction(String prefix, dynamic value, String info, |
75 | {bool isError = false}) { | 75 | {bool isError = false}) { |
76 | - print('algo'); | ||
77 | expected = '$prefix $value $info'.trim(); | 76 | expected = '$prefix $value $info'.trim(); |
78 | } | 77 | } |
79 | 78 |
-
Please register or login to post a comment