Сброс потока для очистки ошибок Snapshot - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть текстовое поле, обернутое в StreamBuilder и привязанное к потоку, поток проходит через валидатор, когда данные добавляются в приемник.Есть кнопка, которая добавляет значение текстового поля в приемник, и любая ошибка снимка отображается на InputDecoration.

Текстовое поле находится внутри виджета с контролем состояния, который является компонентом родительского виджета с контролем состояния.Блок инициализируется вне компоновщика виджетов.

Я пытаюсь сбросить поток, чтобы ошибка моментального снимка исчезла, когда дочерний виджет анимируется в и из поля зрения.В настоящее время ошибка сохраняется после перестройки дочернего виджета.Есть идеи, как этого добиться?

class Parent extends StatefulWidget {
    @override
    State<StatefulWidget> createState() {
      return ParentState();
    }
}

class ParentState extends State<Parent> with TickerProviderStateMixin {
    @override
    Widget build(BuildContext context) {
      return Container(
        child: Stack(
          children: <Widget>[
            child(),
            // other forms
          ],
        )
      );
    }
}

class Child extends StatefulWidget {
    @override
    State<StatefulWidget> createState() {
      return ChildState();
    }
}

class ChildState extends State<Child> {
    Bloc bloc;

    @override
    void initState() {
      super.initState();
      bloc = Bloc();
    }

    @override
    Widget build(BuildContext context) {
      return BlocProvider(
          bloc: appBloc,
          child: Container(
              child: StreamBuilder(
                  stream: bloc.input,
                  builder: (context, snapshot) {
                     return TextFormField(
                         decoration: InputDecoration(
                            errorText: snapshot.error,
                         ),
                      );
                  }
              ),
          ),
      );
   }
}

1 Ответ

0 голосов
/ 24 апреля 2019

Похоже, ваш валидатор все еще добавляет ошибку в поток.Обычно валидный код выглядит следующим образом:

...
if (value.validated) {
  sink.add(value);
} else {
  sink.addError('invalid value');
}

Таким образом, при правильном значении strem будет принимать действительное значение без ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...