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;
}