Flutter 按第一个词对列表视图进行分组

Flutter grouped listview by first word

我目前有一个显示大量对象的 ListView。相当多的这些对象共享相同的前 one/two 个词,例如:

我想根据名称的开头将此 ListView 分成几组。因此,例如,所有 Peters 都会被放在同一个组中。然后下一个多人共享的名字也会被分到自己的组里。

问题是我无法明确说明这些名称是什么,我将如何拆分这些名称?

这很难,我会​​尽可能地简化它,但一般的答案是首先编写一个算法,按照你想要的方式拆分你的字符串(在这种情况下,如果第一个单词是相同的),然后将它们嵌套到列或其他内容中。

在这里,我将值拆分为以名字为键的映射和以该名字为值的所有人员的列表

// Theres probably a better way to do this
Map<String, List<String>> valuesByFirstName(List<String> values) {
  Map<String, List<String>> result = {};
  for (final val in values) {
    final fn = val.split().first;
    if (result[fn] != null) result[fn]!.add(val);
    else result[fn] = [val];
  }
  return result;
}

然后我不确定你想如何对每一个进行分组所以我只是举了一些基本的例子:

var values = valuesByFirstName(originalValues);
return Row(
  children: [
    for (var key in values.keys)
      SizedBox(
        height: 200,
        width: 100,
        child: ListView(
          children: [
            Text(key, style: TextStyle(fontSize: 20)),
            for (var value in values[key])
              Text(value),
          ]
        ),
      ),
    ),
  ],
);

如果您想要收缩不同的部分,请查看 ExpansionPanel 小部件