usershipState property
NetClientAzState
usershipState
读取好友关系状态
Implementation
NetClientAzState get usershipState {
if (_dirtyUsershipState) {
//构建列表
final azList = <Object>[...NetClientAzState.letters];
_usershipMap.forEach((key, value) {
azList.add(value);
//计算展示信息
final target = getUser(value.rid);
value.displayNick = ComTools.formatUserShipNick(value, 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 UserShip ? a.displayPinyin : (a as String);
final pyB = b is UserShip ? 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(_usershipMap.length);
//更新状态
_usershipState.update(azMap: azMap, azList: azList);
_dirtyUsershipState = false;
}
return _usershipState;
}