Спасибо! Сделал так:
_parts.sort((a, b) => a.partName
.toLowerCase()
.codeUnits
.first
.compareTo(b.partName.toLowerCase()
.codeUnits
.first));
Две ошибки. Во первых, ты сравниваешь codeUnits, а не runes. Первый же юникод-символ в "длинной" кодировке сломает эту сортировку. Во вторых, ты сравниваешь только первые символы. Если они совпадут, сортировки по второму уже не будет