Flutter / Dart:在三元的 else 子句之后使用展开运算符时出现问题

Jos*_*ose 7 dart flutter

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

IE-

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(),
       ],
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码将无法编译,出现下面的错误,并且扩展语句用红色下划线表示。

Expected to find ','.dart(expected_token)
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

我当前使用的解决方法是将扩展语句包装在另一个 Column() 中,该方法可以工作,但很丑陋('scuse my French)。

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

非常感谢所有建议。

/何塞利托

ric*_*aru 10

请用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(),
          ],
        ),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 我很确定`...条件?then_list : else_list,` 也可以。在启动三元之前,您需要进入“收集传播值”模式。 (2认同)