首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >达特-埃利普斯

达特-埃利普斯
EN

Stack Overflow用户
提问于 2021-09-25 11:35:37
回答 2查看 43关注 0票数 0

代码语言:javascript
复制
@override
Widget build(BuildContext context) {
  return BlocBuilder < TimerBloc, TimerState > (
    buildWhen: (prev, state) => prev.runtimeType != runtimeType,
    builder: (context, state) {
      return Row(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: [
//for example here: if (state is TimerInitial)...[
              FloatingActionButton(
                child: Icon(Icons.play_arrow),
                onPressed: () => context
                .read < TimerBloc > ()
                .add(TimerStarted(duration: state.duration)),
              ),
            ],
            if (state is TimerRunInProgress)...[
                FloatingActionButton(
                  child: Icon(Icons.pause),
                  onPressed: () => context.read < TimerBloc > ().add(TimerPaused()),
                ),
                FloatingActionButton(
                  child: Icon(Icons.replay),
                  onPressed: () => context.read < TimerBloc > ().add(TimerReset()),
                )
              ],
              if (state is TimerRunPause)...[
                FloatingActionButton(
                  child: Icon(Icons.play_arrow),
                  onPressed: () =>
                  context.read < TimerBloc > ().add(TimerResumed()),
                ),
                FloatingActionButton(
                  child: Icon(Icons.replay),
                  onPressed: () => context.read < TimerBloc > ().add(TimerReset()),
                ),
              ],
        ],
      );
    });
}

所以,我正在通过这个集团教程https://bloclibrary.dev/#/fluttertimertutorial。我偶然发现了elipsis的奇怪用法.在密码里。这对我来说比较陌生,因为这里省略了if子句的花括号吗?

编辑:最初,为了更清晰起见,我删除了一些代码,但现在我意识到我可能忽略了一些上下文,所以我现在发布这个小部件构建方法的完整代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-25 11:40:54

这是扩展操作符(.)以及在Dart 2.4中引入的零感知扩展运算符(.?)。这些运算符允许您在集合中插入多个值。

代码语言:javascript
复制
var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);

在示例中,它允许将if中的列表插入到Rowchildren属性中。

此外,没有花括号,因为if只包含1条语句。

如果你很好奇,你可以在这里了解更多关于扩展操作符的信息:https://dart.dev/guides/language/language-tour

票数 1
EN

Stack Overflow用户

发布于 2021-09-28 11:23:02

将BLKKKBVSIK标记为可接受的答案。我花了一段时间才得到它(主要是因为错误的分析器警告了死代码。忽略它吧,伙计们,这是个bug。)但是,在dartPad中使用以下代码是很有启发性的:

代码语言:javascript
复制
void main() {
  print([
    if (true) ...[1],
    if (false) ...[2, 3],
    if (true) ...[4, 5],
  ]); 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69325756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档