Я впервые использую BLoC
в своем приложении.
Я следовал руководству, найденному в github, и скопировал его коды. Но в моем случае мой snapshot.hasData
всегда возвращает false.
BLo C код:
class LoginBloc extends Object with Validators implements BaseBloc {
final _emailController = BehaviorSubject<String>();
final _passwordController = BehaviorSubject<String>();
Function(String) get emailChanged => _emailController.sink.add;
Function(String) get passwordChanged => _passwordController.sink.add;
Stream<String> get email => _emailController.stream.transform(emailValidator);
Stream<String> get password =>
_passwordController.stream.transform(passwordValidator);
Stream<bool> get loginCheck =>
Rx.combineLatest2(email, password, (e, p) => true);
submit() {
print("xyx");
}
@override
void dispose() {
_emailController?.close();
_passwordController?.close();
}
}
abstract class BaseBloc {
void dispose();
}
Страница входа:
StreamBuilder<Object>(
stream: loginBloc.loginCheck,
builder: (context, snapshot) {
return GestureDetector(
onTap: () {
updateForm(0, snapshot.hasData);
},
child: Text(
"Login",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: fontSizeSmall,
color: _status == 0
? Colors.white
: Color(colorDisabled)),
),
);
}),
updateForm Метод:
updateForm(int status, bool hasData) {
print(hasData);
if (status == 1) {
setState(() {
title = "REGISTER";
_status = 1;
buttonAlignment = Alignment.centerRight;
});
} else if (status == 1 && hasData) {
Navigator.of(context)
.push(MaterialPageRoute(builder: (context) => HomeScreen()));
} else if (status == 0 && hasData) {
Navigator.of(context)
.push(MaterialPageRoute(builder: (context) => HomeScreen()));
} else {
setState(() {
title = "LOGIN";
_status = 0;
buttonAlignment = Alignment.centerLeft;
});
}
}
Спасибо за помощь!