【问题标题】:Flutter / Dart: Problem Using the Spread Operator After The Else Clause Of A TernaryFlutter / Dart:在三元的 Else 子句之后使用扩展运算符的问题
【发布时间】:2021-04-23 13:30:56
【问题描述】:

在我的 Flutter 应用程序中,我尝试在我的一个小部件的 build() 方法中的三元运算符的 else 部分使用 Dart 扩展运算符(即-...)。

即-

class SearchCriteriaState extends State<SearchCriteria> {
  List<SearchParameters> listSearchParam = [];

  Widget build(BuildContext context) {
    return Column(
       children: [
         Text('hey there'),
         listSearchParam.isEmpty 
           ? Text ('Empty
           : ...listSearchParam.map((param)=>Text(param.toString()).toList(),
       ],
    );
  }
}

上面的代码无法编译,出现下面的错误,展开语句用红色下划线。

Expected to find ','.dart(expected_token)

如果我只用扩展语句替换整个三元组,它将编译并运行(除非它不处理列表为空的边缘条件)。

有什么想法吗?

我目前使用的解决方法是将展开语句包装在另一个 Column() 中,它可以工作,但很丑('怪不得我的法语)。

我已经搜索过类似的问题,我能找到的最接近的也是在三元组中使用扩展运算符的问题,但在我假设是 React 的 webpack 上下文中。

非常感谢所有建议。

/小何塞

【问题讨论】:

  • 忘了说我的环境:Flutter 1.22.5 Mac OS Catelina 10.15.7
  • 您忘记关闭文本小部件的括号。应该是listSearchParam.isEmpty ? Text('Empty') : ....
  • 是的,我就是这个意思。这是我的错字。仅供参考 @rickimaru 提出了一个可行的建议,即用完整的 if-else 语句替换三元。

标签: flutter dart


【解决方案1】:

请使用if else

import 'package:flutter/material.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final List<String> texts = <String>['1', '2', '3'];
    final bool test = false;

    return MaterialApp(
      home: Scaffold(
        body: Column(
          children: [
            const Text('asdf'),
            if (test)
              const Text('test is TRUE')
            else
              ...texts.map((e) => Text(e)).toList(),
          ],
        ),
      ),
    );
  }
}

【讨论】:

  • 谢谢rickimaru的建议,但是材料包的导入已经有了,只是写帖子的时候忘记加上了。即使使用 import 语句,问题仍然存在。
  • @Jose 问题不在于import 语句。请重读我的回答。参考线if (test)
  • 对不起,rickimaru,但我误读了你的建议。现在将尝试它,虽然我不知道在这种情况下可以使用“if else”代替三元。
  • @Jose 没有问题。希望它能解决你的问题。
  • 你的建议奏效了。谢谢!我没想过用 if-else 替换三元,因为我过去尝试过,但它无法编译。你知道这是否是 1.22.5 的新功能吗?
猜你喜欢
  • 2021-09-26
  • 2021-12-08
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 2014-10-10
  • 2017-11-19
相关资源
最近更新 更多