#flutter #dart
#flutter #dart
Вопрос:
Проблема
Я использую BLoC
шаблон для проверки TextFields
.
Для этого я использую StreamController
class для sink
потоков и listen
для потоков.
Хотя, Validator
он никогда не вызывается.
Классы и виджет
Это мой validator
класс
class Validators {
final validatePassword = StreamTransformer<String,String>.fromHandlers(
handleData: (password,sink)
{
if(password.length > 4)
{
sink.add(password);
}else{
sink.add('Password must be atleast 5 characters');
}
}
);
}
Затем я создаю BLoC
класс
class Bloc with Validators{
final _passwordController = StreamController<String>();
Function(String) get addPasswordStream => _passwordController.sink.add;
Stream<String> get getPasswordStream => _passwordController.stream.transform(validatePassword);
}
final bloc = Block ()
И добавляет его в my Cusotm Widget
с помощью StreamBuilder
класса
Widget passwordField(){
return StreamBuilder(
stream: bloc.getPasswordStream,
builder: (context,snapshot){
return TextField(
onChanged: bloc.addPasswordStream,
obscureText: true,
decoration: InputDecoration(
hintText: 'password',
labelText: 'password',
errorText: snapshot.error
),
);
},
);
}
Я реализовал тот же метод для средства email
проверки, и он работает, но по какой-то причине, когда я также применяю его к паролю TextField
, это не так. Я использовал flutter clean
, и flutter run
ничего не изменилось. Что я полностью пропустил?
Комментарии:
1. если вы используете
snapshot.error
wheresink.addError
вызывается тогда? или я что-то здесь пропустил?2. я полностью пропустил это в валидаторе, спасибо, теперь работает нормально