teamshipState property

NetClientAzState teamshipState

读取群组关系状态

Implementation

NetClientAzState get teamshipState {
  if (_dirtyTeamshipState) {
    //构建列表
    final azList = <Object>[...NetClientAzState.letters];
    _teamshipMap.forEach((key, value) {
      azList.add(value);
      //计算展示信息
      final target = getTeam(value.rid);
      value.displayNick = ComTools.formatTeamNick(target);
      value.displayIcon = target.icon;
      value.displayHead = target.head;
      value.displayPinyin = PinyinHelper.getPinyinE(value.displayNick, separator: '', defPinyin: '#', format: PinyinFormat.WITHOUT_TONE).toUpperCase();
      if (value.displayPinyin.isEmpty || !NetClientAzState.letters.contains(value.displayPinyin[0])) value.displayPinyin = '#${value.displayPinyin}';
    });
    //字母列表排序
    azList.sort((a, b) {
      final pyA = a is TeamShip ? a.displayPinyin : (a as String);
      final pyB = b is TeamShip ? b.displayPinyin : (b as String);
      if (pyA.startsWith('#') && !pyB.startsWith('#')) {
        return 1;
      } else if (!pyA.startsWith('#') && pyB.startsWith('#')) {
        return -1;
      } else {
        return Comparable.compare(pyA, pyB);
      }
    });
    //生成字母索引
    final azMap = <String, int>{};
    for (int i = 0; i < azList.length;) {
      final item = azList[i];
      if (item is String) {
        if (i == azList.length - 1) {
          azList.removeAt(i); //此字母分组无内容,索引i无需自增
        } else {
          final nextItem = azList[i + 1];
          if (nextItem is String) {
            azList.removeAt(i); //此字母分组无内容,索引i无需自增
          } else {
            azMap[item] = i;
            i++;
          }
        }
      } else {
        i++;
      }
    }
    //最后插入数量
    azList.add(_teamshipMap.length);
    //更新状态
    _teamshipState.update(azMap: azMap, azList: azList);
    _dirtyTeamshipState = false;
  }
  return _teamshipState;
}