Как сделать проверку бэкэнда с помощью шаблона BLOC в Flutter TextField? - PullRequest
0 голосов
/ 26 декабря 2018

Я хочу создать TextField, которое проверяет, существует ли значение в базе данных.

Как выполнить асинхронную проверку с использованием шаблона BLOC с виджетом TextField?Должен ли я использовать StreamTransformer, чтобы добавить ошибку к Stream?Я пытался использовать DebounceStreamTransformer, но он просто блокирует Stream от получения нового значения.

Это мой Observable

 Observable<String> get valueStream => valueController.stream.transform(PropertyNameExist.handle('Blabla', null));

Это мой StreamTransformer

class PropertyNameExist implements StreamTransformerValidator {
  static StreamTransformer<String, String> handle(String fieldname, String data) {
    Http http = new Http();
    return StreamTransformer<String, String>.fromHandlers(
        handleData: (String stringData, sink) {
          http.post('/my_api',data:{
            'property_name':stringData,
          }).then((Response response){
            Map<String,dynamic> responseData = jsonDecode(response.data);
            bool isValid = responseData['valid'] == 'true';
            if(isValid){
              sink.add(stringData);
            } else {
              sink.addError('Opps Error');
            }
          });
    });
  }
}

Это мой Widget

StreamBuilder<String>(
        stream: valueStream,
        builder: (context, AsyncSnapshot<String> snapshot) {
          if (snapshot.hasData) {
            _textInputController.setTextAndPosition(snapshot.data);
          }
          return TextField(
            controller: _textInputController,
            onChanged: (String newVal) {
              updateValue(newVal);
            },
            decoration: InputDecoration(
              errorText: snapshot.error,
            ),
          );
        },
      )
...