fix(ui): skip the "(unknown)" suffix when building avatar initials
A message request named "Mom (unknown)" showed the initials "M(".
This commit is contained in:
@@ -99,12 +99,20 @@ class SepotAvatar extends ConsumerWidget {
|
||||
);
|
||||
}
|
||||
|
||||
static final _leadingPunct = RegExp(r'^\p{P}', unicode: true);
|
||||
|
||||
/// Iniciály pro avatar — veřejné, ať je sdílí i kolečka hlasujících apod.
|
||||
static String initialsOf(String name) {
|
||||
// Prázdné díly odfiltrovat — dvojitá mezera ve jméně nesmí shodit render.
|
||||
// Grafémy (characters), ne code units — jméno začínající emoji by se
|
||||
// jinak rozpůlilo na rozbitý surrogate.
|
||||
final parts = name.trim().split(' ').where((p) => p.isNotEmpty).toList();
|
||||
// Slova začínající interpunkcí přeskočit: přívlastek „(neznámý)“ u žádosti
|
||||
// o zprávu by jinak dal iniciály „M(“.
|
||||
final parts = name
|
||||
.trim()
|
||||
.split(' ')
|
||||
.where((p) => p.isNotEmpty && !_leadingPunct.hasMatch(p))
|
||||
.toList();
|
||||
if (parts.length >= 2) {
|
||||
return '${parts[0].characters.first}${parts[1].characters.first}'
|
||||
.toUpperCase();
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:sepot/core/safety/lookalike_names.dart';
|
||||
import 'package:sepot/models/contact.dart';
|
||||
import 'package:sepot/models/identity.dart';
|
||||
import 'package:sepot/widgets/avatar.dart';
|
||||
|
||||
/// Jméno zvolené odesílatelem se nesmí dát „obejít“ diakritikou, velikostí
|
||||
/// písmen, cizí abecedou ani neviditelnými znaky.
|
||||
@@ -55,4 +56,10 @@ void main() {
|
||||
expect(lookalikeContact('', [kontakt('')]), isNull,
|
||||
reason: 'prázdné jméno nic nenese');
|
||||
});
|
||||
|
||||
test('přívlastek žádosti v závorce nekazí iniciály avataru', () {
|
||||
expect(SepotAvatar.initialsOf('Máma (neznámý)'), 'MÁ');
|
||||
expect(SepotAvatar.initialsOf('Jan Novák (unknown)'), 'JN');
|
||||
expect(SepotAvatar.initialsOf('(neznámý)'), '?');
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user