-
-
Save zoytsa/1f9891c1348fa2011c906f29d1ae2439 to your computer and use it in GitHub Desktop.
Get Super Provider XXL GetSuperProviderXXL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| * GET SUPER PROVIDER XXL | |
| * From GetX Architects and for GetX Architects | |
| * with L<3VE | |
| * | |
| * https://gist.github.com/PlugFox/fa6ff53257c7bd8edb11ebc2fe889d8e | |
| * https://dartpad.dev/fa6ff53257c7bd8edb11ebc2fe889d8e | |
| */ | |
| /// SUPER LIBRARY: | |
| library get_super_provider_xxl; | |
| import 'dart:async'; | |
| import 'dart:collection' show MapMixin; | |
| final IGetSuperProviderXXL getXXL = GetSuperProviderXXL.I; | |
| final IGetSuperProviderXXL x = GetSuperProviderXXL.I; | |
| typedef IGetSuperProviderXXLKey = Object?; | |
| typedef IGetSuperProviderXXLValue = Object?; | |
| extension GetSuperProviderXXLExtension on Object? { | |
| IGetSuperProviderXXL get getXXL => GetSuperProviderXXL.I; | |
| IGetSuperProviderXXL get x => GetSuperProviderXXL.I; | |
| } | |
| abstract class IGetSuperProviderXXL | |
| implements Map<IGetSuperProviderXXLKey, IGetSuperProviderXXLValue> { | |
| /// Stream with inserted values | |
| Stream<IGetSuperProviderXXLValue> get stream; | |
| /// Get and cast value if exist | |
| T? getAs<T extends IGetSuperProviderXXLValue>(IGetSuperProviderXXLKey key); | |
| } | |
| /// Safer than Riverpod | |
| /// State managment as Cubit & Provider | |
| /// Service locator as GetIt | |
| /// Faster then GetX (tested on M1) | |
| /// Compile & Runtime safe | |
| /// | |
| /// From GetX Architects and for GetX Architects | |
| /// with L<3VE | |
| /// | |
| abstract class GetSuperProviderXXL implements IGetSuperProviderXXL { | |
| static IGetSuperProviderXXL get I => | |
| _superInstance ??= _GetSuperProviderXXLImpl(); | |
| static IGetSuperProviderXXL? _superInstance; | |
| GetSuperProviderXXL._(); | |
| } | |
| abstract class _GetSuperProviderXXLBase extends GetSuperProviderXXL { | |
| _GetSuperProviderXXLBase() : super._(); | |
| } | |
| class _GetSuperProviderXXLImpl = _GetSuperProviderXXLBase | |
| with | |
| MapMixin<IGetSuperProviderXXLKey, IGetSuperProviderXXLValue>, | |
| _SuperStoreMixin, | |
| _SuperStreamMixin, | |
| _SuperGetMixin, | |
| _SuperRepresentationMixin, | |
| _SuperHashMixin; | |
| mixin _SuperStoreMixin on GetSuperProviderXXL { | |
| final Map<IGetSuperProviderXXLKey, IGetSuperProviderXXLValue> _map = | |
| <IGetSuperProviderXXLKey, IGetSuperProviderXXLValue>{}; | |
| @override | |
| Object? operator [](IGetSuperProviderXXLKey key) => _map[key]; | |
| @override | |
| void operator []=( | |
| IGetSuperProviderXXLKey key, | |
| IGetSuperProviderXXLValue value, | |
| ) => | |
| _map[key] = value; | |
| @override | |
| void clear() => _map.clear(); | |
| @override | |
| Iterable<IGetSuperProviderXXLKey> get keys => _map.keys; | |
| @override | |
| void remove(IGetSuperProviderXXLKey key) => _map.remove(key); | |
| } | |
| mixin _SuperStreamMixin on GetSuperProviderXXL { | |
| // ignore: close_sinks | |
| StreamController<IGetSuperProviderXXLValue>? __controller; | |
| StreamController<IGetSuperProviderXXLValue> get _controller => | |
| __controller ??= StreamController<Object?>.broadcast(); | |
| @override | |
| void operator []=( | |
| IGetSuperProviderXXLKey key, | |
| IGetSuperProviderXXLValue value, | |
| ) { | |
| super[key] = value; | |
| _controller.add(value); | |
| } | |
| @override | |
| Stream<IGetSuperProviderXXLValue> get stream => _controller.stream; | |
| } | |
| mixin _SuperHashMixin on GetSuperProviderXXL { | |
| @override | |
| int get hashCode => 0; | |
| @override | |
| bool operator ==(Object other) => identical(other, this); | |
| } | |
| mixin _SuperRepresentationMixin on GetSuperProviderXXL { | |
| @override | |
| String toString() => (StringBuffer() | |
| ..writeln('GET SUPER PROVIDER XXL') | |
| ..writeln('From GetX Architects and for GetX Architects with L <3 V E')) | |
| .toString(); | |
| } | |
| mixin _SuperGetMixin on GetSuperProviderXXL { | |
| @override | |
| T? getAs<T extends IGetSuperProviderXXLValue>(IGetSuperProviderXXLKey key) { | |
| final obj = super[key]; | |
| return obj is T ? obj : null; | |
| } | |
| } | |
| /// EXAMPLE: | |
| void main() { | |
| const value = 'hello world'; | |
| // ignore: avoid_print | |
| getXXL.stream.take(1).listen(print); | |
| null.getXXL[#key] = value; | |
| // ignore: avoid_print | |
| print(GetSuperProviderXXL.I.getAs<String>(#key)); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment