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
Jonatas
2020-10-01 21:04:29 -0300
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
35bb8471344ac7be725075617ad45a4b99257397
35bb8471
1 parent
27167407
added experimental states class
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
101 additions
and
1 deletions
packages/get_rx/lib/src/rx_core/rx_impl.dart
packages/get_state_manager/lib/src/simple/get_state.dart
packages/get_rx/lib/src/rx_core/rx_impl.dart
View file @
35bb847
import
'dart:async'
;
import
'dart:collection'
;
import
'package:meta/meta.dart'
;
import
'../rx_core/rx_interface.dart'
;
part
'rx_num.dart'
;
...
...
@@ -230,6 +232,72 @@ class Rx<T> extends _RxImpl<T> {
dynamic
toJson
()
=>
(
value
as
dynamic
)?.
toJson
();
}
/// It's Experimental class, the Api can be change
abstract
class
RxState
<
T
>
extends
RxInterface
<
T
>
{
RxState
(
T
initial
)
{
_value
=
initial
;
}
T
_value
;
StreamController
<
T
>
subject
=
StreamController
<
T
>.
broadcast
();
final
_subscriptions
=
HashMap
<
Stream
<
T
>,
StreamSubscription
>();
bool
get
canUpdate
=>
_subscriptions
.
isNotEmpty
;
@protected
T
call
([
T
v
])
{
if
(
v
!=
null
)
{
value
=
v
;
}
return
value
;
}
bool
firstRebuild
=
true
;
void
addListener
(
Stream
<
T
>
rxGetx
)
{
if
(
_subscriptions
.
containsKey
(
rxGetx
))
{
return
;
}
_subscriptions
[
rxGetx
]
=
rxGetx
.
listen
((
data
)
{
subject
.
add
(
data
);
});
}
@protected
set
value
(
T
val
)
{
if
(
_value
==
val
&&
!
firstRebuild
)
return
;
firstRebuild
=
false
;
_value
=
val
;
subject
.
add
(
_value
);
}
/// Returns the current [value]
T
get
value
{
if
(
getObs
!=
null
)
{
getObs
.
addListener
(
subject
.
stream
);
}
return
_value
;
}
Stream
<
T
>
get
stream
=>
subject
.
stream
;
StreamSubscription
<
T
>
listen
(
void
Function
(
T
)
onData
,
{
Function
onError
,
void
Function
()
onDone
,
bool
cancelOnError
})
=>
stream
.
listen
(
onData
,
onError:
onError
,
onDone:
onDone
);
void
bindStream
(
Stream
<
T
>
stream
)
{
_subscriptions
[
stream
]
=
stream
.
listen
((
va
)
=>
value
=
va
);
}
@protected
void
change
(
T
newState
)
{
if
(
newState
!=
_value
)
{
value
=
newState
;
}
}
}
extension
StringExtension
on
String
{
/// Returns a `RxString` with [this] `String` as initial value.
RxString
get
obs
=>
RxString
(
this
);
...
...
packages/get_state_manager/lib/src/simple/get_state.dart
View file @
35bb847
import
'dart:collection'
;
import
'package:flutter/material.dart'
;
import
'package:get_core/get_core.dart'
;
import
'package:get_instance/get_instance.dart'
;
...
...
@@ -271,3 +270,36 @@ class Value<T> extends GetxController {
update
();
}
}
/// It's Experimental class, the Api can be change
abstract
class
GetState
<
T
>
extends
GetxController
{
GetState
(
T
initialValue
)
{
_state
=
initialValue
;
}
// StreamController<T> _subject;
// @override
// void onClose() {
// _subject?.close();
// }
// Stream<T> get stream {
// if (_subject == null) {
// _subject = StreamController<T>.broadcast();
// }
// return _subject.stream;
// }
T
_state
;
T
get
state
=>
_state
;
@protected
void
change
(
T
newState
)
{
if
(
newState
!=
_state
)
{
_state
=
newState
;
update
();
}
}
}
...
...
Please
register
or
login
to post a comment