Хотите включить / отключить кнопку в зависимости от ввода пользователя. Если весь ввод текста соответствует определенному условию, только тогда активируйте кнопку «вставить».
Обычно кнопка активируется только в том случае, если все поля ввода верны. Но если одно или несколько неправильных, и пользователь переходит в другое поле ввода и меняет его на правильное / неправильное, кнопка становится доступной, даже если в какое-то поле введены неправильные данные. Проверить изображение:
Код для блока входа:
import 'package:rxdart/rxdart.dart';
class LoginScreenBloc {
final _firstCtrl = BehaviorSubject<String>();
final _lastCtrl = BehaviorSubject<String>();
final _userNameCtrl = BehaviorSubject<String>();
final _passwordCtrl = BehaviorSubject<String>();
Function(String) get changeFirst => _firstCtrl.sink.add;
Function(String) get changeLast => _lastCtrl.sink.add;
Function(String) get changeUser => _userNameCtrl.sink.add;
Function(String) get changePass => _passwordCtrl.sink.add;
final fieldSize = StreamTransformer<String, String>.fromHandlers(
handleData: (value, sink) {
if (value.length > 3) {
sink.add(value);
} else {
sink.addError("Can't be Empty!");
}
},
);
Stream<String> get firstname => _firstCtrl.stream.transform(fieldSize);
Stream<String> get lastname => _lastCtrl.stream.transform(fieldSize);
Stream<String> get username => _userNameCtrl.stream.transform(fieldSize);
Stream<String> get password => _passwordCtrl.stream.transform(fieldSize);
void insertValue() {
print("${_firstCtrl.value}");
print("${_lastCtrl.value}");
print("${_userNameCtrl.value}");
print("${_passwordCtrl.value}");
}
Stream<bool> get insertButton {
return CombineLatestStream(
[firstname, lastname, username, password],
(values) {
return true;
},
);
}
dispose() {
_firstCtrl.close();
_lastCtrl.close();
_userNameCtrl.close();
_passwordCtrl.close();
}
}
Код для кнопки:
Widget insertValue(BuildContext context, LoginScreenBloc bloc) {
return StreamBuilder<Object>(
stream: bloc.insertButton,
builder: (context, snapshot) {
return RaisedButton(
child: Text("Insert"),
onPressed: snapshot.hasData ? bloc.insertValue : null,
);
},
);
}
CombineLatestStream.combine4(firstname, lastname, username, password, (a, b, c, d) => true);
- person erratbi   schedule 31.05.2020type 'CombineLatestStream<dynamic, bool>' is not a subtype of type 'Stream<QuerySnapshot<Object?>>?'
любое предложение. Спасибо. - person Kamlesh   schedule 16.06.2021