Toggle navigation
Toggle navigation
This project
Loading...
Sign in
flutter_package
/
fluttertpc_get
Go to a project
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
Jonny Borges
2020-08-31 23:28:07 -0300
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Committed by
GitHub
2020-08-31 23:28:07 -0300
Commit
98707dc1aafe290a42cc6e9e781247227adfb346
98707dc1
1 parent
2db91ba0
Delete rx_obx.dart
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
119 deletions
lib/src/state_manager/rx/rx_obx.dart
lib/src/state_manager/rx/rx_obx.dart
deleted
100644 → 0
View file @
2db91ba
import
'dart:async'
;
import
'package:flutter/widgets.dart'
;
import
'package:get/src/state_manager/rx/rx_core/rx_interface.dart'
;
import
'../rx_core/rx_impl.dart'
;
typedef
WidgetCallback
=
Widget
Function
();
/// The simplest reactive widget in GetX.
///
/// Just pass your Rx variable in the root scope of the callback to have it
/// automatically registered for changes.
///
/// final _name = "GetX".obs;
/// Obx(() => Text( _name.value )),... ;
class
Obx
extends
StatefulWidget
{
final
WidgetCallback
builder
;
const
Obx
(
this
.
builder
);
_ObxState
createState
()
=>
_ObxState
();
}
class
_ObxState
extends
State
<
Obx
>
{
RxInterface
_observer
;
StreamSubscription
subs
;
_ObxState
()
{
_observer
=
Rx
();
}
@override
void
initState
()
{
subs
=
_observer
.
subject
.
stream
.
listen
((
data
)
=>
setState
(()
{}));
super
.
initState
();
}
@override
void
dispose
()
{
subs
.
cancel
();
_observer
.
close
();
super
.
dispose
();
}
Widget
get
notifyChilds
{
final
observer
=
getObs
;
getObs
=
_observer
;
final
result
=
widget
.
builder
();
if
(!
_observer
.
canUpdate
)
{
throw
"""
[Get] the improper use of a GetX has been detected.
You should only use GetX or Obx for the specific widget that will be updated.
If you are seeing this error, you probably did not insert any observable variables into GetX/Obx
or insert them outside the scope that GetX considers suitable for an update
(example: GetX => HeavyWidget => variableObservable).
If you need to update a parent widget and a child widget, wrap each one in an Obx/GetX.
"""
;
}
getObs
=
observer
;
return
result
;
}
@override
Widget
build
(
BuildContext
context
)
=>
notifyChilds
;
}
/// Similar to Obx, but manages a local state.
/// Pass the initial data in constructor.
/// Useful for simple local states, like toggles, visibility, themes,
/// button states, etc.
/// Sample:
/// ObxValue((data) => Switch(
/// value: data.value,
/// onChanged: (flag) => data.value = flag,
/// ),
/// false.obs,
/// ),
// TODO: change T to a proper Rx interface, that includes the accessor for ::value
class
ObxValue
<
T
extends
RxInterface
>
extends
StatefulWidget
{
final
Widget
Function
(
T
)
builder
;
final
T
data
;
const
ObxValue
(
this
.
builder
,
this
.
data
,
{
Key
key
})
:
super
(
key:
key
);
_ObxValueState
createState
()
=>
_ObxValueState
();
}
class
_ObxValueState
extends
State
<
ObxValue
>
{
RxInterface
_observer
;
StreamSubscription
subs
;
_ObxValueState
()
{
_observer
=
Rx
();
}
@override
void
initState
()
{
subs
=
_observer
.
subject
.
stream
.
listen
((
data
)
=>
setState
(()
{}));
super
.
initState
();
}
@override
void
dispose
()
{
subs
.
cancel
();
_observer
.
close
();
super
.
dispose
();
}
Widget
get
notifyChilds
{
final
observer
=
getObs
;
getObs
=
_observer
;
// observable is implicity taken from the constructor.
final
result
=
widget
.
builder
(
widget
.
data
);
getObs
=
observer
;
return
result
;
}
@override
Widget
build
(
BuildContext
context
)
=>
notifyChilds
;
}
Please
register
or
login
to post a comment