Showing
2 changed files
with
12 additions
and
51 deletions
@@ -45,10 +45,7 @@ class GetX<T extends DisposableInterface> extends StatefulWidget { | @@ -45,10 +45,7 @@ class GetX<T extends DisposableInterface> extends StatefulWidget { | ||
45 | } | 45 | } |
46 | 46 | ||
47 | class GetXState<T extends DisposableInterface> extends State<GetX<T>> { | 47 | class GetXState<T extends DisposableInterface> extends State<GetX<T>> { |
48 | - GetXState() { | ||
49 | - _observer = RxNotifier(); | ||
50 | - } | ||
51 | - RxInterface? _observer; | 48 | + final _observer = RxNotifier(); |
52 | T? controller; | 49 | T? controller; |
53 | bool? _isCreator = false; | 50 | bool? _isCreator = false; |
54 | late StreamSubscription _subs; | 51 | late StreamSubscription _subs; |
@@ -80,7 +77,7 @@ class GetXState<T extends DisposableInterface> extends State<GetX<T>> { | @@ -80,7 +77,7 @@ class GetXState<T extends DisposableInterface> extends State<GetX<T>> { | ||
80 | if (widget.global && Get.smartManagement == SmartManagement.onlyBuilder) { | 77 | if (widget.global && Get.smartManagement == SmartManagement.onlyBuilder) { |
81 | controller?.onStart(); | 78 | controller?.onStart(); |
82 | } | 79 | } |
83 | - _subs = _observer!.listen((data) => setState(() {}), cancelOnError: false); | 80 | + _subs = _observer.listen((data) => setState(() {}), cancelOnError: false); |
84 | super.initState(); | 81 | super.initState(); |
85 | } | 82 | } |
86 | 83 | ||
@@ -107,30 +104,15 @@ class GetXState<T extends DisposableInterface> extends State<GetX<T>> { | @@ -107,30 +104,15 @@ class GetXState<T extends DisposableInterface> extends State<GetX<T>> { | ||
107 | } | 104 | } |
108 | } | 105 | } |
109 | _subs.cancel(); | 106 | _subs.cancel(); |
110 | - _observer!.close(); | 107 | + _observer.close(); |
111 | controller = null; | 108 | controller = null; |
112 | _isCreator = null; | 109 | _isCreator = null; |
113 | super.dispose(); | 110 | super.dispose(); |
114 | } | 111 | } |
115 | 112 | ||
116 | - Widget get notifyChildren { | ||
117 | - final observer = RxInterface.proxy; | ||
118 | - RxInterface.proxy = _observer; | ||
119 | - final result = widget.builder(controller!); | ||
120 | - if (!_observer!.canUpdate) { | ||
121 | - throw """ | ||
122 | - [Get] the improper use of a GetX has been detected. | ||
123 | - You should only use GetX or Obx for the specific widget that will be updated. | ||
124 | - If you are seeing this error, you probably did not insert any observable variables into GetX/Obx | ||
125 | - or insert them outside the scope that GetX considers suitable for an update | ||
126 | - (example: GetX => HeavyWidget => variableObservable). | ||
127 | - If you need to update a parent widget and a child widget, wrap each one in an Obx/GetX. | ||
128 | - """; | ||
129 | - } | ||
130 | - RxInterface.proxy = observer; | ||
131 | - return result; | ||
132 | - } | ||
133 | - | ||
134 | @override | 113 | @override |
135 | - Widget build(BuildContext context) => notifyChildren; | 114 | + Widget build(BuildContext context) => RxInterface.notifyChildren( |
115 | + _observer, | ||
116 | + () => widget.builder(controller!), | ||
117 | + ); | ||
136 | } | 118 | } |
@@ -20,17 +20,13 @@ abstract class ObxWidget extends StatefulWidget { | @@ -20,17 +20,13 @@ abstract class ObxWidget extends StatefulWidget { | ||
20 | } | 20 | } |
21 | 21 | ||
22 | class _ObxState extends State<ObxWidget> { | 22 | class _ObxState extends State<ObxWidget> { |
23 | - RxInterface? _observer; | 23 | + final _observer = RxNotifier(); |
24 | late StreamSubscription subs; | 24 | late StreamSubscription subs; |
25 | 25 | ||
26 | - _ObxState() { | ||
27 | - _observer = RxNotifier(); | ||
28 | - } | ||
29 | - | ||
30 | @override | 26 | @override |
31 | void initState() { | 27 | void initState() { |
32 | - subs = _observer!.listen(_updateTree, cancelOnError: false); | ||
33 | super.initState(); | 28 | super.initState(); |
29 | + subs = _observer.listen(_updateTree, cancelOnError: false); | ||
34 | } | 30 | } |
35 | 31 | ||
36 | void _updateTree(_) { | 32 | void _updateTree(_) { |
@@ -42,30 +38,13 @@ class _ObxState extends State<ObxWidget> { | @@ -42,30 +38,13 @@ class _ObxState extends State<ObxWidget> { | ||
42 | @override | 38 | @override |
43 | void dispose() { | 39 | void dispose() { |
44 | subs.cancel(); | 40 | subs.cancel(); |
45 | - _observer!.close(); | 41 | + _observer.close(); |
46 | super.dispose(); | 42 | super.dispose(); |
47 | } | 43 | } |
48 | 44 | ||
49 | - Widget get notifyChilds { | ||
50 | - final observer = RxInterface.proxy; | ||
51 | - RxInterface.proxy = _observer; | ||
52 | - final result = widget.build(); | ||
53 | - if (!_observer!.canUpdate) { | ||
54 | - throw """ | ||
55 | - [Get] the improper use of a GetX has been detected. | ||
56 | - You should only use GetX or Obx for the specific widget that will be updated. | ||
57 | - If you are seeing this error, you probably did not insert any observable variables into GetX/Obx | ||
58 | - or insert them outside the scope that GetX considers suitable for an update | ||
59 | - (example: GetX => HeavyWidget => variableObservable). | ||
60 | - If you need to update a parent widget and a child widget, wrap each one in an Obx/GetX. | ||
61 | - """; | ||
62 | - } | ||
63 | - RxInterface.proxy = observer; | ||
64 | - return result; | ||
65 | - } | ||
66 | - | ||
67 | @override | 45 | @override |
68 | - Widget build(BuildContext context) => notifyChilds; | 46 | + Widget build(BuildContext context) => |
47 | + RxInterface.notifyChildren(_observer, widget.build); | ||
69 | } | 48 | } |
70 | 49 | ||
71 | /// The simplest reactive widget in GetX. | 50 | /// The simplest reactive widget in GetX. |
-
Please register or login to post a comment