flutter bloc pattren Stream Transformer对象导致语法错误

时间:2018-08-16 20:02:37

标签: android dart flutter reactive-programming react-state-management

我是 Flutter Dart 语言的新手。在遵循本教程的过程中,我创建了一个具有2个 StreamTransformers 的验证器类,这是为尝试 bloc pattren进行的,用户将在2个输入电子邮件和密码的< strong> TextFields ,因此每次文本更改时都会对其进行验证。

如果我使用传入的电子邮件密码,则会发现大量错误,特别是在 FromHandler 构造函数中的验证器类中,这些错误可以被识别但是当我像在这里一样将它们放在 if语句中时,它们不会重新识别为字符串对象,这就是导致错误的原因,如下面的屏幕截图所示。

validator file errors

  除它们之外的

bloc 文件还存在一些错误,如下面的第二张屏幕截图所示:

bloc file errors

Flutter版本:0.5.1 飞镖版本:2.0

  

有关完整代码,请查看此仓库中的 login_stateful_bloc 文件夹:https://github.com/touseefbsb/LoginStateful

1 个答案:

答案 0 :(得分:3)

只需删除=>表达式并按以下方式使用:

    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!');
        }

     }

我在方法上使用静态方法,因为只能从初始化程序访问静态方法。