Flutter 如何将ValueNotifier转换为流?
我的代码上有一些值通知程序(TextEditingController),我想将它们转换为流,这样我就可以使用Flutter 如何将ValueNotifier转换为流?,flutter,dart,Flutter,Dart,我的代码上有一些值通知程序(TextEditingController),我想将它们转换为流,这样我就可以使用rx\u dart的Observable.CombineTest在我的代码上立即检查它们是否都为空,并返回检查结果(bool)并且只将其嵌入到一个StreamBuilder中 诸如此类: StreamBuilder<bool>( stream: Observe.combineLatest2(STREAM1, STREAM2, (s1,s2) => s
rx\u dart
的Observable.CombineTest在我的代码上立即检查它们是否都为空,并返回检查结果(bool)并且只将其嵌入到一个StreamBuilder
中
诸如此类:
StreamBuilder<bool>(
stream: Observe.combineLatest2(STREAM1, STREAM2, (s1,s2) => s1.text.isNotEmpty && s2.text.isNotEmpty),
builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
if (snapshot.data == true) {
return ShowUp.fifth(
child: Padding(
padding: const EdgeInsets.all(16),
child: RaisedButton(
shape: StadiumBorder(),
child: Text("Finish"),
onPressed: _finishPressed,
),
),
);
} else {
return Container();
}
},
)
StreamBuilder(
stream:Observe.combinerelatest2(STREAM1,STREAM2,(s1,s2)=>s1.text.isNotEmpty&&s2.text.isNotEmpty),
生成器:(BuildContext上下文,异步快照){
如果(snapshot.data==true){
第五回(
孩子:填充(
填充:常量边集。全部(16),
孩子:升起按钮(
形状:StadiumBorder(),
子项:文本(“完成”),
按下时:_finishPressed,
),
),
);
}否则{
返回容器();
}
},
)
如何将ValueNotifier转换为流?我提供的解决方案就是这个,但我不知道这是否是正确的方法。我将在这里分享,但我希望有人有更好的目标: 记住:使用后必须调用它的close方法,否则它会泄漏
class ValueNotifierStream<T> extends Stream<T> {
final ValueNotifier _valueNotifier;
final _subject = BehaviorSubject<T>();
VoidCallback _notifierCallback;
ValueNotifierStream(this._valueNotifier) {
_subject.add(_valueNotifier.value);
_notifierCallback = () {
_subject.add(_valueNotifier.value);
};
_valueNotifier.addListener(_notifierCallback);
}
@override
StreamSubscription<T> listen(
void Function(T event) onData, {
Function onError,
void Function() onDone,
bool cancelOnError,
}) {
return _subject.listen(
onData,
onError: onError,
onDone: onDone,
cancelOnError: cancelOnError,
);
}
void close() {
_valueNotifier.removeListener(_notifierCallback);
_subject.close();
}
}
类值NotifierStream扩展流{
最终估价通知人\u估价通知人;
最终_subject=行为主体();
VoidCallback\u通知callback;
ValueNotifierStream(此.\u valueNotifier){
_subject.add(_valueNotifier.value);
_notifierCallback=(){
_subject.add(_valueNotifier.value);
};
_valueNotifier.addListener(\u notifierCallback);
}
@凌驾
听(
无效函数(T事件)onData{
函数onError,
void函数()onDone,
布尔取消者,
}) {
返回主题(
翁达塔,
onError:onError,
翁东:翁东,
cancelOnError:cancelOnError,
);
}
无效关闭(){
_valueNotifier.RemovelListener(_notifierCallback);
_subject.close();
}
}
您找到解决方案了吗?我在下面发布的解决方案适合我。但这并不漂亮。。。