Jonny Borges
Committed by GitHub

Merge pull request #2896 from jonataslaw/rename_create

rename create -> spawn and change logic of new GetWidget
@@ -2,13 +2,14 @@ @@ -2,13 +2,14 @@
2 FLUTTER_ROOT=/Users/jonatasborges/flutter 2 FLUTTER_ROOT=/Users/jonatasborges/flutter
3 FLUTTER_APPLICATION_PATH=/Users/jonatasborges/getx5/getx/example_nav2 3 FLUTTER_APPLICATION_PATH=/Users/jonatasborges/getx5/getx/example_nav2
4 COCOAPODS_PARALLEL_CODE_SIGN=true 4 COCOAPODS_PARALLEL_CODE_SIGN=true
5 -FLUTTER_TARGET=lib/main.dart 5 +FLUTTER_TARGET=/Users/jonatasborges/getx5/getx/example_nav2/lib/main.dart
6 FLUTTER_BUILD_DIR=build 6 FLUTTER_BUILD_DIR=build
7 FLUTTER_BUILD_NAME=1.0.0 7 FLUTTER_BUILD_NAME=1.0.0
8 FLUTTER_BUILD_NUMBER=1 8 FLUTTER_BUILD_NUMBER=1
9 EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386 9 EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386
10 EXCLUDED_ARCHS[sdk=iphoneos*]=armv7 10 EXCLUDED_ARCHS[sdk=iphoneos*]=armv7
  11 +DART_DEFINES=RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==,RkxVVFRFUl9XRUJfQ0FOVkFTS0lUX1VSTD1odHRwczovL3d3dy5nc3RhdGljLmNvbS9mbHV0dGVyLWNhbnZhc2tpdC9iMjAxODNlMDQwOTYwOTRiY2MzN2Q5Y2RlMmE0Yjk2ZjVjYzY4NGNmLw==
11 DART_OBFUSCATION=false 12 DART_OBFUSCATION=false
12 TRACK_WIDGET_CREATION=true 13 TRACK_WIDGET_CREATION=true
13 TREE_SHAKE_ICONS=false 14 TREE_SHAKE_ICONS=false
14 -PACKAGE_CONFIG=.dart_tool/package_config.json 15 +PACKAGE_CONFIG=/Users/jonatasborges/getx5/getx/example_nav2/.dart_tool/package_config.json
@@ -3,11 +3,12 @@ @@ -3,11 +3,12 @@
3 export "FLUTTER_ROOT=/Users/jonatasborges/flutter" 3 export "FLUTTER_ROOT=/Users/jonatasborges/flutter"
4 export "FLUTTER_APPLICATION_PATH=/Users/jonatasborges/getx5/getx/example_nav2" 4 export "FLUTTER_APPLICATION_PATH=/Users/jonatasborges/getx5/getx/example_nav2"
5 export "COCOAPODS_PARALLEL_CODE_SIGN=true" 5 export "COCOAPODS_PARALLEL_CODE_SIGN=true"
6 -export "FLUTTER_TARGET=lib/main.dart" 6 +export "FLUTTER_TARGET=/Users/jonatasborges/getx5/getx/example_nav2/lib/main.dart"
7 export "FLUTTER_BUILD_DIR=build" 7 export "FLUTTER_BUILD_DIR=build"
8 export "FLUTTER_BUILD_NAME=1.0.0" 8 export "FLUTTER_BUILD_NAME=1.0.0"
9 export "FLUTTER_BUILD_NUMBER=1" 9 export "FLUTTER_BUILD_NUMBER=1"
  10 +export "DART_DEFINES=RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ==,RkxVVFRFUl9XRUJfQ0FOVkFTS0lUX1VSTD1odHRwczovL3d3dy5nc3RhdGljLmNvbS9mbHV0dGVyLWNhbnZhc2tpdC9iMjAxODNlMDQwOTYwOTRiY2MzN2Q5Y2RlMmE0Yjk2ZjVjYzY4NGNmLw=="
10 export "DART_OBFUSCATION=false" 11 export "DART_OBFUSCATION=false"
11 export "TRACK_WIDGET_CREATION=true" 12 export "TRACK_WIDGET_CREATION=true"
12 export "TREE_SHAKE_ICONS=false" 13 export "TREE_SHAKE_ICONS=false"
13 -export "PACKAGE_CONFIG=.dart_tool/package_config.json" 14 +export "PACKAGE_CONFIG=/Users/jonatasborges/getx5/getx/example_nav2/.dart_tool/package_config.json"
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 archiveVersion = 1; 3 archiveVersion = 1;
4 classes = { 4 classes = {
5 }; 5 };
6 - objectVersion = 50; 6 + objectVersion = 54;
7 objects = { 7 objects = {
8 8
9 /* Begin PBXBuildFile section */ 9 /* Begin PBXBuildFile section */
@@ -127,7 +127,7 @@ @@ -127,7 +127,7 @@
127 97C146E61CF9000F007C117D /* Project object */ = { 127 97C146E61CF9000F007C117D /* Project object */ = {
128 isa = PBXProject; 128 isa = PBXProject;
129 attributes = { 129 attributes = {
130 - LastUpgradeCheck = 1300; 130 + LastUpgradeCheck = 1430;
131 ORGANIZATIONNAME = ""; 131 ORGANIZATIONNAME = "";
132 TargetAttributes = { 132 TargetAttributes = {
133 97C146ED1CF9000F007C117D = { 133 97C146ED1CF9000F007C117D = {
@@ -171,10 +171,12 @@ @@ -171,10 +171,12 @@
171 /* Begin PBXShellScriptBuildPhase section */ 171 /* Begin PBXShellScriptBuildPhase section */
172 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 172 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
173 isa = PBXShellScriptBuildPhase; 173 isa = PBXShellScriptBuildPhase;
  174 + alwaysOutOfDate = 1;
174 buildActionMask = 2147483647; 175 buildActionMask = 2147483647;
175 files = ( 176 files = (
176 ); 177 );
177 inputPaths = ( 178 inputPaths = (
  179 + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
178 ); 180 );
179 name = "Thin Binary"; 181 name = "Thin Binary";
180 outputPaths = ( 182 outputPaths = (
@@ -185,6 +187,7 @@ @@ -185,6 +187,7 @@
185 }; 187 };
186 9740EEB61CF901F6004384FC /* Run Script */ = { 188 9740EEB61CF901F6004384FC /* Run Script */ = {
187 isa = PBXShellScriptBuildPhase; 189 isa = PBXShellScriptBuildPhase;
  190 + alwaysOutOfDate = 1;
188 buildActionMask = 2147483647; 191 buildActionMask = 2147483647;
189 files = ( 192 files = (
190 ); 193 );
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <Scheme 2 <Scheme
3 - LastUpgradeVersion = "1300" 3 + LastUpgradeVersion = "1430"
4 version = "1.3"> 4 version = "1.3">
5 <BuildAction 5 <BuildAction
6 parallelizeBuildables = "YES" 6 parallelizeBuildables = "YES"
@@ -43,5 +43,7 @@ @@ -43,5 +43,7 @@
43 <false/> 43 <false/>
44 <key>CADisableMinimumFrameDurationOnPhone</key> 44 <key>CADisableMinimumFrameDurationOnPhone</key>
45 <true/> 45 <true/>
  46 + <key>UIApplicationSupportsIndirectInputEvents</key>
  47 + <true/>
46 </dict> 48 </dict>
47 </plist> 49 </plist>
@@ -6,8 +6,8 @@ class ProductDetailsBinding extends Binding { @@ -6,8 +6,8 @@ class ProductDetailsBinding extends Binding {
6 @override 6 @override
7 List<Bind> dependencies() { 7 List<Bind> dependencies() {
8 return [ 8 return [
9 - Bind.create<ProductDetailsController>(  
10 - (_) => ProductDetailsController( 9 + Bind.spawn<ProductDetailsController>(
  10 + () => ProductDetailsController(
11 Get.parameters['productId'] ?? '', 11 Get.parameters['productId'] ?? '',
12 ), 12 ),
13 ) 13 )
1 -import 'dart:async';  
2 -  
3 -import 'package:async/async.dart';  
4 -import 'package:get/get.dart';  
5 -  
6 -class SplashService extends GetxService {  
7 - final welcomeStr = ['GetX', 'Rules!'];  
8 - final activeStr = 0.obs;  
9 -  
10 - final memo = AsyncMemoizer<void>();  
11 - Future<void> init() {  
12 - return memo.runOnce(_initFunction);  
13 - }  
14 -  
15 - void _changeActiveString() {  
16 - activeStr.value = (activeStr.value + 1) % welcomeStr.length;  
17 - }  
18 -  
19 - Future<void> _initFunction() async {  
20 - final t = Timer.periodic(  
21 - const Duration(milliseconds: 500),  
22 - (t) => _changeActiveString(),  
23 - );  
24 - //simulate some long running operation  
25 - await Future.delayed(const Duration(seconds: 5));  
26 - //cancel the timer once we are done  
27 - t.cancel();  
28 - }  
29 -}  
1 -import 'package:flutter/material.dart';  
2 -import 'package:get/get.dart';  
3 -  
4 -import '../controllers/splash_service.dart';  
5 -  
6 -class SplashView extends GetView<SplashService> {  
7 - const SplashView({super.key});  
8 -  
9 - @override  
10 - Widget build(BuildContext context) {  
11 - return Scaffold(  
12 - body: Center(  
13 - child: Column(  
14 - mainAxisSize: MainAxisSize.min,  
15 - children: [  
16 - Obx(  
17 - () => Text(  
18 - controller.welcomeStr[controller.activeStr.value],  
19 - style: const TextStyle(fontSize: 20),  
20 - ),  
21 - ),  
22 - const CircularProgressIndicator(),  
23 - ],  
24 - ),  
25 - ),  
26 - );  
27 - }  
28 -}  
@@ -2,7 +2,6 @@ import 'package:example_nav2/services/auth_service.dart'; @@ -2,7 +2,6 @@ import 'package:example_nav2/services/auth_service.dart';
2 import 'package:flutter/material.dart'; 2 import 'package:flutter/material.dart';
3 import 'package:get/get.dart'; 3 import 'package:get/get.dart';
4 4
5 -import 'app/modules/splash/controllers/splash_service.dart';  
6 import 'app/routes/app_pages.dart'; 5 import 'app/routes/app_pages.dart';
7 6
8 void main() { 7 void main() {
@@ -10,7 +9,6 @@ void main() { @@ -10,7 +9,6 @@ void main() {
10 GetMaterialApp( 9 GetMaterialApp(
11 title: "Application", 10 title: "Application",
12 binds: [ 11 binds: [
13 - Bind.put(SplashService()),  
14 Bind.put(AuthService()), 12 Bind.put(AuthService()),
15 ], 13 ],
16 getPages: AppPages.routes, 14 getPages: AppPages.routes,
@@ -127,16 +127,16 @@ extension Inst on GetInterface { @@ -127,16 +127,16 @@ extension Inst on GetInterface {
127 /// Route `Get.reference` to keep the lifecycle active. 127 /// Route `Get.reference` to keep the lifecycle active.
128 /// Is important to know that the instances created are only stored per Route. 128 /// Is important to know that the instances created are only stored per Route.
129 /// So, if you call `Get.delete<T>()` the "instance factory" used in this 129 /// So, if you call `Get.delete<T>()` the "instance factory" used in this
130 - /// method (`Get.create<T>()`) will be removed, but NOT the instances 130 + /// method (`Get.spawn<T>()`) will be removed, but NOT the instances
131 /// already created by it. 131 /// already created by it.
132 /// 132 ///
133 /// Example: 133 /// Example:
134 /// 134 ///
135 - /// ```create(() => Repl()); 135 + /// ```Get.spawn(() => Repl());
136 /// Repl a = find(); 136 /// Repl a = find();
137 /// Repl b = find(); 137 /// Repl b = find();
138 /// print(a==b); (false)``` 138 /// print(a==b); (false)```
139 - void create<S>( 139 + void spawn<S>(
140 InstanceBuilderCallback<S> builder, { 140 InstanceBuilderCallback<S> builder, {
141 String? tag, 141 String? tag,
142 bool permanent = true, 142 bool permanent = true,
@@ -298,7 +298,6 @@ extension Inst on GetInterface { @@ -298,7 +298,6 @@ extension Inst on GetInterface {
298 } 298 }
299 } 299 }
300 300
301 -  
302 /// The findOrNull method will return the instance if it is registered; 301 /// The findOrNull method will return the instance if it is registered;
303 /// otherwise, it will return null. 302 /// otherwise, it will return null.
304 S? findOrNull<S>({String? tag}) { 303 S? findOrNull<S>({String? tag}) {
@@ -308,7 +307,6 @@ extension Inst on GetInterface { @@ -308,7 +307,6 @@ extension Inst on GetInterface {
308 return null; 307 return null;
309 } 308 }
310 309
311 -  
312 /// Replace a parent instance of a class in dependency management 310 /// Replace a parent instance of a class in dependency management
313 /// with a [child] instance 311 /// with a [child] instance
314 /// - [tag] optional, if you use a [tag] to register the Instance. 312 /// - [tag] optional, if you use a [tag] to register the Instance.
@@ -30,13 +30,13 @@ class GetInformationParser extends RouteInformationParser<RouteDecoder> { @@ -30,13 +30,13 @@ class GetInformationParser extends RouteInformationParser<RouteDecoder> {
30 .any((element) => element.name == '/')) { 30 .any((element) => element.name == '/')) {
31 location = initialRoute; 31 location = initialRoute;
32 } 32 }
  33 + } else if (location.isEmpty) {
  34 + location = initialRoute;
33 } 35 }
34 36
35 Get.log('GetInformationParser: route location: $location'); 37 Get.log('GetInformationParser: route location: $location');
36 38
37 - final routeName = location ?? initialRoute;  
38 -  
39 - return SynchronousFuture(RouteDecoder.fromRoute(routeName)); 39 + return SynchronousFuture(RouteDecoder.fromRoute(location));
40 } 40 }
41 41
42 @override 42 @override
@@ -13,9 +13,9 @@ class Dependencies { @@ -13,9 +13,9 @@ class Dependencies {
13 return find<S>(); 13 return find<S>();
14 } 14 }
15 15
16 - void create<S>(InstanceBuilderCallback<S> builder, 16 + void spawn<S>(InstanceBuilderCallback<S> builder,
17 {String? tag, bool permanent = true}) => 17 {String? tag, bool permanent = true}) =>
18 - Get.create<S>(builder, tag: tag, permanent: permanent); 18 + Get.spawn<S>(builder, tag: tag, permanent: permanent);
19 19
20 S find<S>({String? tag}) => Get.find<S>(tag: tag); 20 S find<S>({String? tag}) => Get.find<S>(tag: tag);
21 21
@@ -160,6 +160,16 @@ abstract class Bind<T> extends StatelessWidget { @@ -160,6 +160,16 @@ abstract class Bind<T> extends StatelessWidget {
160 ); 160 );
161 } 161 }
162 162
  163 + static Bind spawn<S>(InstanceBuilderCallback<S> builder,
  164 + {String? tag, bool permanent = true}) {
  165 + Get.spawn<S>(builder, tag: tag, permanent: permanent);
  166 + return _FactoryBind<S>(
  167 + tag: tag,
  168 + global: false,
  169 + autoRemove: permanent,
  170 + );
  171 + }
  172 +
163 static S find<S>({String? tag}) => Get.find<S>(tag: tag); 173 static S find<S>({String? tag}) => Get.find<S>(tag: tag);
164 174
165 static Future<bool> delete<S>({String? tag, bool force = false}) async => 175 static Future<bool> delete<S>({String? tag, bool force = false}) async =>
@@ -465,7 +475,7 @@ class BindElement<T> extends InheritedElement { @@ -465,7 +475,7 @@ class BindElement<T> extends InheritedElement {
465 } else { 475 } else {
466 if (widget.create != null) { 476 if (widget.create != null) {
467 _controllerBuilder = () => widget.create!.call(this); 477 _controllerBuilder = () => widget.create!.call(this);
468 - Get.create<T>(_controllerBuilder!, tag: widget.tag, permanent: false); 478 + Get.spawn<T>(_controllerBuilder!, tag: widget.tag, permanent: false);
469 } else { 479 } else {
470 _controllerBuilder = widget.init; 480 _controllerBuilder = widget.init;
471 } 481 }
@@ -2,6 +2,7 @@ import 'package:flutter/widgets.dart'; @@ -2,6 +2,7 @@ import 'package:flutter/widgets.dart';
2 2
3 import '../../../instance_manager.dart'; 3 import '../../../instance_manager.dart';
4 import '../../../utils.dart'; 4 import '../../../utils.dart';
  5 +import 'get_state.dart';
5 import 'get_widget_cache.dart'; 6 import 'get_widget_cache.dart';
6 7
7 /// GetView is a great way of quickly access your Controller 8 /// GetView is a great way of quickly access your Controller
@@ -101,6 +102,9 @@ class _GetCache<S extends GetLifeCycleMixin> extends WidgetCache<GetWidget<S>> { @@ -101,6 +102,9 @@ class _GetCache<S extends GetLifeCycleMixin> extends WidgetCache<GetWidget<S>> {
101 102
102 @override 103 @override
103 Widget build(BuildContext context) { 104 Widget build(BuildContext context) {
104 - return widget!.build(context); 105 + return Binder(
  106 + init: () => _controller,
  107 + child: widget!.build(context),
  108 + );
105 } 109 }
106 } 110 }
@@ -55,9 +55,12 @@ void main() { @@ -55,9 +55,12 @@ void main() {
55 final instance = Get.put<Controller>(Controller(), tag: 'one'); 55 final instance = Get.put<Controller>(Controller(), tag: 'one');
56 final instance2 = Get.put<Controller>(Controller(), tag: 'two'); 56 final instance2 = Get.put<Controller>(Controller(), tag: 'two');
57 expect(instance == instance2, false); 57 expect(instance == instance2, false);
58 - expect(Get.find<Controller>(tag: 'one') == Get.find<Controller>(tag: 'two'), false);  
59 - expect(Get.find<Controller>(tag: 'one') == Get.find<Controller>(tag: 'one'), true);  
60 - expect(Get.find<Controller>(tag: 'two') == Get.find<Controller>(tag: 'two'), true); 58 + expect(Get.find<Controller>(tag: 'one') == Get.find<Controller>(tag: 'two'),
  59 + false);
  60 + expect(Get.find<Controller>(tag: 'one') == Get.find<Controller>(tag: 'one'),
  61 + true);
  62 + expect(Get.find<Controller>(tag: 'two') == Get.find<Controller>(tag: 'two'),
  63 + true);
61 Get.reset(); 64 Get.reset();
62 }); 65 });
63 66
@@ -65,9 +68,12 @@ void main() { @@ -65,9 +68,12 @@ void main() {
65 Get.lazyPut<Controller>(() => Controller(), tag: 'one'); 68 Get.lazyPut<Controller>(() => Controller(), tag: 'one');
66 Get.lazyPut<Controller>(() => Controller(), tag: 'two'); 69 Get.lazyPut<Controller>(() => Controller(), tag: 'two');
67 70
68 - expect(Get.find<Controller>(tag: 'one') == Get.find<Controller>(tag: 'two'), false);  
69 - expect(Get.find<Controller>(tag: 'one') == Get.find<Controller>(tag: 'one'), true);  
70 - expect(Get.find<Controller>(tag: 'two') == Get.find<Controller>(tag: 'two'), true); 71 + expect(Get.find<Controller>(tag: 'one') == Get.find<Controller>(tag: 'two'),
  72 + false);
  73 + expect(Get.find<Controller>(tag: 'one') == Get.find<Controller>(tag: 'one'),
  74 + true);
  75 + expect(Get.find<Controller>(tag: 'two') == Get.find<Controller>(tag: 'two'),
  76 + true);
71 Get.reset(); 77 Get.reset();
72 }); 78 });
73 79
@@ -95,7 +101,8 @@ void main() { @@ -95,7 +101,8 @@ void main() {
95 101
96 expect(Get.find<Controller>().count, 1); 102 expect(Get.find<Controller>().count, 1);
97 Get.delete<Controller>(); 103 Get.delete<Controller>();
98 - expect(() => Get.find<Controller>(), throwsA(const m.TypeMatcher<String>())); 104 + expect(
  105 + () => Get.find<Controller>(), throwsA(const m.TypeMatcher<String>()));
99 Get.reset(); 106 Get.reset();
100 }); 107 });
101 108
@@ -134,7 +141,7 @@ void main() { @@ -134,7 +141,7 @@ void main() {
134 }); 141 });
135 142
136 test('Get.create with abstract class test', () async { 143 test('Get.create with abstract class test', () async {
137 - Get.create<Service>(() => Api()); 144 + Get.spawn<Service>(() => Api());
138 final ct1 = Get.find<Service>(); 145 final ct1 = Get.find<Service>();
139 final ct2 = Get.find<Service>(); 146 final ct2 = Get.find<Service>();
140 // expect(ct1 is Service, true); 147 // expect(ct1 is Service, true);
@@ -155,10 +162,12 @@ void main() { @@ -155,10 +162,12 @@ void main() {
155 test('Get.delete test with disposable controller', () async { 162 test('Get.delete test with disposable controller', () async {
156 // Get.put(DisposableController()); 163 // Get.put(DisposableController());
157 expect(Get.delete<DisposableController>(), true); 164 expect(Get.delete<DisposableController>(), true);
158 - expect(() => Get.find<DisposableController>(), throwsA(const m.TypeMatcher<String>())); 165 + expect(() => Get.find<DisposableController>(),
  166 + throwsA(const m.TypeMatcher<String>()));
159 }); 167 });
160 168
161 - test('Get.put test after delete with disposable controller and init check', () async { 169 + test('Get.put test after delete with disposable controller and init check',
  170 + () async {
162 final instance = Get.put<DisposableController>(DisposableController()); 171 final instance = Get.put<DisposableController>(DisposableController());
163 expect(instance, Get.find<DisposableController>()); 172 expect(instance, Get.find<DisposableController>());
164 expect(instance.initialized, true); 173 expect(instance.initialized, true);
@@ -251,11 +260,10 @@ void main() { @@ -251,11 +260,10 @@ void main() {
251 Get.put<int>(1); 260 Get.put<int>(1);
252 int? result = Get.findOrNull<int>(); 261 int? result = Get.findOrNull<int>();
253 expect(result, 1); 262 expect(result, 1);
254 - 263 +
255 Get.delete<int>(); 264 Get.delete<int>();
256 result = Get.findOrNull<int>(); 265 result = Get.findOrNull<int>();
257 expect(result, null); 266 expect(result, null);
258 -  
259 }); 267 });
260 }); 268 });
261 } 269 }