Showing
2 changed files
with
50 additions
and
0 deletions
@@ -139,4 +139,19 @@ extension Inst on GetInterface { | @@ -139,4 +139,19 @@ extension Inst on GetInterface { | ||
139 | // ignore: unnecessary_cast | 139 | // ignore: unnecessary_cast |
140 | put(child as P, tag: tag, permanent: permanent); | 140 | put(child as P, tag: tag, permanent: permanent); |
141 | } | 141 | } |
142 | + | ||
143 | + /// Replaces a parent instance with a new Instance<P> lazily from the | ||
144 | + /// [<P>builder()] callback. | ||
145 | + /// - [tag] optional, if you use a [tag] to register the Instance. | ||
146 | + /// - [fenix] optional | ||
147 | + /// | ||
148 | + /// Note: if fenix is not provided it will be set to true if | ||
149 | + /// the parent instance was permanent | ||
150 | + void lazyReplace<P>(InstanceBuilderCallback<P> builder, | ||
151 | + {String? tag, bool? fenix}) { | ||
152 | + final info = GetInstance().getInstanceInfo<P>(tag: tag); | ||
153 | + final permanent = (info.isPermanent ?? false); | ||
154 | + delete<P>(tag: tag, force: permanent); | ||
155 | + lazyPut(builder, tag: tag, fenix: fenix ?? permanent); | ||
156 | + } | ||
142 | } | 157 | } |
@@ -160,6 +160,7 @@ void main() { | @@ -160,6 +160,7 @@ void main() { | ||
160 | }); | 160 | }); |
161 | 161 | ||
162 | group('Get.replace test for replacing parent instance that is', () { | 162 | group('Get.replace test for replacing parent instance that is', () { |
163 | + tearDown(Get.reset); | ||
163 | test('temporary', () async { | 164 | test('temporary', () async { |
164 | Get.put(DisposableController()); | 165 | Get.put(DisposableController()); |
165 | Get.replace<DisposableController>(Controller()); | 166 | Get.replace<DisposableController>(Controller()); |
@@ -203,6 +204,40 @@ void main() { | @@ -203,6 +204,40 @@ void main() { | ||
203 | expect((instance as Controller).init, greaterThan(0)); | 204 | expect((instance as Controller).init, greaterThan(0)); |
204 | }); | 205 | }); |
205 | }); | 206 | }); |
207 | + | ||
208 | + group('Get.lazyReplace replaces parent instance', () { | ||
209 | + tearDown(Get.reset); | ||
210 | + test('without fenix', () async { | ||
211 | + Get.put(DisposableController()); | ||
212 | + Get.lazyReplace<DisposableController>(() => Controller()); | ||
213 | + final instance = Get.find<DisposableController>(); | ||
214 | + expect(instance, isA<Controller>()); | ||
215 | + expect((instance as Controller).init, greaterThan(0)); | ||
216 | + }); | ||
217 | + | ||
218 | + test('with fenix', () async { | ||
219 | + Get.put(DisposableController()); | ||
220 | + Get.lazyReplace<DisposableController>(() => Controller(), fenix: true); | ||
221 | + expect(Get.find<DisposableController>(), isA<Controller>()); | ||
222 | + (Get.find<DisposableController>() as Controller).increment(); | ||
223 | + | ||
224 | + expect((Get.find<DisposableController>() as Controller).count, 1); | ||
225 | + Get.delete<DisposableController>(); | ||
226 | + expect((Get.find<DisposableController>() as Controller).count, 0); | ||
227 | + }); | ||
228 | + | ||
229 | + test('with fenix when parent is permanent', () async { | ||
230 | + Get.put(DisposableController(), permanent: true); | ||
231 | + Get.lazyReplace<DisposableController>(() => Controller()); | ||
232 | + final instance = Get.find<DisposableController>(); | ||
233 | + expect(instance, isA<Controller>()); | ||
234 | + (instance as Controller).increment(); | ||
235 | + | ||
236 | + expect((Get.find<DisposableController>() as Controller).count, 1); | ||
237 | + Get.delete<DisposableController>(); | ||
238 | + expect((Get.find<DisposableController>() as Controller).count, 0); | ||
239 | + }); | ||
240 | + }); | ||
206 | } | 241 | } |
207 | 242 | ||
208 | class Controller extends DisposableController { | 243 | class Controller extends DisposableController { |
-
Please register or login to post a comment