gpt4 book ai didi

dart - RxDart CombineLatest 不发出任何数据

转载 作者:行者123 更新时间:2023-12-05 07:24:13 28 4
gpt4 key购买 nike

我正在用 FLUTTER/DARTRXDART 做一个小项目。

部分代码如下:

class RegisterBloc with UserValidator {
final _username = BehaviorSubject<String>();
final _email = BehaviorSubject<String>();
final _password = BehaviorSubject<String>();

Function(String) get setUsername => _username.sink.add;
Stream<String> get username => _username.stream.transform(usernameValidatorTransformer);

Function(String) get setEmail => _email.sink.add;
Stream<String> get email => _email.stream.transform(emailValidatorTransformer);

Function(String) get setPassword => _password.sink.add;
Stream<String> get password => _password.stream.transform(passwordValidatorTransformer);

Stream<bool> get validForm => CombineLatestStream.combine3<String, String, String, bool>(_username.stream, _email.stream, _password.stream, (u, e, p) => true);

submit() async {
final form = RegisterForm(
username: _username.value,
email: _email.value,
password: _password.value
);
}

dispose() {
_username.close();
_email.close();
_password.close();
}
}

问题是 validForm Stream 发出空数据并且组合器永远不会被调用,即使所有流都已经发出至少 1 个值。最糟糕的是,这只发生在 Android(我的 v.8.1.0)上,代码在 iOS 11 上的工作方式与预期的一样。

如果有人想知道,我使用 StreamBuilder 小部件来更新小部件数据。

我在这里遗漏了什么吗?任何配置都需要事先设置,否则。

enter image description here

这里是我的开发环境:

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.2.1, on Mac OS X 10.13.6 17G6030, locale en-ID)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.1)
[✓] Android Studio (version 3.3)
[✓] Connected device (1 available)

RxDart:0.21.0安卓设备:8.1.0

最佳答案

我做了一个这样的项目并且它工作正常,你的 bloc 类中的一切都很好,我想问题出在你的验证器类中,如果你共享你的验证类也许我可以帮助你更多,这是我的代码它是 bloc 类:

class Bloc with Validator {
final _emailController = BehaviorSubject<String>();
final _passwordController = BehaviorSubject<String>();
final _textController = BehaviorSubject<String>();

// add to stream
Function(String) get reciveText => _textController.sink.add;
Function(String) get changeEmail => _emailController.sink.add;
Function(String) get changePassword => _passwordController.sink.add;

// access to stream
Stream<String> get emailvalidation =>
_emailController.stream.transform(validateEmail);
Stream<String> get passwordvalidation =>
_passwordController.stream.transform(validatePassword);
Stream<bool> get submitValid =>
Rx.combineLatest2(emailvalidation, passwordvalidation, (a, b) => true);
Stream<String> get accesstext =>
_textController.stream.transform(validateText);

submit() {
final validemail = _emailController.value;
final validpass = _passwordController.value;
reciveText('user name : $validemail \n pass : $validpass ');
print('all valid');
}

及其验证码:

final validateEmail = StreamTransformer<String, String>.fromHandlers(
handleData: (data, sink) {
if (data.contains('@') && data.contains('.')) {
sink.add(data);
} else {
sink.addError('Enter Valid emaill');
}
},
);
final validatePassword = StreamTransformer<String, String>.fromHandlers(
handleData: (data, sink) {
if (data.length > 3) {
sink.add(data);
} else {
sink.addError('Password is too short');
}
},
);

顺便说一句,您可以看到我的代码在我的 GitHub 中运行良好,也许它可以帮助您了解您的项目中出了什么问题。

https://github.com/Manticodes/flutter_loginscreen_blocpattern

我希望它能帮助你解决你的问题。

关于dart - RxDart CombineLatest 不发出任何数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55547535/

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