dart:使用[...]创建list

在 Dart 里面,方括号 [ ... ] 就是字面量语法(literal syntax)来创建一个 List

  1. 列表字面量

    [1, 2, 3]   // 创建 List<int>
    ['a', 'b']  // 创建 List<String>
    [Text("Hi"), Icon(Icons.add)] // 创建 List<Widget>
    
  2. 列表里可以直接放对象
    就像你写的 TextWidget.h1(...)ImageWidget.img(...),它们都是 Widget 对象,放到列表里没有问题。

  3. 可以写表达式 / 代码
    Dart 允许在列表字面量里写表达式,比如:

    [DateTime.now(), 1 + 2, "Hello".toUpperCase()]
    

    这些都会在运行时被计算成一个对象,然后放进 List 里。

  4. 支持条件和循环 (collection if / for)
    这是 Dart 列表的一个特色语法:

    • 条件 if

      [
        Text("标题"),
        if (showIcon) Icon(Icons.star),
      ]
      

      如果 showIcon == false,那个 Icon 就不会被加进去。

    • 循环 for

      [
        for (var i in items) Text(i),
      ]
      

      等价于:

      items.map((i) => Text(i)).toList()
      

实际案例:


Widget sliderItem(WelcomeModel item) {
  return Builder(
    builder: (BuildContext context) {
      return <Widget>[
        // 图
        if (item.image != null)
          ImageWidget.img(
            item.image!,
            fit: BoxFit.cover,
          ),

        // 标题
        if (item.title != null)
          TextWidget.h1(
            item.title ?? "",
            maxLines: 2,
            softWrap: true,
            textAlign: TextAlign.center,
          ),

        // 描述
        if (item.desc != null)
          TextWidget.label(
            item.desc ?? "",
            maxLines: 3,
            softWrap: true,
            textAlign: TextAlign.center,
          )
      ]
          .toColumn(mainAxisAlignment: MainAxisAlignment.spaceAround)
          .width(MediaQuery.of(context).size.width);
    },
  );
}

如果 3 个条件都为 false,那么 if (...) 里面的内容都不会被插入,最终就会得到一个 空的 List<Widget>

// 相当于 <Widget>[]; 是一个普通的空列表
var widgets = <Widget>[
  if (false) Text("标题"),
  if (false) Icon(Icons.star),
  if (false) Text("描述"),
];

print(widgets); // []  

×

喜欢就点赞,疼爱就打赏