gpt4 book ai didi

dart - 使用两个组合流创建 RxCommand

转载 作者:IT王子 更新时间:2023-10-29 06:34:31 25 4
gpt4 key购买 nike

我有一个包含两个输入的表单:name & address 和一个save 按钮。

所以我为每个命令创建了一个changeisValid命令

final _nameChangedCommand = RxCommand.createSync<String, String>((x) => x);
final _isNameValidCommand = RxCommand.createSync<String, bool>((x) => x != "");

final _addressChangedCommand = RxCommand.createSync<String, String>((x) => x);
final _isAddressValidCommand = RxCommand.createSync<String, bool>((x) => x != "");

我正在尝试为保存按钮创建相同的按钮,其中 canSave = _isNameValidCommand && _isAddressValidCommand,但无法弄清楚语法。

我创建了一个 ZipStream:

final _isNameAddressValidStream =
new StreamZip([_isNameValidCommand, _isAddressValidCommand])
.map((results) => results.first && results.last)
.distinct();

final _canSaveCommand =
RxCommand.createFromStream((_) => _isNameAddressValidStream);

但永远不会调用流。

有什么提示吗?

最佳答案

是的,我也想到了“combineLatest”。 combineLatest 的重要之处在于它不会发出任何数据,除非它在所有输入流上都收到了一些东西。如果在将它提供给 conbineLatest 之前添加一个具有初始值的 .startWith ,则最好达到这一点。有点像

final _isNameAddressValidStream =
Observable.combineLatest2<String, String, bool>(
_nameChangedCommand.startWith(''),
_addressChangedCommand.startWidth(''),
(name, address) => name != '' && address != '');

final _saveCommand = RxCommand.createSyncNoResult(
(dataObject) => _saveToWhatever, // your actual save function
canExecute: _isNameAddressValidStream);
.distinct();

所以你只需要两个命令,你可以为你的 Button 的 onTap 处理程序使用 _saveCommand 并使用 _saveCommand.canExecute Observable 来提供 StreamBuilder 在激活或停用状态下创建您的按钮。

关于dart - 使用两个组合流创建 RxCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52823158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com