flutter bloc pattren объекты Stream Transformer, вызывающие синтаксические ошибки

Я новичок в языках Flutter и Dart. следуя руководству, я создаю класс валидатора, который имеет 2 StreamTransformers, это делается в попытке использовать bloc pattren, где пользователь вводит адрес электронной почты и пароль в 2 < strong> TextFields и, следовательно, будут проверяться каждый раз при изменении текста в них.

И я получаю множество ошибок именно в этом классе валидатора в конструкторе FromHandler, если я использую входящую электронную почту или пароль, они распознаются, но когда я поместите их в оператор if, как я сделал здесь, они не воспринимаются как строковые объекты, и это является причиной ошибки, как вы можете видеть на снимке экрана ниже.

ошибки файла валидатора

Помимо них файл bloc также содержит несколько ошибок, как показано на 2-м снимке экрана ниже:

ошибки блочного файла

Версия Flutter: 0.5.1 Версия dart: 2.0

для получения полного кода загляните в папку login_stateful_bloc в этом репо: https://github.com/touseefbsb/LoginStateful


person Muhammad Touseef    schedule 16.08.2018    source источник


Ответы (1)


Просто удалите выражение => и используйте его так:

    final validateEmail = StreamTransformer<String,String>.fromHandlers(
        handleData: (email,sink) {
          if(email.contains('@')){
            sink.add(email);
          }
          else{
            sink.addError('Email not valid!');
          }
        }
       );

Синтаксис => expr является сокращением для {return expr; }. Обозначение => иногда называют синтаксисом жирной стрелки.

Примечание. Между стрелкой (=>) и точкой с запятой (;) может быть только выражение, но не выражение. Например, вы не можете поместить туда оператор if, но можете использовать условное выражение.

Если вы хотите использовать =>, попробуйте что-нибудь вроде этого:

   final validateEmail = StreamTransformer<String,String>.fromHandlers(
      handleData: (email, sink) => _fatArrowMethod(email,sink));

     static _fatArrowMethod(email, sink){
       if(email.contains('@')){
          sink.add(email);
        }
        else{
          sink.addError('Email not valid!');
        }

     }

Я использую static для метода, потому что из инициализатора доступны только статические методы.

person diegoveloper    schedule 16.08.2018
comment
Другими словами, если у меня есть только однострочное выражение, следует ли использовать жирную стрелку? но если у меня несколько строк, я должен просто использовать фигурные скобки? а фигурные скобки и жирную стрелку нельзя использовать одновременно? - person Muhammad Touseef; 16.08.2018
comment
да, как ты сказал - person diegoveloper; 16.08.2018