Jonny Borges
Committed by GitHub

Update to 3.4.3

## [3.4.3]
- Fix onInit fired only first time
- Fix language callback(@lundin)
- Fix docs (@nipodemos)
## [3.4.2]
- Fix individual imports
## [3.4.1]
- Structure organization, and improvements.
... ...
library get;
export 'src/instance/instance_manager.dart';
export 'src/navigation/route_manager.dart';
export 'src/state_manager/state_manager.dart';
export 'src/utils/utils.dart';
export 'instance_manager.dart';
export 'route_manager.dart';
export 'state_manager.dart';
export 'utils.dart';
... ...
export 'src/instance/get_instance.dart';
export 'src/instance/extension_instance.dart';
export 'src/navigation/routes/bindings_interface.dart';
... ...
export 'src/navigation/routes/custom_transition.dart';
export 'src/navigation/routes/transitions_type.dart';
export 'src/navigation/routes/get_route.dart';
export 'src/navigation/routes/default_route.dart';
export 'src/navigation/routes/observers/route_observer.dart';
export 'src/navigation/root/root_widget.dart';
export 'src/navigation/snackbar/snack_route.dart';
export 'src/navigation/bottomsheet/bottomsheet.dart';
export 'src/navigation/snackbar/snack.dart';
export 'src/get_main.dart';
export 'src/navigation/routes/default_route.dart';
export 'src/navigation/root/smart_management.dart';
export 'src/navigation/extension_navigation.dart';
... ...
... ... @@ -4,7 +4,7 @@ import 'navigation/root/root_controller.dart';
import 'navigation/routes/custom_transition.dart';
import 'navigation/routes/observers/route_observer.dart';
import 'navigation/routes/transitions_type.dart';
import 'utils/utils.dart';
import '../utils.dart';
///Use Get.to instead of Navigator.push, Get.off instead of Navigator.pushReplacement,
///Get.offAll instead of Navigator.pushAndRemoveUntil. For named routes just add "named"
... ... @@ -33,7 +33,7 @@ abstract class GetInterface {
GetMaterialController getxController = GetMaterialController();
Locale locale;
Locale fallbackLocale;
GlobalKey<NavigatorState> key = GlobalKey<NavigatorState>();
... ...
... ... @@ -75,8 +75,8 @@ class GetInstance {
assert(builder != null);
String key = _getKey(S, name);
GetConfig._singl
.putIfAbsent(key, () => FcBuilder<S>(isSingleton, builder, permanent));
GetConfig._singl.putIfAbsent(
key, () => FcBuilder<S>(isSingleton, builder, permanent, false));
}
Future<void> removeDependencyByRoute(String routeName) async {
... ... @@ -97,9 +97,17 @@ class GetInstance {
keysToRemove.clear();
}
bool isDependencyInit<S>({String name}) {
bool initDependencies<S>({String name}) {
String key = _getKey(S, name);
return GetConfig.routesKey.containsKey(key);
bool isInit = GetConfig._singl[key].isInit;
if (!isInit) {
startController<S>(tag: name);
GetConfig._singl[key].isInit = true;
if (GetConfig.smartManagement != SmartManagement.onlyBuilder) {
registerRouteInstance<S>(tag: name);
}
}
return true;
}
void registerRouteInstance<S>({String tag}) {
... ... @@ -112,7 +120,7 @@ class GetInstance {
return GetConfig._singl[key].getSependency() as S;
}
void initController<S>({String tag}) {
void startController<S>({String tag}) {
String key = _getKey(S, tag);
final i = GetConfig._singl[key].getSependency();
... ... @@ -146,14 +154,8 @@ class GetInstance {
/// Find a instance from required class
S find<S>({String tag, FcBuilderFunc<S> instance}) {
String key = _getKey(S, tag);
bool callInit = false;
if (isRegistred<S>(tag: tag)) {
if (!isDependencyInit<S>() &&
GetConfig.smartManagement != SmartManagement.onlyBuilder) {
registerRouteInstance<S>(tag: tag);
callInit = true;
}
if (isRegistred<S>(tag: tag)) {
FcBuilder builder = GetConfig._singl[key] as FcBuilder;
if (builder == null) {
if (tag == null) {
... ... @@ -162,9 +164,7 @@ class GetInstance {
throw "class ${S.toString()} with tag '$tag' is not register";
}
}
if (callInit) {
initController<S>(tag: tag);
}
initDependencies<S>();
return GetConfig._singl[key].getSependency() as S;
} else {
... ... @@ -175,21 +175,13 @@ class GetInstance {
print('[GETX] $S instance was created at that time');
S _value = put<S>(GetConfig._factory[key].builder() as S);
if (!isDependencyInit<S>() &&
GetConfig.smartManagement != SmartManagement.onlyBuilder) {
registerRouteInstance<S>(tag: tag);
callInit = true;
}
initDependencies<S>();
if (GetConfig.smartManagement != SmartManagement.keepFactory) {
if (!GetConfig._factory[key].fenix) {
GetConfig._factory.remove(key);
}
if (GetConfig.smartManagement != SmartManagement.keepFactory &&
!GetConfig._factory[key].fenix) {
GetConfig._factory.remove(key);
}
if (callInit) {
initController<S>(tag: tag);
}
return _value;
}
}
... ... @@ -263,8 +255,9 @@ class FcBuilder<S> {
FcBuilderFunc builderFunc;
S dependency;
bool permanent = false;
bool isInit = false;
FcBuilder(this.isSingleton, this.builderFunc, this.permanent);
FcBuilder(this.isSingleton, this.builderFunc, this.permanent, this.isInit);
S getSependency() {
if (isSingleton) {
... ...
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:get/src/get_interface.dart';
import 'package:get/src/instance/instance_manager.dart';
import 'package:get/src/navigation/route_manager.dart';
import 'package:get/instance_manager.dart';
import 'package:get/route_manager.dart';
import 'root/parse_route.dart';
import 'routes/bindings_interface.dart';
... ...
... ... @@ -281,7 +281,8 @@ extension Trans on String {
Get.translations[Get.locale.languageCode].containsKey(this)) {
return Get.translations[Get.locale.languageCode][this];
// If there is no corresponding language or corresponding key, return the key.
} else if (Get.fallbackLocale != null && Get.translations.containsKey(
} else if (Get.fallbackLocale != null &&
Get.translations.containsKey(
"${Get.fallbackLocale.languageCode}_${Get.fallbackLocale.countryCode}") &&
Get.translations[
"${Get.fallbackLocale.languageCode}_${Get.fallbackLocale.countryCode}"]
... ...
... ... @@ -3,10 +3,10 @@ import 'dart:ui' show lerpDouble;
import 'package:flutter/cupertino.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:get/src/navigation/route_manager.dart';
import 'package:get/route_manager.dart';
import 'package:get/src/get_main.dart';
import 'package:get/src/instance/get_instance.dart';
import 'package:get/src/utils/utils.dart';
import 'package:get/utils.dart';
import 'bindings_interface.dart';
import 'custom_transition.dart';
import 'default_transitions.dart';
... ...
... ... @@ -4,21 +4,40 @@ import 'package:get/src/instance/get_instance.dart';
import 'package:get/src/navigation/root/smart_management.dart';
import 'package:get/src/state_manager/rx/rx_interface.dart';
typedef Disposer = void Function();
class GetxController extends DisposableInterface {
final HashSet<UpdaterBuilder> _updaters = HashSet<UpdaterBuilder>();
final HashSet<StateSetter> _updaters = HashSet<StateSetter>();
final HashMap<String, StateSetter> _updatersIds =
HashMap<String, StateSetter>();
/// Update GetBuilder with update();
void update([List<String> ids, bool condition = true]) {
if (!condition) return;
(ids == null)
? _updaters.forEach((rs) {
rs().updater(() {});
})
: _updaters
.where((element) => ids.contains(element().id))
.forEach((rs) => rs().updater(() {}));
? _updaters.forEach((rs) => rs(() {}))
: ids.forEach((element) {
_updatersIds[element]?.call(() {});
});
}
Disposer addListener(StateSetter listener) {
_updaters.add(listener);
return () => _updaters.remove(listener);
}
// void removeListener(StateSetter listener) {
// _updaters.remove(listener);
// }
Disposer addListenerId(String key, StateSetter listener) {
_updatersIds[key] = listener;
return () => _updatersIds.remove(key);
}
void disposeKey(String key) => _updatersIds.remove(key);
@override
void onInit() async {}
... ... @@ -29,6 +48,121 @@ class GetxController extends DisposableInterface {
void onClose() async {}
}
// class GetBuilder<T extends GetxController> extends StatefulWidget {
// final Widget Function(T) builder;
// final bool global;
// final String id;
// final String tag;
// final bool autoRemove;
// final bool assignId;
// final void Function(State state) initState, dispose, didChangeDependencies;
// final void Function(GetBuilder oldWidget, State state) didUpdateWidget;
// final T init;
// const GetBuilder({
// Key key,
// this.init,
// this.global = true,
// @required this.builder,
// this.autoRemove = true,
// this.assignId = false,
// this.initState,
// this.tag,
// this.dispose,
// this.id,
// this.didChangeDependencies,
// this.didUpdateWidget,
// }) : assert(builder != null),
// super(key: key);
// @override
// _GetBuilderState<T> createState() => _GetBuilderState<T>();
// }
// class _GetBuilderState<T extends GetxController> extends State<GetBuilder<T>> {
// GetxController controller;
// bool isCreator = false;
// @override
// void initState() {
// super.initState();
// if (widget.initState != null) widget.initState(this);
// if (widget.global) {
// final isPrepared = GetInstance().isPrepared<T>(tag: widget.tag);
// final isRegistred = GetInstance().isRegistred<T>(tag: widget.tag);
// if (isPrepared) {
// if (GetConfig.smartManagement != SmartManagement.keepFactory) {
// isCreator = true;
// }
// controller = GetInstance().find<T>(tag: widget.tag);
// } else if (isRegistred) {
// controller = GetInstance().find<T>(tag: widget.tag);
// isCreator = false;
// } else {
// controller = widget.init;
// isCreator = true;
// GetInstance().put<T>(controller, tag: widget.tag);
// }
// } else {
// controller = widget.init;
// isCreator = true;
// controller?.onStart();
// }
// if (widget.global &&
// GetConfig.smartManagement == SmartManagement.onlyBuilder) {
// controller?.onStart();
// }
// (widget.id == null)
// ? controller.addListener(setState)
// : controller.addListenerId(widget.id, setState);
// }
// @override
// void dispose() {
// super.dispose();
// if (widget.dispose != null) widget.dispose(this);
// if (isCreator || widget.assignId) {
// if (widget.autoRemove && GetInstance().isRegistred<T>(tag: widget.tag)) {
// (widget.id == null)
// ? controller.removeListener(setState)
// : controller.removeListenerId(widget.id);
// GetInstance().delete<T>(tag: widget.tag);
// }
// } else {
// (widget.id == null)
// ? controller.removeListener(setState)
// : controller.removeListenerId(widget.id);
// }
// }
// @override
// void didChangeDependencies() {
// super.didChangeDependencies();
// if (widget.didChangeDependencies != null) {
// widget.didChangeDependencies(this);
// }
// }
// @override
// void didUpdateWidget(GetBuilder oldWidget) {
// super.didUpdateWidget(oldWidget as GetBuilder<T>);
// if (widget.didUpdateWidget != null) widget.didUpdateWidget(oldWidget, this);
// }
// @override
// Widget build(BuildContext context) {
// return widget.builder(controller);
// }
// }
// class Updater {
// final StateSetter updater;
// final String id;
// const Updater({this.updater, this.id});
// }
// typedef UpdaterBuilder = Updater Function();
class GetBuilder<T extends GetxController> extends StatefulWidget {
final Widget Function(T) builder;
final bool global;
... ... @@ -59,12 +193,15 @@ class GetBuilder<T extends GetxController> extends StatefulWidget {
}
class _GetBuilderState<T extends GetxController> extends State<GetBuilder<T>> {
T controller;
UpdaterBuilder real;
GetxController controller;
bool isCreator = false;
final HashSet<Disposer> disposers = HashSet<Disposer>();
Disposer remove;
@override
void initState() {
super.initState();
if (widget.initState != null) widget.initState(this);
if (widget.global) {
final isPrepared = GetInstance().isPrepared<T>(tag: widget.tag);
... ... @@ -75,25 +212,17 @@ class _GetBuilderState<T extends GetxController> extends State<GetBuilder<T>> {
isCreator = true;
}
controller = GetInstance().find<T>(tag: widget.tag);
real = () => Updater(updater: setState, id: widget.id);
controller._updaters.add(real);
} else if (isRegistred) {
controller = GetInstance().find<T>(tag: widget.tag);
isCreator = false;
real = () => Updater(updater: setState, id: widget.id);
controller._updaters.add(real);
} else {
controller = widget.init;
isCreator = true;
real = () => Updater(updater: setState, id: widget.id);
controller._updaters.add(real);
GetInstance().put<T>(controller, tag: widget.tag);
}
} else {
controller = widget.init;
isCreator = true;
real = () => Updater(updater: setState, id: widget.id);
controller._updaters.add(real);
controller?.onStart();
}
... ... @@ -101,6 +230,9 @@ class _GetBuilderState<T extends GetxController> extends State<GetBuilder<T>> {
GetConfig.smartManagement == SmartManagement.onlyBuilder) {
controller?.onStart();
}
remove = (widget.id == null)
? controller?.addListener(setState)
: controller?.addListenerId(widget.id, setState);
}
@override
... ... @@ -109,12 +241,17 @@ class _GetBuilderState<T extends GetxController> extends State<GetBuilder<T>> {
if (widget.dispose != null) widget.dispose(this);
if (isCreator || widget.assignId) {
if (widget.autoRemove && GetInstance().isRegistred<T>(tag: widget.tag)) {
controller._updaters.remove(real);
if (remove != null) remove();
GetInstance().delete<T>(tag: widget.tag);
}
} else {
controller._updaters.remove(real);
if (remove != null) remove();
}
disposers.forEach((element) {
element();
});
}
@override
... ... @@ -131,16 +268,73 @@ class _GetBuilderState<T extends GetxController> extends State<GetBuilder<T>> {
if (widget.didUpdateWidget != null) widget.didUpdateWidget(oldWidget, this);
}
Widget get notifyChilds {
final old = Value._remove;
Value._remove = disposers;
final observer = Value._setter;
Value._setter = setState;
final result = widget.builder(controller);
Value._setter = observer;
Value._remove = old;
return result;
}
@override
Widget build(BuildContext context) {
return widget.builder(controller);
Widget build(BuildContext context) => notifyChilds;
}
class Value<T> extends GetxController {
Value([this._value]);
T _value;
T get value {
if (_setter != null) {
if (!_updaters.contains(_setter)) {
final add = addListener(_setter);
_remove.add(add);
}
}
return _value;
}
static StateSetter _setter;
static HashSet<Disposer> _remove;
set value(T newValue) {
if (_value == newValue) return;
_value = newValue;
update();
}
}
class Updater {
final StateSetter updater;
final String id;
const Updater({this.updater, this.id});
class SimpleBuilder extends StatefulWidget {
final Widget Function(BuildContext) builder;
const SimpleBuilder({Key key, @required this.builder})
: assert(builder != null),
super(key: key);
@override
_SimpleBuilderState createState() => _SimpleBuilderState();
}
typedef UpdaterBuilder = Updater Function();
class _SimpleBuilderState extends State<SimpleBuilder> {
final HashSet<Disposer> disposers = HashSet<Disposer>();
@override
void dispose() {
super.dispose();
disposers.forEach((element) => element());
}
@override
Widget build(BuildContext context) {
HashSet<Disposer> old = Value._remove;
Value._remove = disposers;
StateSetter observer = Value._setter;
Value._setter = setState;
Widget result = widget.builder(context);
Value._remove = old;
Value._setter = observer;
return result;
}
}
... ...
export 'src/state_manager/simple/get_state.dart';
export 'src/state_manager/simple/immutable_state.dart';
export 'src/state_manager/simple/get_view.dart';
export 'src/state_manager/simple/mixin_state.dart';
export 'src/state_manager/rx/rx_interface.dart';
export 'src/state_manager/rx/rx_impl.dart';
export 'src/state_manager/rx/rx_event.dart';
export 'src/state_manager/rx/rx_obx.dart';
export 'src/state_manager/rx/rx_getbuilder.dart';
... ...
export 'src/utils/context_extensions/extensions.dart';
export 'src/utils/queue/get_queue.dart';
export 'src/utils/platform/platform.dart';
export 'src/utils/regex/get_utils.dart';
export 'src/utils/regex/get_utils_extensions.dart';
... ...
... ... @@ -7,7 +7,7 @@ packages:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.1"
version: "2.4.2"
boolean_selector:
dependency: transitive
description:
... ... @@ -21,7 +21,7 @@ packages:
name: characters
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
version: "1.1.0-nullsafety"
charcode:
dependency: transitive
description:
... ... @@ -42,7 +42,7 @@ packages:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.14.13"
version: "1.15.0-nullsafety"
fake_async:
dependency: transitive
description:
... ... @@ -73,7 +73,7 @@ packages:
name: meta
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.8"
version: "1.3.0-nullsafety"
path:
dependency: transitive
description:
... ... @@ -99,7 +99,7 @@ packages:
name: stack_trace
url: "https://pub.dartlang.org"
source: hosted
version: "1.9.3"
version: "1.9.5"
stream_channel:
dependency: transitive
description:
... ... @@ -134,13 +134,13 @@ packages:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
version: "1.3.0-nullsafety"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.8"
version: "2.1.0-nullsafety"
sdks:
dart: ">=2.9.0-14.0.dev <3.0.0"
dart: ">=2.9.0-18.0 <2.9.0"
... ...
name: get
description: Open screens/snackbars/dialogs/bottomSheets without context, manage states and inject dependencies easily with GetX.
version: 3.4.1
version: 3.4.3
homepage: https://github.com/jonataslaw/get
environment:
... ...