- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 FLUTTER/DART
和 RXDART
做一个小项目。
部分代码如下:
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 小部件来更新小部件数据。
我在这里遗漏了什么吗?任何配置都需要事先设置,否则。
这里是我的开发环境:
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/
使用运行 rxjs 迁移工具后 rxjs-5-to-6-migrate -p src/tsconfig.app.json 我现在收到一个 linting 错误: combineLatest is de
我遇到了 rxjs 和 combineLatest 方法的问题。我试图在 combineLatest 中调用 combineLatest 并且它不起作用,尽管它返回 Observable 对象。请帮助
如何通过combineLatest组合Observables。 mergeLatest 未定义 我正在使用 Angular js 7。我想 Marge 拖曳查询字符串参数,但是当我编写 obserab
我有 3 个事件需要合并,当其中一个被触发时,调用服务。我使用了 combineLatest,但只有当第一个事件被 filterChanged 触发时它才有效。 filterChanged 是一个本地
我很难理解为什么 combineLatest没有返回最新值。这个例子有点做作,但至少它说明了我的问题。注意 color 的值来自 combineLatest observable 返回先前的值,当 s
我有一个带有频繁值的流和一个带有较慢值的流。我想将它们组合起来,但只在较慢的一个发出时才发出一个值。所以combineLatest不起作用。 像这样: a1 a2 b1 (a2,b1) a3 a4 a
我有一些观察结果。我需要知道哪个触发了订阅。 Observable.combineLatest( this.tournamentsService.getUpcoming(),
我对以下重载感兴趣: public static IObservable> CombineLatest(this params IObservable[] sources); public stati
我想知道我的应用程序何时离线并恢复在线。我在 rxjs 中注册了以下事件: const online = Rx.Observable.fromEvent(window, 'online'); cons
如果我有两个 SignalProducers(实际上它们是 API 服务请求,所以它们只发送一次“下一个”),并将它们与 combineLatest 组合(因为我想在两者完成后关闭加载微调器),如果其
我有一个从后端获取数据的 Angular 解析器。我有以下调用要执行: GetProject(projectId): Observable GetSites(projectId): Observabl
我正在用 FLUTTER/DART 和 RXDART 做一个小项目。 部分代码如下: class RegisterBloc with UserValidator { final _username =
我正在尝试关注 this example 但在使用 combineLatest() 时遇到问题: Property 'subscribe' does not exist on type 'Operat
我需要将来自两个来源的数据合并为一个 res: {data1: any, data2: any}对象,我需要实现这个 即使其中一个源不发出任何值 这是我期望的结构: xxx ( source1
我有一个主页页面,用户在其中点击联系我即可重定向到联系页面: home.component.html Contact me home.component.ts: import { Compon
我想执行一些顺序代码,但我无法从 combineLatest 中提取数据 const { datosPersona, participante } = await combineLatest( t
我有两个 observable 想与 combineLatest 结合起来: const o1 = from(['a', 'b', 'c']); const o2 = of('content from
我需要在这个 combineLatest 中处理每个函数的错误场景。我会在下面添加代码 const combined = combineLatest( this.myservice1.fn1(pa
我有 3 个可观察的事件流 - 按日期顺序 -(主要事件、有关销售的事件和有关客户的事件) - 每个流都包含一种与各种车辆相关的事件,每个事件都有一个 vehicleID 和各种其他事件特性。事件可以
我需要一种方法将值从一个 observable 传递给两个函数,每个函数都接受一个值,每个函数依次返回一个 observable(只发出一个值,然后完成)。我希望 .combineLatest() 允
我是一名优秀的程序员,十分优秀!