Jonatas

remove duplicate activity on example

1 -package getx.demo.app.example  
2 -  
3 -import io.flutter.embedding.android.FlutterActivity  
4 -  
5 -class MainActivity : FlutterActivity() {  
6 -}  
@@ -4,6 +4,7 @@ import 'dart:collection'; @@ -4,6 +4,7 @@ import 'dart:collection';
4 import 'package:get_core/get_core.dart'; 4 import 'package:get_core/get_core.dart';
5 5
6 import 'lifecycle.dart'; 6 import 'lifecycle.dart';
  7 +import 'utils/secure_operations.dart';
7 8
8 class GetInstance { 9 class GetInstance {
9 factory GetInstance() => _getInstance ??= GetInstance._(); 10 factory GetInstance() => _getInstance ??= GetInstance._();
@@ -12,8 +13,6 @@ class GetInstance { @@ -12,8 +13,6 @@ class GetInstance {
12 13
13 static GetInstance _getInstance; 14 static GetInstance _getInstance;
14 15
15 - // static final config = Get();  
16 -  
17 /// Holds references to every registered Instance when using 16 /// Holds references to every registered Instance when using
18 /// [Get.put()] 17 /// [Get.put()]
19 static final Map<String, _InstanceBuilderFactory> _singl = {}; 18 static final Map<String, _InstanceBuilderFactory> _singl = {};
@@ -227,26 +226,26 @@ class GetInstance { @@ -227,26 +226,26 @@ class GetInstance {
227 return i; 226 return i;
228 } 227 }
229 228
230 - // S putOrFind<S>(S Function() dep, {String tag}) {  
231 - // final key = _getKey(S, tag); 229 + S putOrFind<S>(InstanceBuilderCallback<S> dep, {String tag}) {
  230 + final key = _getKey(S, tag);
232 231
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); 232 + if (_singl.containsKey(key)) {
  233 + return _singl[key].getDependency() as S;
  234 + } else {
  235 + if (_factory.containsKey(key)) {
  236 + final _value = put<S>((_factory[key].builder() as S), tag: tag);
238 237
239 - // if (Get.smartManagement != SmartManagement.keepFactory) {  
240 - // if (!_factory[key].fenix) {  
241 - // _factory.remove(key);  
242 - // }  
243 - // }  
244 - // return _value;  
245 - // } 238 + if (Get.smartManagement != SmartManagement.keepFactory) {
  239 + if (!_factory[key].fenix) {
  240 + _factory.remove(key);
  241 + }
  242 + }
  243 + return _value;
  244 + }
246 245
247 - // return GetInstance().put(dep(), tag: tag);  
248 - // }  
249 - // } 246 + return GetInstance().put(dep(), tag: tag);
  247 + }
  248 + }
250 249
251 /// Finds the registered type <[S]> (or [tag]) 250 /// Finds the registered type <[S]> (or [tag])
252 /// In case of using Get.[create] to register a type <[S]> or [tag], 251 /// In case of using Get.[create] to register a type <[S]> or [tag],
@@ -307,15 +306,7 @@ class GetInstance { @@ -307,15 +306,7 @@ class GetInstance {
307 return true; 306 return true;
308 } 307 }
309 308
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 -// } 309 + static final GetQueue _queue = GetQueue();
319 310
320 /// Delete registered Class Instance [S] (or [tag]) and, closes any open 311 /// Delete registered Class Instance [S] (or [tag]) and, closes any open
321 /// controllers [DisposableInterface], cleans up the memory 312 /// controllers [DisposableInterface], cleans up the memory
@@ -334,6 +325,12 @@ class GetInstance { @@ -334,6 +325,12 @@ class GetInstance {
334 /// the Instance. **don't use** it unless you know what you are doing. 325 /// the Instance. **don't use** it unless you know what you are doing.
335 /// - [force] Will delete an Instance even if marked as [permanent]. 326 /// - [force] Will delete an Instance even if marked as [permanent].
336 Future<bool> delete<S>({String tag, String key, bool force = false}) async { 327 Future<bool> delete<S>({String tag, String key, bool force = false}) async {
  328 + return _queue.secure<bool>(() {
  329 + return _delete<S>(tag: tag, key: key, force: force);
  330 + });
  331 + }
  332 +
  333 + Future<bool> _delete<S>({String tag, String key, bool force = false}) async {
337 final newKey = key ?? _getKey(S, tag); 334 final newKey = key ?? _getKey(S, tag);
338 335
339 if (!_singl.containsKey(newKey)) { 336 if (!_singl.containsKey(newKey)) {
  1 +import 'dart:async';
  2 +
  3 +class GetQueue {
  4 + final List<_Item> _queue = [];
  5 + bool _active = false;
  6 +
  7 + void _check() async {
  8 + if (!_active && _queue.isNotEmpty) {
  9 + _active = true;
  10 + var item = _queue.removeAt(0);
  11 + try {
  12 + item.completer.complete(await item.job());
  13 + } on Exception catch (e) {
  14 + item.completer.completeError(e);
  15 + }
  16 + _active = false;
  17 + _check();
  18 + }
  19 + }
  20 +
  21 + Future<T> secure<T>(Function job) {
  22 + var completer = Completer<T>();
  23 + _queue.add(_Item<T>(completer, job));
  24 + _check();
  25 + return completer.future;
  26 + }
  27 +}
  28 +
  29 +class _Item<T> {
  30 + final Completer<T> completer;
  31 + final Function job;
  32 +
  33 + _Item(this.completer, this.job);
  34 +}