Flutter 如何将ValueNotifier转换为流?

Flutter 如何将ValueNotifier转换为流?,flutter,dart,Flutter,Dart,我的代码上有一些值通知程序(TextEditingController),我想将它们转换为流,这样我就可以使用rx\u dart的Observable.CombineTest在我的代码上立即检查它们是否都为空,并返回检查结果(bool)并且只将其嵌入到一个StreamBuilder中 诸如此类: StreamBuilder<bool>( stream: Observe.combineLatest2(STREAM1, STREAM2, (s1,s2) => s

我的代码上有一些值通知程序(TextEditingController),我想将它们转换为流,这样我就可以使用
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();
}
}

您找到解决方案了吗?我在下面发布的解决方案适合我。但这并不漂亮。。。