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

Posted

技术标签:

【中文标题】flutter bloc pattren Stream Transformer 对象导致语法错误【英文标题】:flutter bloc pattren Stream Transformer objects causing syntax errors 【发布时间】:2019-01-23 20:31:05 【问题描述】:

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

如果我使用传入的 emailpassword 它们被识别,我会在 FromHandler 构造函数中的该验证器类中遇到大量错误但是当我像我在这里所做的那样将它们放在 if 语句 中时,它们不会被识别为字符串对象,这就是这里出现错误的原因,如下面的屏幕截图所示。

除此之外,bloc 文件还有一些错误,如下面的第二张截图所示:

Flutter 版本:0.5.1 飞镖版本:2.0

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

【问题讨论】:

【参考方案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!');
        

     

我在方法上使用了静态方法,因为只有静态方法可以从初始化程序中访问。

【讨论】:

所以换句话说,如果我只有一个单行表达式,那么我应该使用胖箭头吗?但是如果我有多行,那么我应该只使用花括号吗?大括号和粗箭头不能同时使用? 是的,就像你说的

以上是关于flutter bloc pattren Stream Transformer 对象导致语法错误的主要内容,如果未能解决你的问题,请参考以下文章

不在yaml文件flutter中安装包bloc或flutter bloc

Flutter:BLoC 包 - bloc 提供者

Flutter Bloc - Flutter Bloc 状态未更新

Flutter 从其他 Bloc 监听 Bloc 状态

使用 flutter_bloc 库有啥缺点

Flutter BloC 模式:基于另一个 BloC 的流更新 BloC 流