Committed by
GitHub
Merge pull request #11 from jonataslaw/master
update
Showing
48 changed files
with
499 additions
and
318 deletions
| @@ -12,6 +12,29 @@ assignees: jonataslaw | @@ -12,6 +12,29 @@ assignees: jonataslaw | ||
| 12 | **Describe the bug** | 12 | **Describe the bug** |
| 13 | A clear and concise description of what the bug is. | 13 | A clear and concise description of what the bug is. |
| 14 | 14 | ||
| 15 | +**Reproduction code | ||
| 16 | +NOTE: THIS IS MANDATORY, IF YOUR ISSUE DOES NOT CONTAIN IT, IT WILL BE CLOSED PRELIMINARY)** | ||
| 17 | + | ||
| 18 | +example: | ||
| 19 | + | ||
| 20 | +```dart | ||
| 21 | +void main() => runApp(MaterialApp(home: Home())); | ||
| 22 | + | ||
| 23 | +class Home extends StatelessWidget { | ||
| 24 | + final count = 0.obs; | ||
| 25 | + @override | ||
| 26 | + Widget build(context) => Scaffold( | ||
| 27 | + appBar: AppBar(title: Text("counter")), | ||
| 28 | + body: Center( | ||
| 29 | + child: Obx(() => Text("$count")), | ||
| 30 | + ), | ||
| 31 | + floatingActionButton: FloatingActionButton( | ||
| 32 | + child: Icon(Icons.add), | ||
| 33 | + onPressed: () => count.value++, | ||
| 34 | + )); | ||
| 35 | +} | ||
| 36 | +``` | ||
| 37 | + | ||
| 15 | **To Reproduce** | 38 | **To Reproduce** |
| 16 | Steps to reproduce the behavior: | 39 | Steps to reproduce the behavior: |
| 17 | 1. Go to '...' | 40 | 1. Go to '...' |
| @@ -219,7 +219,7 @@ void main() { | @@ -219,7 +219,7 @@ void main() { | ||
| 219 | Send data on route name | 219 | Send data on route name |
| 220 | 220 | ||
| 221 | ```dart | 221 | ```dart |
| 222 | -Get.toNamed("/second/34954"); | 222 | +Get.toNamed("/profile/34954"); |
| 223 | ``` | 223 | ``` |
| 224 | 224 | ||
| 225 | On second screen take the data by parameter | 225 | On second screen take the data by parameter |
| @@ -357,7 +357,7 @@ class User() { | @@ -357,7 +357,7 @@ class User() { | ||
| 357 | // on the controller file | 357 | // on the controller file |
| 358 | final user = User().obs; | 358 | final user = User().obs; |
| 359 | // when you need to update the user variable: | 359 | // when you need to update the user variable: |
| 360 | -user.update( (user) { // this parameter is the class itself taht you want to update | 360 | +user.update( (user) { // this parameter is the class itself that you want to update |
| 361 | user.name = 'Jonny'; | 361 | user.name = 'Jonny'; |
| 362 | user.age = 18; | 362 | user.age = 18; |
| 363 | }); | 363 | }); |
| 1 | +## [3.12.1] | ||
| 2 | +- Remove spaces whitespaces from dart files | ||
| 3 | + | ||
| 4 | +## [3.12.0] | ||
| 5 | +- Added BottomSheet Duration && Export SingleGetTickerProvider (@unacorbatanegra) | ||
| 6 | +- Improve docs from dependencies management (@ngxingyu) | ||
| 7 | +- Fix unknownRoute with null Custom Transition (@marcosfons) | ||
| 8 | +- Optimize capitalize method (@zl910627) | ||
| 9 | +- Added Chinese documentation (@idootop) | ||
| 10 | +- Added TextDirection property on GetMaterialApp to improve RTL layout (@justkawal) | ||
| 11 | +- Remove unnecessary files on git (@nipodemos) | ||
| 12 | +- Fix tags on Get.create() and GetWidget() (@roipeker) | ||
| 13 | +- Update mockito dependency on getTests | ||
| 14 | +- Added GetStatelessWidget, a StatelessWidget base to GetWidget with lifecycle control of controllers. Note: It's a base class, you don't need change to use it or change your GetView, GetWidget StatelessWidget to It. | ||
| 15 | + | ||
| 1 | ## [3.11.1] | 16 | ## [3.11.1] |
| 2 | - Fix docs | 17 | - Fix docs |
| 3 | 18 |
getx/LICENSE copy
deleted
100644 → 0
| 1 | -MIT License | ||
| 2 | - | ||
| 3 | -Copyright (c) 2019 Jonny Borges | ||
| 4 | - | ||
| 5 | -Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| 6 | -of this software and associated documentation files (the "Software"), to deal | ||
| 7 | -in the Software without restriction, including without limitation the rights | ||
| 8 | -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| 9 | -copies of the Software, and to permit persons to whom the Software is | ||
| 10 | -furnished to do so, subject to the following conditions: | ||
| 11 | - | ||
| 12 | -The above copyright notice and this permission notice shall be included in all | ||
| 13 | -copies or substantial portions of the Software. | ||
| 14 | - | ||
| 15 | -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 16 | -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 17 | -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| 18 | -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 19 | -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| 20 | -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
| 21 | -SOFTWARE. |
| 1 | +/// GetX is an extra-light and powerful multiplatform framework. | ||
| 2 | +/// It combines high performance state management, intelligent dependency | ||
| 3 | +/// injection, and route management in a quick and practical way. | ||
| 1 | library get; | 4 | library get; |
| 2 | 5 | ||
| 3 | export 'package:get_core/get_core.dart'; | 6 | export 'package:get_core/get_core.dart'; |
| 1 | -library get; | 1 | +/// Get State Manager is a light, modern and powerful state manager to Flutter |
| 2 | +library state_manager; | ||
| 2 | 3 | ||
| 3 | export 'package:get_rx/get_rx.dart'; | 4 | export 'package:get_rx/get_rx.dart'; |
| 4 | export 'package:get_state_manager/get_state_manager.dart'; | 5 | export 'package:get_state_manager/get_state_manager.dart'; |
| 1 | name: get | 1 | name: get |
| 2 | description: Open screens/snackbars/dialogs/bottomSheets without context, manage states and inject dependencies easily with GetX. | 2 | description: Open screens/snackbars/dialogs/bottomSheets without context, manage states and inject dependencies easily with GetX. |
| 3 | -version: 3.11.1 | 3 | +version: 3.12.1 |
| 4 | homepage: https://github.com/jonataslaw/getx | 4 | homepage: https://github.com/jonataslaw/getx |
| 5 | 5 | ||
| 6 | environment: | 6 | environment: |
| 1 | name: get_core | 1 | name: get_core |
| 2 | description: A base package from allow use resources from GetX™ framework. | 2 | description: A base package from allow use resources from GetX™ framework. |
| 3 | -version: 3.10.2 | 3 | +version: 3.12.0 |
| 4 | homepage: https://github.com/jonataslaw/getx | 4 | homepage: https://github.com/jonataslaw/getx |
| 5 | 5 | ||
| 6 | environment: | 6 | environment: |
| @@ -2,4 +2,4 @@ export 'package:get_core/get_core.dart'; | @@ -2,4 +2,4 @@ export 'package:get_core/get_core.dart'; | ||
| 2 | export 'src/bindings_interface.dart'; | 2 | export 'src/bindings_interface.dart'; |
| 3 | export 'src/extension_instance.dart'; | 3 | export 'src/extension_instance.dart'; |
| 4 | export 'src/get_instance.dart'; | 4 | export 'src/get_instance.dart'; |
| 5 | -export 'src/lifecircle.dart'; | 5 | +export 'src/lifecycle.dart'; |
| @@ -27,7 +27,7 @@ abstract class Bindings { | @@ -27,7 +27,7 @@ abstract class Bindings { | ||
| 27 | /// ``` | 27 | /// ``` |
| 28 | class BindingsBuilder<T> extends Bindings { | 28 | class BindingsBuilder<T> extends Bindings { |
| 29 | /// Register your dependencies in the [builder] callback. | 29 | /// Register your dependencies in the [builder] callback. |
| 30 | - final VoidCallback builder; | 30 | + final BindingBuilderCallback builder; |
| 31 | 31 | ||
| 32 | /// Shortcut to register 1 Controller with Get.put(), | 32 | /// Shortcut to register 1 Controller with Get.put(), |
| 33 | /// Prevents the issue of the fat arrow function with the constructor. | 33 | /// Prevents the issue of the fat arrow function with the constructor. |
| @@ -62,4 +62,4 @@ class BindingsBuilder<T> extends Bindings { | @@ -62,4 +62,4 @@ class BindingsBuilder<T> extends Bindings { | ||
| 62 | // typedef Snack = Function(); | 62 | // typedef Snack = Function(); |
| 63 | // typedef Modal = Function(); | 63 | // typedef Modal = Function(); |
| 64 | // typedef Route = Function(); | 64 | // typedef Route = Function(); |
| 65 | -typedef VoidCallback = void Function(); | 65 | +typedef BindingBuilderCallback = void Function(); |
| @@ -3,7 +3,7 @@ import 'dart:collection'; | @@ -3,7 +3,7 @@ import 'dart:collection'; | ||
| 3 | 3 | ||
| 4 | import 'package:get_core/get_core.dart'; | 4 | import 'package:get_core/get_core.dart'; |
| 5 | 5 | ||
| 6 | -import 'lifecircle.dart'; | 6 | +import 'lifecycle.dart'; |
| 7 | 7 | ||
| 8 | class GetInstance { | 8 | class GetInstance { |
| 9 | factory GetInstance() => _getInstance ??= GetInstance._(); | 9 | factory GetInstance() => _getInstance ??= GetInstance._(); |
| @@ -12,8 +12,6 @@ class GetInstance { | @@ -12,8 +12,6 @@ class GetInstance { | ||
| 12 | 12 | ||
| 13 | static GetInstance _getInstance; | 13 | static GetInstance _getInstance; |
| 14 | 14 | ||
| 15 | - // static final config = Get(); | ||
| 16 | - | ||
| 17 | /// Holds references to every registered Instance when using | 15 | /// Holds references to every registered Instance when using |
| 18 | /// [Get.put()] | 16 | /// [Get.put()] |
| 19 | static final Map<String, _InstanceBuilderFactory> _singl = {}; | 17 | static final Map<String, _InstanceBuilderFactory> _singl = {}; |
| @@ -142,7 +140,7 @@ class GetInstance { | @@ -142,7 +140,7 @@ class GetInstance { | ||
| 142 | /// using [Get.smartManagement] as [SmartManagement.full] or | 140 | /// using [Get.smartManagement] as [SmartManagement.full] or |
| 143 | /// [SmartManagement.keepFactory] | 141 | /// [SmartManagement.keepFactory] |
| 144 | /// Meant for internal usage of [GetPageRoute] and [GetDialogRoute] | 142 | /// Meant for internal usage of [GetPageRoute] and [GetDialogRoute] |
| 145 | - Future<void> removeDependencyByRoute(String routeName) async { | 143 | + void removeDependencyByRoute(String routeName) { |
| 146 | final keysToRemove = <String>[]; | 144 | final keysToRemove = <String>[]; |
| 147 | _routesKey.forEach((key, value) { | 145 | _routesKey.forEach((key, value) { |
| 148 | if (value == routeName) { | 146 | if (value == routeName) { |
| @@ -156,7 +154,7 @@ class GetInstance { | @@ -156,7 +154,7 @@ class GetInstance { | ||
| 156 | // assure the [DisposableInterface] instance holding a reference | 154 | // assure the [DisposableInterface] instance holding a reference |
| 157 | // to [onClose()] wasn't disposed. | 155 | // to [onClose()] wasn't disposed. |
| 158 | if (onClose != null) { | 156 | if (onClose != null) { |
| 159 | - await onClose(); | 157 | + onClose(); |
| 160 | } | 158 | } |
| 161 | } | 159 | } |
| 162 | _routesByCreate[routeName].clear(); | 160 | _routesByCreate[routeName].clear(); |
| @@ -164,7 +162,7 @@ class GetInstance { | @@ -164,7 +162,7 @@ class GetInstance { | ||
| 164 | } | 162 | } |
| 165 | 163 | ||
| 166 | for (final element in keysToRemove) { | 164 | for (final element in keysToRemove) { |
| 167 | - await delete(key: element); | 165 | + delete(key: element); |
| 168 | } | 166 | } |
| 169 | 167 | ||
| 170 | for (final element in keysToRemove) { | 168 | for (final element in keysToRemove) { |
| @@ -227,26 +225,26 @@ class GetInstance { | @@ -227,26 +225,26 @@ class GetInstance { | ||
| 227 | return i; | 225 | return i; |
| 228 | } | 226 | } |
| 229 | 227 | ||
| 230 | - // S putOrFind<S>(S Function() dep, {String tag}) { | ||
| 231 | - // final key = _getKey(S, tag); | 228 | + S putOrFind<S>(InstanceBuilderCallback<S> dep, {String tag}) { |
| 229 | + final key = _getKey(S, tag); | ||
| 232 | 230 | ||
| 233 | - // if (_singl.containsKey(key)) { | ||
| 234 | - // return _singl[key].getDependency() as S; | ||
| 235 | - // } else { | ||
| 236 | - // if (_factory.containsKey(key)) { | ||
| 237 | - // S _value = put<S>((_factory[key].builder() as S), tag: tag); | 231 | + if (_singl.containsKey(key)) { |
| 232 | + return _singl[key].getDependency() as S; | ||
| 233 | + } else { | ||
| 234 | + if (_factory.containsKey(key)) { | ||
| 235 | + final _value = put<S>((_factory[key].builder() as S), tag: tag); | ||
| 238 | 236 | ||
| 239 | - // if (Get.smartManagement != SmartManagement.keepFactory) { | ||
| 240 | - // if (!_factory[key].fenix) { | ||
| 241 | - // _factory.remove(key); | ||
| 242 | - // } | ||
| 243 | - // } | ||
| 244 | - // return _value; | ||
| 245 | - // } | 237 | + if (Get.smartManagement != SmartManagement.keepFactory) { |
| 238 | + if (!_factory[key].fenix) { | ||
| 239 | + _factory.remove(key); | ||
| 240 | + } | ||
| 241 | + } | ||
| 242 | + return _value; | ||
| 243 | + } | ||
| 246 | 244 | ||
| 247 | - // return GetInstance().put(dep(), tag: tag); | ||
| 248 | - // } | ||
| 249 | - // } | 245 | + return GetInstance().put(dep(), tag: tag); |
| 246 | + } | ||
| 247 | + } | ||
| 250 | 248 | ||
| 251 | /// Finds the registered type <[S]> (or [tag]) | 249 | /// Finds the registered type <[S]> (or [tag]) |
| 252 | /// In case of using Get.[create] to register a type <[S]> or [tag], | 250 | /// In case of using Get.[create] to register a type <[S]> or [tag], |
| @@ -258,9 +256,9 @@ class GetInstance { | @@ -258,9 +256,9 @@ class GetInstance { | ||
| 258 | if (isRegistered<S>(tag: tag)) { | 256 | if (isRegistered<S>(tag: tag)) { |
| 259 | if (_singl[key] == null) { | 257 | if (_singl[key] == null) { |
| 260 | if (tag == null) { | 258 | if (tag == null) { |
| 261 | - throw 'Class "$S" is not register'; | 259 | + throw 'Class "$S" is not registered'; |
| 262 | } else { | 260 | } else { |
| 263 | - throw 'Class "$S" with tag "$tag" is not register'; | 261 | + throw 'Class "$S" with tag "$tag" is not registered'; |
| 264 | } | 262 | } |
| 265 | } | 263 | } |
| 266 | 264 | ||
| @@ -307,16 +305,6 @@ class GetInstance { | @@ -307,16 +305,6 @@ class GetInstance { | ||
| 307 | return true; | 305 | return true; |
| 308 | } | 306 | } |
| 309 | 307 | ||
| 310 | -// Future<bool> delete<S>({ | ||
| 311 | -// String tag, | ||
| 312 | -// String key, | ||
| 313 | -// bool force = false, | ||
| 314 | -// }) async { | ||
| 315 | -// final s = await queue | ||
| 316 | -// .add<bool>(() async => dele<S>(tag: tag, key: key, force: force)); | ||
| 317 | -// return s; | ||
| 318 | -// } | ||
| 319 | - | ||
| 320 | /// Delete registered Class Instance [S] (or [tag]) and, closes any open | 308 | /// Delete registered Class Instance [S] (or [tag]) and, closes any open |
| 321 | /// controllers [DisposableInterface], cleans up the memory | 309 | /// controllers [DisposableInterface], cleans up the memory |
| 322 | /// | 310 | /// |
| @@ -333,7 +321,13 @@ class GetInstance { | @@ -333,7 +321,13 @@ class GetInstance { | ||
| 333 | /// - [key] For internal usage, is the processed key used to register | 321 | /// - [key] For internal usage, is the processed key used to register |
| 334 | /// the Instance. **don't use** it unless you know what you are doing. | 322 | /// the Instance. **don't use** it unless you know what you are doing. |
| 335 | /// - [force] Will delete an Instance even if marked as [permanent]. | 323 | /// - [force] Will delete an Instance even if marked as [permanent]. |
| 336 | - Future<bool> delete<S>({String tag, String key, bool force = false}) async { | 324 | + bool delete<S>({String tag, String key, bool force = false}) { |
| 325 | + // return _queue.secure<bool>(() { | ||
| 326 | + return _delete<S>(tag: tag, key: key, force: force); | ||
| 327 | + // }); | ||
| 328 | + } | ||
| 329 | + | ||
| 330 | + bool _delete<S>({String tag, String key, bool force = false}) { | ||
| 337 | final newKey = key ?? _getKey(S, tag); | 331 | final newKey = key ?? _getKey(S, tag); |
| 338 | 332 | ||
| 339 | if (!_singl.containsKey(newKey)) { | 333 | if (!_singl.containsKey(newKey)) { |
| @@ -356,7 +350,7 @@ class GetInstance { | @@ -356,7 +350,7 @@ class GetInstance { | ||
| 356 | return false; | 350 | return false; |
| 357 | } | 351 | } |
| 358 | if (i is GetLifeCycle) { | 352 | if (i is GetLifeCycle) { |
| 359 | - await i.onClose(); | 353 | + i.onClose(); |
| 360 | Get.log('"$newKey" onClose() called'); | 354 | Get.log('"$newKey" onClose() called'); |
| 361 | } | 355 | } |
| 362 | 356 |
| 1 | -import 'dart:async'; | ||
| 2 | - | ||
| 3 | /// Special callable class to keep the contract of a regular method, and avoid | 1 | /// Special callable class to keep the contract of a regular method, and avoid |
| 4 | /// overrides if you extend the class that uses it, as Dart has no final | 2 | /// overrides if you extend the class that uses it, as Dart has no final |
| 5 | /// methods. | 3 | /// methods. |
| @@ -27,7 +25,7 @@ abstract class GetLifeCycle { | @@ -27,7 +25,7 @@ abstract class GetLifeCycle { | ||
| 27 | /// Called 1 frame after onInit(). It is the perfect place to enter | 25 | /// Called 1 frame after onInit(). It is the perfect place to enter |
| 28 | /// navigation events, like snackbar, dialogs, or a new route, or | 26 | /// navigation events, like snackbar, dialogs, or a new route, or |
| 29 | /// async request. | 27 | /// async request. |
| 30 | - void onReady() async {} | 28 | + void onReady() {} |
| 31 | 29 | ||
| 32 | /// Called before [onDelete] method. [onClose] might be used to | 30 | /// Called before [onDelete] method. [onClose] might be used to |
| 33 | /// dispose resources used by the controller. Like closing events, | 31 | /// dispose resources used by the controller. Like closing events, |
| @@ -35,7 +33,7 @@ abstract class GetLifeCycle { | @@ -35,7 +33,7 @@ abstract class GetLifeCycle { | ||
| 35 | /// Or dispose objects that can potentially create some memory leaks, | 33 | /// Or dispose objects that can potentially create some memory leaks, |
| 36 | /// like TextEditingControllers, AnimationControllers. | 34 | /// like TextEditingControllers, AnimationControllers. |
| 37 | /// Might be useful as well to persist some data on disk. | 35 | /// Might be useful as well to persist some data on disk. |
| 38 | - FutureOr onClose() async {} | 36 | + void onClose() {} |
| 39 | } | 37 | } |
| 40 | 38 | ||
| 41 | /// Allow track difference between GetxServices and GetxControllers | 39 | /// Allow track difference between GetxServices and GetxControllers |
| 1 | name: get_instance | 1 | name: get_instance |
| 2 | description: A smart dependency injector to GetX™ framework. | 2 | description: A smart dependency injector to GetX™ framework. |
| 3 | -version: 3.10.2 | 3 | +version: 3.12.0 |
| 4 | homepage: https://github.com/jonataslaw/getx | 4 | homepage: https://github.com/jonataslaw/getx |
| 5 | 5 | ||
| 6 | environment: | 6 | environment: |
| @@ -753,6 +753,10 @@ extension GetNavigation on GetInterface { | @@ -753,6 +753,10 @@ extension GetNavigation on GetInterface { | ||
| 753 | } | 753 | } |
| 754 | } | 754 | } |
| 755 | 755 | ||
| 756 | + Future<T> showSnackbar<T>(GetBar snackbar) { | ||
| 757 | + return key.currentState.push(SnackRoute<T>(snack: snackbar)); | ||
| 758 | + } | ||
| 759 | + | ||
| 756 | void snackbar( | 760 | void snackbar( |
| 757 | String title, | 761 | String title, |
| 758 | String message, { | 762 | String message, { |
| @@ -802,7 +806,7 @@ extension GetNavigation on GetInterface { | @@ -802,7 +806,7 @@ extension GetNavigation on GetInterface { | ||
| 802 | Text( | 806 | Text( |
| 803 | title, | 807 | title, |
| 804 | style: TextStyle( | 808 | style: TextStyle( |
| 805 | - color: colorText ?? Colors.black, | 809 | + color: colorText ?? theme.iconTheme.color, |
| 806 | fontWeight: FontWeight.w800, | 810 | fontWeight: FontWeight.w800, |
| 807 | fontSize: 16, | 811 | fontSize: 16, |
| 808 | ), | 812 | ), |
| @@ -811,7 +815,7 @@ extension GetNavigation on GetInterface { | @@ -811,7 +815,7 @@ extension GetNavigation on GetInterface { | ||
| 811 | Text( | 815 | Text( |
| 812 | message, | 816 | message, |
| 813 | style: TextStyle( | 817 | style: TextStyle( |
| 814 | - color: colorText ?? Colors.black, | 818 | + color: colorText ?? theme.iconTheme.color, |
| 815 | fontWeight: FontWeight.w300, | 819 | fontWeight: FontWeight.w300, |
| 816 | fontSize: 14, | 820 | fontSize: 14, |
| 817 | ), | 821 | ), |
| @@ -912,14 +916,16 @@ extension GetNavigation on GetInterface { | @@ -912,14 +916,16 @@ extension GetNavigation on GetInterface { | ||
| 912 | } | 916 | } |
| 913 | 917 | ||
| 914 | void forceAppUpdate() { | 918 | void forceAppUpdate() { |
| 915 | - void rebuild(Element el) { | ||
| 916 | - el.markNeedsBuild(); | ||
| 917 | - el.visitChildren(rebuild); | 919 | + void restart(Element element) { |
| 920 | + element.markNeedsBuild(); | ||
| 921 | + element.visitChildren(restart); | ||
| 918 | } | 922 | } |
| 919 | 923 | ||
| 920 | - (context as Element).visitChildren(rebuild); | 924 | + restart(Get.context as Element); |
| 921 | } | 925 | } |
| 922 | 926 | ||
| 927 | + void appUpdate() => getxController.update(); | ||
| 928 | + | ||
| 923 | void changeTheme(ThemeData theme) { | 929 | void changeTheme(ThemeData theme) { |
| 924 | getxController.setTheme(theme); | 930 | getxController.setTheme(theme); |
| 925 | } | 931 | } |
| @@ -1025,8 +1031,9 @@ Since version 2.8 it is possible to access the properties | @@ -1025,8 +1031,9 @@ Since version 2.8 it is possible to access the properties | ||
| 1025 | bool get defaultOpaqueRoute => getxController.defaultOpaqueRoute; | 1031 | bool get defaultOpaqueRoute => getxController.defaultOpaqueRoute; |
| 1026 | 1032 | ||
| 1027 | Transition get defaultTransition => getxController.defaultTransition; | 1033 | Transition get defaultTransition => getxController.defaultTransition; |
| 1034 | + | ||
| 1028 | Duration get defaultTransitionDuration { | 1035 | Duration get defaultTransitionDuration { |
| 1029 | - return getxController.defaultDialogTransitionDuration; | 1036 | + return getxController.defaultTransitionDuration; |
| 1030 | } | 1037 | } |
| 1031 | 1038 | ||
| 1032 | Curve get defaultTransitionCurve => getxController.defaultTransitionCurve; | 1039 | Curve get defaultTransitionCurve => getxController.defaultTransitionCurve; |
| @@ -15,11 +15,12 @@ class GetMaterialController extends GetxController { | @@ -15,11 +15,12 @@ class GetMaterialController extends GetxController { | ||
| 15 | bool defaultOpaqueRoute = true; | 15 | bool defaultOpaqueRoute = true; |
| 16 | 16 | ||
| 17 | Transition defaultTransition; | 17 | Transition defaultTransition; |
| 18 | - Duration defaultTransitionDuration = Duration(milliseconds: 400); | 18 | + Duration defaultTransitionDuration = Duration(milliseconds: 300); |
| 19 | Curve defaultTransitionCurve = Curves.easeOutQuad; | 19 | Curve defaultTransitionCurve = Curves.easeOutQuad; |
| 20 | 20 | ||
| 21 | Curve defaultDialogTransitionCurve = Curves.easeOutQuad; | 21 | Curve defaultDialogTransitionCurve = Curves.easeOutQuad; |
| 22 | - Duration defaultDialogTransitionDuration = Duration(milliseconds: 400); | 22 | + |
| 23 | + Duration defaultDialogTransitionDuration = Duration(milliseconds: 300); | ||
| 23 | 24 | ||
| 24 | final routing = Routing(); | 25 | final routing = Routing(); |
| 25 | 26 |
| @@ -132,7 +132,7 @@ class GetMaterialApp extends StatelessWidget { | @@ -132,7 +132,7 @@ class GetMaterialApp extends StatelessWidget { | ||
| 132 | binding: unknownRoute.binding, | 132 | binding: unknownRoute.binding, |
| 133 | bindings: unknownRoute.bindings, | 133 | bindings: unknownRoute.bindings, |
| 134 | transitionDuration: | 134 | transitionDuration: |
| 135 | - (transitionDuration ?? unknownRoute.transitionDuration), | 135 | + (unknownRoute.transitionDuration ?? Get.defaultTransitionDuration), |
| 136 | transition: unknownRoute.transition, | 136 | transition: unknownRoute.transition, |
| 137 | popGesture: unknownRoute.popGesture, | 137 | popGesture: unknownRoute.popGesture, |
| 138 | fullscreenDialog: unknownRoute.fullscreenDialog, | 138 | fullscreenDialog: unknownRoute.fullscreenDialog, |
| @@ -150,7 +150,7 @@ class GetMaterialApp extends StatelessWidget { | @@ -150,7 +150,7 @@ class GetMaterialApp extends StatelessWidget { | ||
| 150 | binding: match.route.binding, | 150 | binding: match.route.binding, |
| 151 | bindings: match.route.bindings, | 151 | bindings: match.route.bindings, |
| 152 | transitionDuration: | 152 | transitionDuration: |
| 153 | - (transitionDuration ?? match.route.transitionDuration), | 153 | + (match.route.transitionDuration ?? Get.defaultTransitionDuration), |
| 154 | transition: match.route.transition, | 154 | transition: match.route.transition, |
| 155 | popGesture: match.route.popGesture, | 155 | popGesture: match.route.popGesture, |
| 156 | fullscreenDialog: match.route.fullscreenDialog, | 156 | fullscreenDialog: match.route.fullscreenDialog, |
| @@ -171,7 +171,7 @@ class GetMaterialApp extends StatelessWidget { | @@ -171,7 +171,7 @@ class GetMaterialApp extends StatelessWidget { | ||
| 171 | binding: match.route.binding, | 171 | binding: match.route.binding, |
| 172 | bindings: match.route.bindings, | 172 | bindings: match.route.bindings, |
| 173 | transitionDuration: | 173 | transitionDuration: |
| 174 | - (transitionDuration ?? match.route.transitionDuration), | 174 | + (match.route.transitionDuration ?? Get.defaultTransitionDuration), |
| 175 | transition: match.route.transition, | 175 | transition: match.route.transition, |
| 176 | popGesture: match.route.popGesture, | 176 | popGesture: match.route.popGesture, |
| 177 | fullscreenDialog: match.route.fullscreenDialog, | 177 | fullscreenDialog: match.route.fullscreenDialog, |
| @@ -14,7 +14,7 @@ import 'transitions_type.dart'; | @@ -14,7 +14,7 @@ import 'transitions_type.dart'; | ||
| 14 | class GetPageRoute<T> extends PageRoute<T> { | 14 | class GetPageRoute<T> extends PageRoute<T> { |
| 15 | GetPageRoute({ | 15 | GetPageRoute({ |
| 16 | RouteSettings settings, | 16 | RouteSettings settings, |
| 17 | - this.transitionDuration = const Duration(milliseconds: 400), | 17 | + this.transitionDuration = const Duration(milliseconds: 300), |
| 18 | this.opaque = true, | 18 | this.opaque = true, |
| 19 | this.parameter, | 19 | this.parameter, |
| 20 | this.curve, | 20 | this.curve, |
| @@ -31,7 +31,7 @@ class GetPage { | @@ -31,7 +31,7 @@ class GetPage { | ||
| 31 | this.alignment, | 31 | this.alignment, |
| 32 | this.parameter, | 32 | this.parameter, |
| 33 | this.opaque = true, | 33 | this.opaque = true, |
| 34 | - this.transitionDuration = const Duration(milliseconds: 400), | 34 | + this.transitionDuration, |
| 35 | this.popGesture, | 35 | this.popGesture, |
| 36 | this.binding, | 36 | this.binding, |
| 37 | this.bindings, | 37 | this.bindings, |
| @@ -195,15 +195,10 @@ class GetBar<T extends Object> extends StatefulWidget { | @@ -195,15 +195,10 @@ class GetBar<T extends Object> extends StatefulWidget { | ||
| 195 | /// Every other widget is ignored if this is not null. | 195 | /// Every other widget is ignored if this is not null. |
| 196 | final Form userInputForm; | 196 | final Form userInputForm; |
| 197 | 197 | ||
| 198 | - SnackRoute<T> _snackRoute; | ||
| 199 | - | ||
| 200 | /// Show the snack. Kicks in [SnackbarStatus.OPENING] state | 198 | /// Show the snack. Kicks in [SnackbarStatus.OPENING] state |
| 201 | /// followed by [SnackbarStatus.OPEN] | 199 | /// followed by [SnackbarStatus.OPEN] |
| 202 | - Future<T> show() async { | ||
| 203 | - _snackRoute = showSnack<T>( | ||
| 204 | - snack: this, | ||
| 205 | - ) as SnackRoute<T>; | ||
| 206 | - return await Get.key.currentState.push(_snackRoute); | 200 | + Future<T> show<T>() async { |
| 201 | + return Get.key.currentState.push(SnackRoute<T>(snack: this)); | ||
| 207 | } | 202 | } |
| 208 | 203 | ||
| 209 | @override | 204 | @override |
| @@ -43,7 +43,6 @@ class SnackRoute<T> extends OverlayRoute<T> { | @@ -43,7 +43,6 @@ class SnackRoute<T> extends OverlayRoute<T> { | ||
| 43 | GetBar snack; | 43 | GetBar snack; |
| 44 | Builder _builder; | 44 | Builder _builder; |
| 45 | 45 | ||
| 46 | - Future<T> get completed => _transitionCompleter.future; | ||
| 47 | final Completer<T> _transitionCompleter = Completer<T>(); | 46 | final Completer<T> _transitionCompleter = Completer<T>(); |
| 48 | 47 | ||
| 49 | SnackbarStatusCallback _snackbarStatus; | 48 | SnackbarStatusCallback _snackbarStatus; |
| @@ -164,14 +163,11 @@ class SnackRoute<T> extends OverlayRoute<T> { | @@ -164,14 +163,11 @@ class SnackRoute<T> extends OverlayRoute<T> { | ||
| 164 | 163 | ||
| 165 | /// The animation that drives the route's transition and the previous route's | 164 | /// The animation that drives the route's transition and the previous route's |
| 166 | /// forward transition. | 165 | /// forward transition. |
| 167 | - Animation<Alignment> get animation => _animation; | ||
| 168 | Animation<Alignment> _animation; | 166 | Animation<Alignment> _animation; |
| 169 | 167 | ||
| 170 | /// The animation controller that the route uses to drive the transitions. | 168 | /// The animation controller that the route uses to drive the transitions. |
| 171 | /// | 169 | /// |
| 172 | /// The animation itself is exposed by the [animation] property. | 170 | /// The animation itself is exposed by the [animation] property. |
| 173 | - @protected | ||
| 174 | - AnimationController get controller => _controller; | ||
| 175 | AnimationController _controller; | 171 | AnimationController _controller; |
| 176 | 172 | ||
| 177 | /// Called to create the animation controller that will drive the transitions | 173 | /// Called to create the animation controller that will drive the transitions |
| @@ -235,7 +231,6 @@ class SnackRoute<T> extends OverlayRoute<T> { | @@ -235,7 +231,6 @@ class SnackRoute<T> extends OverlayRoute<T> { | ||
| 235 | T _result; | 231 | T _result; |
| 236 | SnackbarStatus currentStatus; | 232 | SnackbarStatus currentStatus; |
| 237 | 233 | ||
| 238 | - //copy of `routes.dart` | ||
| 239 | void _handleStatusChanged(AnimationStatus status) { | 234 | void _handleStatusChanged(AnimationStatus status) { |
| 240 | switch (status) { | 235 | switch (status) { |
| 241 | case AnimationStatus.completed: | 236 | case AnimationStatus.completed: |
| @@ -396,16 +391,4 @@ class SnackRoute<T> extends OverlayRoute<T> { | @@ -396,16 +391,4 @@ class SnackRoute<T> extends OverlayRoute<T> { | ||
| 396 | 391 | ||
| 397 | /// A short description of this route useful for debugging. | 392 | /// A short description of this route useful for debugging. |
| 398 | String get debugLabel => '$runtimeType'; | 393 | String get debugLabel => '$runtimeType'; |
| 399 | - | ||
| 400 | - @override | ||
| 401 | - String toString() => '$runtimeType(animation: $_controller)'; | ||
| 402 | -} | ||
| 403 | - | ||
| 404 | -SnackRoute showSnack<T>({@required GetBar snack}) { | ||
| 405 | - assert(snack != null); | ||
| 406 | - | ||
| 407 | - return SnackRoute<T>( | ||
| 408 | - snack: snack, | ||
| 409 | - settings: RouteSettings(name: "snackbar"), | ||
| 410 | - ); | ||
| 411 | } | 394 | } |
| 1 | name: get_navigation | 1 | name: get_navigation |
| 2 | description: Open Screens, bottomsheets, dialogs, e snackbars with no context using GetX™ framework. | 2 | description: Open Screens, bottomsheets, dialogs, e snackbars with no context using GetX™ framework. |
| 3 | -version: 3.10.2 | 3 | +version: 3.12.0 |
| 4 | homepage: https://github.com/jonataslaw/getx | 4 | homepage: https://github.com/jonataslaw/getx |
| 5 | 5 | ||
| 6 | environment: | 6 | environment: |
| 1 | import 'dart:async'; | 1 | import 'dart:async'; |
| 2 | import 'dart:collection'; | 2 | import 'dart:collection'; |
| 3 | +import 'package:meta/meta.dart'; | ||
| 4 | + | ||
| 3 | import '../rx_core/rx_interface.dart'; | 5 | import '../rx_core/rx_interface.dart'; |
| 4 | part 'rx_num.dart'; | 6 | part 'rx_num.dart'; |
| 5 | 7 | ||
| @@ -9,7 +11,10 @@ part 'rx_num.dart'; | @@ -9,7 +11,10 @@ part 'rx_num.dart'; | ||
| 9 | RxInterface getObs; | 11 | RxInterface getObs; |
| 10 | 12 | ||
| 11 | /// Base Rx class that manages all the stream logic for any Type. | 13 | /// Base Rx class that manages all the stream logic for any Type. |
| 12 | -class _RxImpl<T> implements RxInterface<T> { | 14 | +abstract class _RxImpl<T> implements RxInterface<T> { |
| 15 | + _RxImpl(T initial) { | ||
| 16 | + _value = initial; | ||
| 17 | + } | ||
| 13 | StreamController<T> subject = StreamController<T>.broadcast(); | 18 | StreamController<T> subject = StreamController<T>.broadcast(); |
| 14 | final _subscriptions = HashMap<Stream<T>, StreamSubscription>(); | 19 | final _subscriptions = HashMap<Stream<T>, StreamSubscription>(); |
| 15 | 20 | ||
| @@ -181,9 +186,7 @@ class _RxImpl<T> implements RxInterface<T> { | @@ -181,9 +186,7 @@ class _RxImpl<T> implements RxInterface<T> { | ||
| 181 | 186 | ||
| 182 | /// Rx class for `bool` Type. | 187 | /// Rx class for `bool` Type. |
| 183 | class RxBool extends _RxImpl<bool> { | 188 | class RxBool extends _RxImpl<bool> { |
| 184 | - RxBool([bool initial]) { | ||
| 185 | - _value = initial; | ||
| 186 | - } | 189 | + RxBool([bool initial]) : super(initial); |
| 187 | 190 | ||
| 188 | bool operator &(bool other) => other && value; | 191 | bool operator &(bool other) => other && value; |
| 189 | 192 | ||
| @@ -208,9 +211,7 @@ class RxBool extends _RxImpl<bool> { | @@ -208,9 +211,7 @@ class RxBool extends _RxImpl<bool> { | ||
| 208 | 211 | ||
| 209 | /// Rx class for `String` Type. | 212 | /// Rx class for `String` Type. |
| 210 | class RxString extends _RxImpl<String> { | 213 | class RxString extends _RxImpl<String> { |
| 211 | - RxString([String initial]) { | ||
| 212 | - _value = initial; | ||
| 213 | - } | 214 | + RxString([String initial]) : super(initial); |
| 214 | 215 | ||
| 215 | String operator +(String val) => _value + val; | 216 | String operator +(String val) => _value + val; |
| 216 | } | 217 | } |
| @@ -220,9 +221,7 @@ class RxString extends _RxImpl<String> { | @@ -220,9 +221,7 @@ class RxString extends _RxImpl<String> { | ||
| 220 | /// For example, any custom "Model" class, like User().obs will use `Rx` as | 221 | /// For example, any custom "Model" class, like User().obs will use `Rx` as |
| 221 | /// wrapper. | 222 | /// wrapper. |
| 222 | class Rx<T> extends _RxImpl<T> { | 223 | class Rx<T> extends _RxImpl<T> { |
| 223 | - Rx([T initial]) { | ||
| 224 | - _value = initial; | ||
| 225 | - } | 224 | + Rx([T initial]) : super(initial); |
| 226 | 225 | ||
| 227 | // TODO: Look for a way to throw the Exception with proper details when the | 226 | // TODO: Look for a way to throw the Exception with proper details when the |
| 228 | // value [T] doesn't implement toJson(). | 227 | // value [T] doesn't implement toJson(). |
| @@ -230,6 +229,81 @@ class Rx<T> extends _RxImpl<T> { | @@ -230,6 +229,81 @@ class Rx<T> extends _RxImpl<T> { | ||
| 230 | dynamic toJson() => (value as dynamic)?.toJson(); | 229 | dynamic toJson() => (value as dynamic)?.toJson(); |
| 231 | } | 230 | } |
| 232 | 231 | ||
| 232 | +enum RxStatus { loading, error, success } | ||
| 233 | + | ||
| 234 | +/// It's Experimental class, the Api can be change | ||
| 235 | +abstract class RxState<T> extends _RxImpl<T> { | ||
| 236 | + RxState(T initial) : super(initial) { | ||
| 237 | + _fillEmptyStatus(); | ||
| 238 | + } | ||
| 239 | + | ||
| 240 | + RxStatus _status; | ||
| 241 | + | ||
| 242 | + bool get isNullOrEmpty { | ||
| 243 | + if (_value == null) return true; | ||
| 244 | + dynamic val = _value; | ||
| 245 | + var result = false; | ||
| 246 | + if (val is Iterable) { | ||
| 247 | + result = val.isEmpty; | ||
| 248 | + } else if (val is String) { | ||
| 249 | + result = val.isEmpty; | ||
| 250 | + } else if (val is Map) { | ||
| 251 | + result = val.isEmpty; | ||
| 252 | + } | ||
| 253 | + return result; | ||
| 254 | + } | ||
| 255 | + | ||
| 256 | + void _fillEmptyStatus() { | ||
| 257 | + _status = isNullOrEmpty ? RxStatus.loading : RxStatus.success; | ||
| 258 | + } | ||
| 259 | + | ||
| 260 | + RxStatus get status { | ||
| 261 | + return _status; | ||
| 262 | + } | ||
| 263 | + | ||
| 264 | + bool get isLoading => _status == RxStatus.loading; | ||
| 265 | + bool get hasError => _status == RxStatus.error; | ||
| 266 | + bool get hasData => _status == RxStatus.success; | ||
| 267 | + | ||
| 268 | + @protected | ||
| 269 | + void refresh() { | ||
| 270 | + subject.add(_value); | ||
| 271 | + } | ||
| 272 | + | ||
| 273 | + @protected | ||
| 274 | + void update(void fn(T val)) { | ||
| 275 | + fn(_value); | ||
| 276 | + subject.add(_value); | ||
| 277 | + } | ||
| 278 | + | ||
| 279 | + @protected | ||
| 280 | + T call([T v]) { | ||
| 281 | + if (v != null) value = v; | ||
| 282 | + return value; | ||
| 283 | + } | ||
| 284 | + | ||
| 285 | + @protected | ||
| 286 | + set value(T val) { | ||
| 287 | + if (_value == val && !firstRebuild) return; | ||
| 288 | + firstRebuild = false; | ||
| 289 | + _value = val; | ||
| 290 | + subject.add(_value); | ||
| 291 | + } | ||
| 292 | + | ||
| 293 | + @protected | ||
| 294 | + void change(T newState, {RxStatus status}) { | ||
| 295 | + if (status != null) { | ||
| 296 | + _status = status; | ||
| 297 | + } | ||
| 298 | + if (newState != _value) { | ||
| 299 | + value = newState; | ||
| 300 | + } | ||
| 301 | + } | ||
| 302 | + | ||
| 303 | + @override | ||
| 304 | + dynamic toJson() => (value as dynamic)?.toJson(); | ||
| 305 | +} | ||
| 306 | + | ||
| 233 | extension StringExtension on String { | 307 | extension StringExtension on String { |
| 234 | /// Returns a `RxString` with [this] `String` as initial value. | 308 | /// Returns a `RxString` with [this] `String` as initial value. |
| 235 | RxString get obs => RxString(this); | 309 | RxString get obs => RxString(this); |
| 1 | part of 'rx_impl.dart'; | 1 | part of 'rx_impl.dart'; |
| 2 | 2 | ||
| 3 | /// Base Rx class for all num Rx's. | 3 | /// Base Rx class for all num Rx's. |
| 4 | -class _BaseRxNum<T extends num> extends _RxImpl<T> { | 4 | +abstract class _BaseRxNum<T extends num> extends _RxImpl<T> { |
| 5 | + _BaseRxNum(T initial) : super(initial); | ||
| 6 | + | ||
| 5 | /// Addition operator. */ | 7 | /// Addition operator. */ |
| 6 | 8 | ||
| 7 | /// Multiplication operator. | 9 | /// Multiplication operator. |
| @@ -267,6 +269,8 @@ class _BaseRxNum<T extends num> extends _RxImpl<T> { | @@ -267,6 +269,8 @@ class _BaseRxNum<T extends num> extends _RxImpl<T> { | ||
| 267 | } | 269 | } |
| 268 | 270 | ||
| 269 | class RxNum extends _BaseRxNum<num> { | 271 | class RxNum extends _BaseRxNum<num> { |
| 272 | + RxNum(num initial) : super(initial); | ||
| 273 | + | ||
| 270 | num operator +(num other) { | 274 | num operator +(num other) { |
| 271 | value += other; | 275 | value += other; |
| 272 | return value; | 276 | return value; |
| @@ -280,9 +284,7 @@ class RxNum extends _BaseRxNum<num> { | @@ -280,9 +284,7 @@ class RxNum extends _BaseRxNum<num> { | ||
| 280 | } | 284 | } |
| 281 | 285 | ||
| 282 | class RxDouble extends _BaseRxNum<double> { | 286 | class RxDouble extends _BaseRxNum<double> { |
| 283 | - RxDouble([double initial]) { | ||
| 284 | - value = initial; | ||
| 285 | - } | 287 | + RxDouble([double initial]) : super(initial); |
| 286 | 288 | ||
| 287 | /// Addition operator. | 289 | /// Addition operator. |
| 288 | RxDouble operator +(num other) { | 290 | RxDouble operator +(num other) { |
| @@ -392,9 +394,7 @@ class RxDouble extends _BaseRxNum<double> { | @@ -392,9 +394,7 @@ class RxDouble extends _BaseRxNum<double> { | ||
| 392 | } | 394 | } |
| 393 | 395 | ||
| 394 | class RxInt extends _BaseRxNum<int> { | 396 | class RxInt extends _BaseRxNum<int> { |
| 395 | - RxInt([int initial]) { | ||
| 396 | - value = initial; | ||
| 397 | - } | 397 | + RxInt([int initial]) : super(initial); |
| 398 | 398 | ||
| 399 | /// Addition operator. | 399 | /// Addition operator. |
| 400 | RxInt operator +(int other) { | 400 | RxInt operator +(int other) { |
| 1 | name: get_rx | 1 | name: get_rx |
| 2 | description: A set of powerful tools to provide reactive programming for the GetX™ framework. | 2 | description: A set of powerful tools to provide reactive programming for the GetX™ framework. |
| 3 | -version: 3.10.2 | 3 | +version: 3.12.0 |
| 4 | homepage: https://github.com/jonataslaw/getx | 4 | homepage: https://github.com/jonataslaw/getx |
| 5 | 5 | ||
| 6 | environment: | 6 | environment: |
| @@ -24,4 +24,4 @@ dependencies: | @@ -24,4 +24,4 @@ dependencies: | ||
| 24 | dev_dependencies: | 24 | dev_dependencies: |
| 25 | test: ">=1.0.0 <2.0.0" | 25 | test: ">=1.0.0 <2.0.0" |
| 26 | test_coverage: ">=0.4.3 <1.0.0" | 26 | test_coverage: ">=0.4.3 <1.0.0" |
| 27 | - | ||
| 27 | + |
| 1 | -import 'dart:async'; | ||
| 2 | - | ||
| 3 | import 'package:flutter/scheduler.dart'; | 1 | import 'package:flutter/scheduler.dart'; |
| 4 | import 'package:get_instance/get_instance.dart'; | 2 | import 'package:get_instance/get_instance.dart'; |
| 5 | 3 | ||
| @@ -37,7 +35,7 @@ abstract class DisposableInterface extends GetLifeCycle { | @@ -37,7 +35,7 @@ abstract class DisposableInterface extends GetLifeCycle { | ||
| 37 | /// navigation events, like snackbar, dialogs, or a new route, or | 35 | /// navigation events, like snackbar, dialogs, or a new route, or |
| 38 | /// async request. | 36 | /// async request. |
| 39 | @override | 37 | @override |
| 40 | - void onReady() async {} | 38 | + void onReady() {} |
| 41 | 39 | ||
| 42 | /// Called before [onDelete] method. [onClose] might be used to | 40 | /// Called before [onDelete] method. [onClose] might be used to |
| 43 | /// dispose resources used by the controller. Like closing events, | 41 | /// dispose resources used by the controller. Like closing events, |
| @@ -46,5 +44,5 @@ abstract class DisposableInterface extends GetLifeCycle { | @@ -46,5 +44,5 @@ abstract class DisposableInterface extends GetLifeCycle { | ||
| 46 | /// like TextEditingControllers, AnimationControllers. | 44 | /// like TextEditingControllers, AnimationControllers. |
| 47 | /// Might be useful as well to persist some data on disk. | 45 | /// Might be useful as well to persist some data on disk. |
| 48 | @override | 46 | @override |
| 49 | - FutureOr onClose() async {} | 47 | + void onClose() {} |
| 50 | } | 48 | } |
| @@ -6,8 +6,11 @@ import 'package:get_instance/get_instance.dart'; | @@ -6,8 +6,11 @@ import 'package:get_instance/get_instance.dart'; | ||
| 6 | import 'package:get_rx/get_rx.dart'; | 6 | import 'package:get_rx/get_rx.dart'; |
| 7 | import '../../get_state_manager.dart'; | 7 | import '../../get_state_manager.dart'; |
| 8 | 8 | ||
| 9 | +typedef GetXControllerBuilder<T extends DisposableInterface> = Widget Function( | ||
| 10 | + T controller); | ||
| 11 | + | ||
| 9 | class GetX<T extends DisposableInterface> extends StatefulWidget { | 12 | class GetX<T extends DisposableInterface> extends StatefulWidget { |
| 10 | - final Widget Function(T) builder; | 13 | + final GetXControllerBuilder<T> builder; |
| 11 | final bool global; | 14 | final bool global; |
| 12 | 15 | ||
| 13 | // final Stream Function(T) stream; | 16 | // final Stream Function(T) stream; |
| 1 | import 'dart:collection'; | 1 | import 'dart:collection'; |
| 2 | - | ||
| 3 | import 'package:flutter/material.dart'; | 2 | import 'package:flutter/material.dart'; |
| 4 | import 'package:get_core/get_core.dart'; | 3 | import 'package:get_core/get_core.dart'; |
| 5 | import 'package:get_instance/get_instance.dart'; | 4 | import 'package:get_instance/get_instance.dart'; |
| @@ -23,16 +22,14 @@ typedef GetStateUpdate = void Function(); | @@ -23,16 +22,14 @@ typedef GetStateUpdate = void Function(); | ||
| 23 | /// Avoids the potential (but extremely unlikely) issue of having | 22 | /// Avoids the potential (but extremely unlikely) issue of having |
| 24 | /// the Widget in a dispose() state, and abstracts the | 23 | /// the Widget in a dispose() state, and abstracts the |
| 25 | /// API from the ugly fn((){}). | 24 | /// API from the ugly fn((){}). |
| 26 | -// TODO: check performance HIT for the extra method call. | ||
| 27 | mixin GetStateUpdaterMixin<T extends StatefulWidget> on State<T> { | 25 | mixin GetStateUpdaterMixin<T extends StatefulWidget> on State<T> { |
| 28 | // To avoid the creation of an anonym function to be GC later. | 26 | // To avoid the creation of an anonym function to be GC later. |
| 29 | // ignore: prefer_function_declarations_over_variables | 27 | // ignore: prefer_function_declarations_over_variables |
| 30 | - static final VoidCallback _stateCallback = () {}; | ||
| 31 | 28 | ||
| 32 | /// Experimental method to replace setState((){}); | 29 | /// Experimental method to replace setState((){}); |
| 33 | /// Used with GetStateUpdate. | 30 | /// Used with GetStateUpdate. |
| 34 | void getUpdate() { | 31 | void getUpdate() { |
| 35 | - if (mounted) setState(_stateCallback); | 32 | + if (mounted) setState(() {}); |
| 36 | } | 33 | } |
| 37 | } | 34 | } |
| 38 | 35 | ||
| @@ -123,8 +120,11 @@ class GetxController extends DisposableInterface { | @@ -123,8 +120,11 @@ class GetxController extends DisposableInterface { | ||
| 123 | /// } | 120 | /// } |
| 124 | } | 121 | } |
| 125 | 122 | ||
| 123 | +typedef GetControllerBuilder<T extends DisposableInterface> = Widget Function( | ||
| 124 | + T controller); | ||
| 125 | + | ||
| 126 | class GetBuilder<T extends GetxController> extends StatefulWidget { | 126 | class GetBuilder<T extends GetxController> extends StatefulWidget { |
| 127 | - final Widget Function(T) builder; | 127 | + final GetControllerBuilder<T> builder; |
| 128 | final bool global; | 128 | final bool global; |
| 129 | final String id; | 129 | final String id; |
| 130 | final String tag; | 130 | final String tag; |
| @@ -189,9 +189,10 @@ class _GetBuilderState<T extends GetxController> extends State<GetBuilder<T>> | @@ -189,9 +189,10 @@ class _GetBuilderState<T extends GetxController> extends State<GetBuilder<T>> | ||
| 189 | controller?.onStart(); | 189 | controller?.onStart(); |
| 190 | } | 190 | } |
| 191 | 191 | ||
| 192 | - if (widget.global && Get.smartManagement == SmartManagement.onlyBuilder) { | ||
| 193 | - controller?.onStart(); | ||
| 194 | - } | 192 | + // if (widget.global && Get.smartManagement == |
| 193 | + //SmartManagement.onlyBuilder) { | ||
| 194 | + // controller?.onStart(); | ||
| 195 | + // } | ||
| 195 | _subscribeToController(); | 196 | _subscribeToController(); |
| 196 | } | 197 | } |
| 197 | 198 | ||
| @@ -269,3 +270,36 @@ class Value<T> extends GetxController { | @@ -269,3 +270,36 @@ class Value<T> extends GetxController { | ||
| 269 | update(); | 270 | update(); |
| 270 | } | 271 | } |
| 271 | } | 272 | } |
| 273 | + | ||
| 274 | +/// It's Experimental class, the Api can be change | ||
| 275 | +abstract class GetState<T> extends GetxController { | ||
| 276 | + GetState(T initialValue) { | ||
| 277 | + _state = initialValue; | ||
| 278 | + } | ||
| 279 | + | ||
| 280 | + // StreamController<T> _subject; | ||
| 281 | + | ||
| 282 | + // @override | ||
| 283 | + // void onClose() { | ||
| 284 | + // _subject?.close(); | ||
| 285 | + // } | ||
| 286 | + | ||
| 287 | + // Stream<T> get stream { | ||
| 288 | + // if (_subject == null) { | ||
| 289 | + // _subject = StreamController<T>.broadcast(); | ||
| 290 | + // } | ||
| 291 | + // return _subject.stream; | ||
| 292 | + // } | ||
| 293 | + | ||
| 294 | + T _state; | ||
| 295 | + | ||
| 296 | + T get state => _state; | ||
| 297 | + | ||
| 298 | + @protected | ||
| 299 | + void change(T newState) { | ||
| 300 | + if (newState != _state) { | ||
| 301 | + _state = newState; | ||
| 302 | + update(); | ||
| 303 | + } | ||
| 304 | + } | ||
| 305 | +} |
| 1 | import 'package:flutter/widgets.dart'; | 1 | import 'package:flutter/widgets.dart'; |
| 2 | import 'package:get_instance/get_instance.dart'; | 2 | import 'package:get_instance/get_instance.dart'; |
| 3 | +import '../rx_flutter/rx_disposable.dart'; | ||
| 3 | 4 | ||
| 4 | /// GetView is a great way of quickly access your Controller | 5 | /// GetView is a great way of quickly access your Controller |
| 5 | /// without having to call Get.find<AwesomeController>() yourself. | 6 | /// without having to call Get.find<AwesomeController>() yourself. |
| @@ -38,7 +39,8 @@ abstract class GetView<T> extends StatelessWidget { | @@ -38,7 +39,8 @@ abstract class GetView<T> extends StatelessWidget { | ||
| 38 | Widget build(BuildContext context); | 39 | Widget build(BuildContext context); |
| 39 | } | 40 | } |
| 40 | 41 | ||
| 41 | -abstract class GetWidget<T extends GetLifeCycle> extends GetStatelessWidget { | 42 | +abstract class GetWidget<T extends DisposableInterface> |
| 43 | + extends GetStatelessWidget { | ||
| 42 | GetWidget({Key key}) : super(key: key); | 44 | GetWidget({Key key}) : super(key: key); |
| 43 | 45 | ||
| 44 | final Set<T> _value = <T>{}; | 46 | final Set<T> _value = <T>{}; |
| @@ -91,18 +93,23 @@ class GetStatelessElement extends ComponentElement { | @@ -91,18 +93,23 @@ class GetStatelessElement extends ComponentElement { | ||
| 91 | 93 | ||
| 92 | @override | 94 | @override |
| 93 | void mount(Element parent, dynamic newSlot) { | 95 | void mount(Element parent, dynamic newSlot) { |
| 94 | - widget.controller?.onStart(); | 96 | + if (widget?.controller?.initialized != null && |
| 97 | + !widget.controller.initialized) { | ||
| 98 | + widget?.controller?.onStart(); | ||
| 99 | + } | ||
| 100 | + | ||
| 95 | super.mount(parent, newSlot); | 101 | super.mount(parent, newSlot); |
| 96 | } | 102 | } |
| 97 | 103 | ||
| 98 | @override | 104 | @override |
| 99 | void unmount() { | 105 | void unmount() { |
| 100 | - widget.controller?.onClose(); | 106 | + widget?.controller?.onClose(); |
| 101 | super.unmount(); | 107 | super.unmount(); |
| 102 | } | 108 | } |
| 103 | } | 109 | } |
| 104 | 110 | ||
| 105 | -abstract class GetStatelessWidget<T extends GetLifeCycle> extends Widget { | 111 | +abstract class GetStatelessWidget<T extends DisposableInterface> |
| 112 | + extends Widget { | ||
| 106 | const GetStatelessWidget({Key key}) : super(key: key); | 113 | const GetStatelessWidget({Key key}) : super(key: key); |
| 107 | @override | 114 | @override |
| 108 | GetStatelessElement createElement() => GetStatelessElement(this); | 115 | GetStatelessElement createElement() => GetStatelessElement(this); |
| 1 | name: get_state_manager | 1 | name: get_state_manager |
| 2 | description: The most powerful, easier and flexible StateManager to Flutter and GetX™ framework. | 2 | description: The most powerful, easier and flexible StateManager to Flutter and GetX™ framework. |
| 3 | -version: 3.10.2 | 3 | +version: 3.12.0 |
| 4 | homepage: https://github.com/jonataslaw/getx | 4 | homepage: https://github.com/jonataslaw/getx |
| 5 | 5 | ||
| 6 | environment: | 6 | environment: |
| @@ -23,10 +23,11 @@ environment: | @@ -23,10 +23,11 @@ environment: | ||
| 23 | dependencies: | 23 | dependencies: |
| 24 | flutter: | 24 | flutter: |
| 25 | sdk: flutter | 25 | sdk: flutter |
| 26 | - get_test: | ||
| 27 | - path: ../ | ||
| 28 | get: | 26 | get: |
| 29 | - path: ../../../getx | 27 | + git: |
| 28 | + url: git://github.com/jonataslaw/getx.git | ||
| 29 | + path: getx | ||
| 30 | + ref: master | ||
| 30 | 31 | ||
| 31 | 32 | ||
| 32 | # The following adds the Cupertino Icons font to your application. | 33 | # The following adds the Cupertino Icons font to your application. |
| @@ -3,7 +3,9 @@ import 'package:flutter/scheduler.dart'; | @@ -3,7 +3,9 @@ import 'package:flutter/scheduler.dart'; | ||
| 3 | import 'package:flutter_test/flutter_test.dart'; | 3 | import 'package:flutter_test/flutter_test.dart'; |
| 4 | import 'package:get_navigation/get_navigation.dart'; | 4 | import 'package:get_navigation/get_navigation.dart'; |
| 5 | import 'package:get_state_manager/get_state_manager.dart'; | 5 | import 'package:get_state_manager/get_state_manager.dart'; |
| 6 | -import 'package:image_test_utils/image_test_utils.dart'; | 6 | +import 'package:meta/meta.dart'; |
| 7 | +import 'utils/image_test.dart' | ||
| 8 | + if (dart.library.io) 'utils/image_test_utils.dart'; | ||
| 7 | 9 | ||
| 8 | class _Wrapper extends StatelessWidget { | 10 | class _Wrapper extends StatelessWidget { |
| 9 | final Widget child; | 11 | final Widget child; |
| @@ -26,6 +28,7 @@ class _Wrapper extends StatelessWidget { | @@ -26,6 +28,7 @@ class _Wrapper extends StatelessWidget { | ||
| 26 | } | 28 | } |
| 27 | } | 29 | } |
| 28 | 30 | ||
| 31 | +@isTest | ||
| 29 | void testController<T>( | 32 | void testController<T>( |
| 30 | String description, | 33 | String description, |
| 31 | void Function(T) callback, { | 34 | void Function(T) callback, { |
| @@ -44,6 +47,7 @@ void testController<T>( | @@ -44,6 +47,7 @@ void testController<T>( | ||
| 44 | }); | 47 | }); |
| 45 | } | 48 | } |
| 46 | 49 | ||
| 50 | +@isTest | ||
| 47 | Future<T> testGetX<T extends DisposableInterface>( | 51 | Future<T> testGetX<T extends DisposableInterface>( |
| 48 | String description, { | 52 | String description, { |
| 49 | @required GetX<T> widget, | 53 | @required GetX<T> widget, |
| @@ -60,6 +64,7 @@ Future<T> testGetX<T extends DisposableInterface>( | @@ -60,6 +64,7 @@ Future<T> testGetX<T extends DisposableInterface>( | ||
| 60 | return controller; | 64 | return controller; |
| 61 | } | 65 | } |
| 62 | 66 | ||
| 67 | +@isTest | ||
| 63 | Future<T> testGetBuilder<T extends GetxController>( | 68 | Future<T> testGetBuilder<T extends GetxController>( |
| 64 | String description, { | 69 | String description, { |
| 65 | @required GetBuilder<T> widget, | 70 | @required GetBuilder<T> widget, |
| @@ -76,6 +81,7 @@ Future<T> testGetBuilder<T extends GetxController>( | @@ -76,6 +81,7 @@ Future<T> testGetBuilder<T extends GetxController>( | ||
| 76 | return controller; | 81 | return controller; |
| 77 | } | 82 | } |
| 78 | 83 | ||
| 84 | +@isTest | ||
| 79 | Future<T> testObx<T extends GetxController>( | 85 | Future<T> testObx<T extends GetxController>( |
| 80 | String description, { | 86 | String description, { |
| 81 | @required T controller, | 87 | @required T controller, |
| @@ -91,6 +97,7 @@ Future<T> testObx<T extends GetxController>( | @@ -91,6 +97,7 @@ Future<T> testObx<T extends GetxController>( | ||
| 91 | return controller; | 97 | return controller; |
| 92 | } | 98 | } |
| 93 | 99 | ||
| 100 | +@isTest | ||
| 94 | void getTest( | 101 | void getTest( |
| 95 | String description, { | 102 | String description, { |
| 96 | @required WidgetTesterCallback widgetTest, | 103 | @required WidgetTesterCallback widgetTest, |
packages/get_test/lib/utils/image_test.dart
0 → 100644
| 1 | +import 'dart:async'; | ||
| 2 | +import 'dart:io'; | ||
| 3 | +import 'package:mockito/mockito.dart'; | ||
| 4 | + | ||
| 5 | +/// Copyright 2018 Iiro Krankka | ||
| 6 | +/// Redistribution and use in source and binary forms, with or without | ||
| 7 | +/// modification, are permitted provided that the following conditions are met: | ||
| 8 | +/// 1. Redistributions of source code must retain the above copyright notice, | ||
| 9 | +/// this list of conditions and the following disclaimer. | ||
| 10 | +/// 2. Redistributions in binary form must reproduce the above copyright | ||
| 11 | +/// notice, this list of conditions and the following disclaimer in the | ||
| 12 | +/// documentation and/or other materials provided with the distribution. | ||
| 13 | +/// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
| 14 | +/// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | ||
| 15 | +/// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
| 16 | +/// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR | ||
| 17 | +/// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
| 18 | +/// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
| 19 | +/// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, | ||
| 20 | +/// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
| 21 | +/// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| 22 | +/// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE | ||
| 23 | +/// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| 24 | + | ||
| 25 | +/// Runs [body] in a fresh [Zone] that provides mocked responses for | ||
| 26 | +/// [Image.network] widgets. | ||
| 27 | +/// | ||
| 28 | +/// Behind the scenes, this creates a mocked HTTP client that responds | ||
| 29 | +/// with mocked | ||
| 30 | +/// image data to all HTTP GET requests. | ||
| 31 | +/// | ||
| 32 | +/// This is a workaround needed for widget tests that use network images. | ||
| 33 | +/// Without | ||
| 34 | +/// the mocked HTTP client, any widget tests that pump a widget tree containing | ||
| 35 | +/// [Image.network] widgets will crash. | ||
| 36 | +/// | ||
| 37 | +/// By default, the mocked HTTP client will respond with [_transparentImage]. If | ||
| 38 | +/// provided, it will use [imageBytes] instead. | ||
| 39 | +/// | ||
| 40 | +/// Example usage in a test case: | ||
| 41 | +/// | ||
| 42 | +/// ``` | ||
| 43 | +/// void main() { | ||
| 44 | +/// testWidgets('should not crash', (WidgetTester tester) async { | ||
| 45 | +/// provideMockedNetworkImages(() async { | ||
| 46 | +/// await tester.pumpWidget( | ||
| 47 | +/// MaterialApp( | ||
| 48 | +/// home: Image.network('https://example.com/image.png'), | ||
| 49 | +/// ), | ||
| 50 | +/// ); | ||
| 51 | +/// }); | ||
| 52 | +/// }); | ||
| 53 | +/// } | ||
| 54 | +/// ``` | ||
| 55 | +/// | ||
| 56 | +/// Note that you'll want to add this package to the dev_dependencies instead of | ||
| 57 | +/// the regular dependencies block on your pubspec.yaml. | ||
| 58 | +/// | ||
| 59 | +/// For more context about [Image.network] widgets failing in widget tests, see | ||
| 60 | +/// these issues: | ||
| 61 | +/// | ||
| 62 | +/// * https://github.com/flutter/flutter/issues/13433 | ||
| 63 | +/// * https://github.com/flutter/flutter_markdown/pull/17 | ||
| 64 | +/// | ||
| 65 | +/// The underlying code is taken from the Flutter repo: | ||
| 66 | +/// https://github.com/flutter/flutter/blob/master/dev/manual_tests/test/mock_image_http.dart | ||
| 67 | +R provideMockedNetworkImages<R>(R body(), | ||
| 68 | + {List<int> imageBytes = _transparentImage}) { | ||
| 69 | + return HttpOverrides.runZoned( | ||
| 70 | + body, | ||
| 71 | + createHttpClient: (_) => _createMockImageHttpClient(_, imageBytes), | ||
| 72 | + ); | ||
| 73 | +} | ||
| 74 | + | ||
| 75 | +class MockHttpClient extends Mock implements HttpClient {} | ||
| 76 | + | ||
| 77 | +class MockHttpClientRequest extends Mock implements HttpClientRequest {} | ||
| 78 | + | ||
| 79 | +class MockHttpClientResponse extends Mock implements HttpClientResponse {} | ||
| 80 | + | ||
| 81 | +class MockHttpHeaders extends Mock implements HttpHeaders {} | ||
| 82 | + | ||
| 83 | +// Returns a mock HTTP client that responds with an image to all requests. | ||
| 84 | +MockHttpClient _createMockImageHttpClient( | ||
| 85 | + SecurityContext _, List<int> imageBytes) { | ||
| 86 | + final client = MockHttpClient(); | ||
| 87 | + final request = MockHttpClientRequest(); | ||
| 88 | + final response = MockHttpClientResponse(); | ||
| 89 | + final headers = MockHttpHeaders(); | ||
| 90 | + | ||
| 91 | + when(client.getUrl(any)) | ||
| 92 | + .thenAnswer((_) => Future<HttpClientRequest>.value(request)); | ||
| 93 | + when(request.headers).thenReturn(headers); | ||
| 94 | + when(request.close()) | ||
| 95 | + .thenAnswer((_) => Future<HttpClientResponse>.value(response)); | ||
| 96 | + when(response.contentLength).thenReturn(_transparentImage.length); | ||
| 97 | + when(response.statusCode).thenReturn(HttpStatus.ok); | ||
| 98 | + when(response.listen(any)).thenAnswer((invocation) { | ||
| 99 | + final onData = | ||
| 100 | + invocation.positionalArguments[0] as void Function(List<int>); | ||
| 101 | + final onDone = invocation.namedArguments[#onDone] as void Function(); | ||
| 102 | + final onError = invocation.namedArguments[#onError] as void Function(Object, | ||
| 103 | + [StackTrace]); | ||
| 104 | + final cancelOnError = invocation.namedArguments[#cancelOnError] as bool; | ||
| 105 | + | ||
| 106 | + return Stream<List<int>>.fromIterable(<List<int>>[imageBytes]).listen( | ||
| 107 | + onData, | ||
| 108 | + onDone: onDone, | ||
| 109 | + onError: onError, | ||
| 110 | + cancelOnError: cancelOnError); | ||
| 111 | + }); | ||
| 112 | + | ||
| 113 | + return client; | ||
| 114 | +} | ||
| 115 | + | ||
| 116 | +const List<int> _transparentImage = <int>[ | ||
| 117 | + 0x89, | ||
| 118 | + 0x50, | ||
| 119 | + 0x4E, | ||
| 120 | + 0x47, | ||
| 121 | + 0x0D, | ||
| 122 | + 0x0A, | ||
| 123 | + 0x1A, | ||
| 124 | + 0x0A, | ||
| 125 | + 0x00, | ||
| 126 | + 0x00, | ||
| 127 | + 0x00, | ||
| 128 | + 0x0D, | ||
| 129 | + 0x49, | ||
| 130 | + 0x48, | ||
| 131 | + 0x44, | ||
| 132 | + 0x52, | ||
| 133 | + 0x00, | ||
| 134 | + 0x00, | ||
| 135 | + 0x00, | ||
| 136 | + 0x01, | ||
| 137 | + 0x00, | ||
| 138 | + 0x00, | ||
| 139 | + 0x00, | ||
| 140 | + 0x01, | ||
| 141 | + 0x08, | ||
| 142 | + 0x06, | ||
| 143 | + 0x00, | ||
| 144 | + 0x00, | ||
| 145 | + 0x00, | ||
| 146 | + 0x1F, | ||
| 147 | + 0x15, | ||
| 148 | + 0xC4, | ||
| 149 | + 0x89, | ||
| 150 | + 0x00, | ||
| 151 | + 0x00, | ||
| 152 | + 0x00, | ||
| 153 | + 0x0A, | ||
| 154 | + 0x49, | ||
| 155 | + 0x44, | ||
| 156 | + 0x41, | ||
| 157 | + 0x54, | ||
| 158 | + 0x78, | ||
| 159 | + 0x9C, | ||
| 160 | + 0x63, | ||
| 161 | + 0x00, | ||
| 162 | + 0x01, | ||
| 163 | + 0x00, | ||
| 164 | + 0x00, | ||
| 165 | + 0x05, | ||
| 166 | + 0x00, | ||
| 167 | + 0x01, | ||
| 168 | + 0x0D, | ||
| 169 | + 0x0A, | ||
| 170 | + 0x2D, | ||
| 171 | + 0xB4, | ||
| 172 | + 0x00, | ||
| 173 | + 0x00, | ||
| 174 | + 0x00, | ||
| 175 | + 0x00, | ||
| 176 | + 0x49, | ||
| 177 | + 0x45, | ||
| 178 | + 0x4E, | ||
| 179 | + 0x44, | ||
| 180 | + 0xAE, | ||
| 181 | +]; |
| 1 | name: get_test | 1 | name: get_test |
| 2 | description: A package that facilitates the creation of tests for applications built with GetX | 2 | description: A package that facilitates the creation of tests for applications built with GetX |
| 3 | -version: 3.11.0 | 3 | +version: 3.12.3 |
| 4 | homepage: https://github.com/jonataslaw/getx | 4 | homepage: https://github.com/jonataslaw/getx |
| 5 | 5 | ||
| 6 | environment: | 6 | environment: |
| @@ -10,7 +10,7 @@ environment: | @@ -10,7 +10,7 @@ environment: | ||
| 10 | dependencies: | 10 | dependencies: |
| 11 | flutter: | 11 | flutter: |
| 12 | sdk: flutter | 12 | sdk: flutter |
| 13 | - mockito: ">=3.0.0 <4.0.0" | 13 | + mockito: ">=3.0.0 <5.0.0" |
| 14 | get_navigation: | 14 | get_navigation: |
| 15 | git: | 15 | git: |
| 16 | url: git://github.com/jonataslaw/getx.git | 16 | url: git://github.com/jonataslaw/getx.git |
| @@ -21,7 +21,7 @@ dependencies: | @@ -21,7 +21,7 @@ dependencies: | ||
| 21 | url: git://github.com/jonataslaw/getx.git | 21 | url: git://github.com/jonataslaw/getx.git |
| 22 | path: packages/get_state_manager | 22 | path: packages/get_state_manager |
| 23 | ref: master | 23 | ref: master |
| 24 | - image_test_utils: ">=1.0.0 <2.0.0" | 24 | + meta: ">=1.1.0 <2.0.0" |
| 25 | flutter_test: | 25 | flutter_test: |
| 26 | sdk: flutter | 26 | sdk: flutter |
| 27 | 27 |
| 1 | name: get_utils | 1 | name: get_utils |
| 2 | description: A set of tools that allows you to access high-level APIs and obtain validation tools for Flutter and GetX™ framework. | 2 | description: A set of tools that allows you to access high-level APIs and obtain validation tools for Flutter and GetX™ framework. |
| 3 | -version: 3.10.2 | 3 | +version: 3.12.0 |
| 4 | homepage: https://github.com/jonataslaw/getx | 4 | homepage: https://github.com/jonataslaw/getx |
| 5 | 5 | ||
| 6 | environment: | 6 | environment: |
pubspec.lock
deleted
100644 → 0
| 1 | -# Generated by pub | ||
| 2 | -# See https://dart.dev/tools/pub/glossary#lockfile | ||
| 3 | -packages: | ||
| 4 | - async: | ||
| 5 | - dependency: transitive | ||
| 6 | - description: | ||
| 7 | - name: async | ||
| 8 | - url: "https://pub.dartlang.org" | ||
| 9 | - source: hosted | ||
| 10 | - version: "2.4.2" | ||
| 11 | - boolean_selector: | ||
| 12 | - dependency: transitive | ||
| 13 | - description: | ||
| 14 | - name: boolean_selector | ||
| 15 | - url: "https://pub.dartlang.org" | ||
| 16 | - source: hosted | ||
| 17 | - version: "2.0.0" | ||
| 18 | - characters: | ||
| 19 | - dependency: transitive | ||
| 20 | - description: | ||
| 21 | - name: characters | ||
| 22 | - url: "https://pub.dartlang.org" | ||
| 23 | - source: hosted | ||
| 24 | - version: "1.0.0" | ||
| 25 | - charcode: | ||
| 26 | - dependency: transitive | ||
| 27 | - description: | ||
| 28 | - name: charcode | ||
| 29 | - url: "https://pub.dartlang.org" | ||
| 30 | - source: hosted | ||
| 31 | - version: "1.1.3" | ||
| 32 | - clock: | ||
| 33 | - dependency: transitive | ||
| 34 | - description: | ||
| 35 | - name: clock | ||
| 36 | - url: "https://pub.dartlang.org" | ||
| 37 | - source: hosted | ||
| 38 | - version: "1.0.1" | ||
| 39 | - collection: | ||
| 40 | - dependency: transitive | ||
| 41 | - description: | ||
| 42 | - name: collection | ||
| 43 | - url: "https://pub.dartlang.org" | ||
| 44 | - source: hosted | ||
| 45 | - version: "1.14.13" | ||
| 46 | - effective_dart: | ||
| 47 | - dependency: "direct dev" | ||
| 48 | - description: | ||
| 49 | - name: effective_dart | ||
| 50 | - url: "https://pub.dartlang.org" | ||
| 51 | - source: hosted | ||
| 52 | - version: "1.2.4" | ||
| 53 | - fake_async: | ||
| 54 | - dependency: transitive | ||
| 55 | - description: | ||
| 56 | - name: fake_async | ||
| 57 | - url: "https://pub.dartlang.org" | ||
| 58 | - source: hosted | ||
| 59 | - version: "1.1.0" | ||
| 60 | - flutter: | ||
| 61 | - dependency: "direct main" | ||
| 62 | - description: flutter | ||
| 63 | - source: sdk | ||
| 64 | - version: "0.0.0" | ||
| 65 | - flutter_test: | ||
| 66 | - dependency: "direct dev" | ||
| 67 | - description: flutter | ||
| 68 | - source: sdk | ||
| 69 | - version: "0.0.0" | ||
| 70 | - matcher: | ||
| 71 | - dependency: transitive | ||
| 72 | - description: | ||
| 73 | - name: matcher | ||
| 74 | - url: "https://pub.dartlang.org" | ||
| 75 | - source: hosted | ||
| 76 | - version: "0.12.8" | ||
| 77 | - meta: | ||
| 78 | - dependency: transitive | ||
| 79 | - description: | ||
| 80 | - name: meta | ||
| 81 | - url: "https://pub.dartlang.org" | ||
| 82 | - source: hosted | ||
| 83 | - version: "1.1.8" | ||
| 84 | - path: | ||
| 85 | - dependency: transitive | ||
| 86 | - description: | ||
| 87 | - name: path | ||
| 88 | - url: "https://pub.dartlang.org" | ||
| 89 | - source: hosted | ||
| 90 | - version: "1.7.0" | ||
| 91 | - sky_engine: | ||
| 92 | - dependency: transitive | ||
| 93 | - description: flutter | ||
| 94 | - source: sdk | ||
| 95 | - version: "0.0.99" | ||
| 96 | - source_span: | ||
| 97 | - dependency: transitive | ||
| 98 | - description: | ||
| 99 | - name: source_span | ||
| 100 | - url: "https://pub.dartlang.org" | ||
| 101 | - source: hosted | ||
| 102 | - version: "1.7.0" | ||
| 103 | - stack_trace: | ||
| 104 | - dependency: transitive | ||
| 105 | - description: | ||
| 106 | - name: stack_trace | ||
| 107 | - url: "https://pub.dartlang.org" | ||
| 108 | - source: hosted | ||
| 109 | - version: "1.9.5" | ||
| 110 | - stream_channel: | ||
| 111 | - dependency: transitive | ||
| 112 | - description: | ||
| 113 | - name: stream_channel | ||
| 114 | - url: "https://pub.dartlang.org" | ||
| 115 | - source: hosted | ||
| 116 | - version: "2.0.0" | ||
| 117 | - string_scanner: | ||
| 118 | - dependency: transitive | ||
| 119 | - description: | ||
| 120 | - name: string_scanner | ||
| 121 | - url: "https://pub.dartlang.org" | ||
| 122 | - source: hosted | ||
| 123 | - version: "1.0.5" | ||
| 124 | - term_glyph: | ||
| 125 | - dependency: transitive | ||
| 126 | - description: | ||
| 127 | - name: term_glyph | ||
| 128 | - url: "https://pub.dartlang.org" | ||
| 129 | - source: hosted | ||
| 130 | - version: "1.1.0" | ||
| 131 | - test_api: | ||
| 132 | - dependency: transitive | ||
| 133 | - description: | ||
| 134 | - name: test_api | ||
| 135 | - url: "https://pub.dartlang.org" | ||
| 136 | - source: hosted | ||
| 137 | - version: "0.2.17" | ||
| 138 | - typed_data: | ||
| 139 | - dependency: transitive | ||
| 140 | - description: | ||
| 141 | - name: typed_data | ||
| 142 | - url: "https://pub.dartlang.org" | ||
| 143 | - source: hosted | ||
| 144 | - version: "1.2.0" | ||
| 145 | - vector_math: | ||
| 146 | - dependency: transitive | ||
| 147 | - description: | ||
| 148 | - name: vector_math | ||
| 149 | - url: "https://pub.dartlang.org" | ||
| 150 | - source: hosted | ||
| 151 | - version: "2.0.8" | ||
| 152 | -sdks: | ||
| 153 | - dart: ">=2.9.0-14.0.dev <3.0.0" |
-
Please register or login to post a comment