diff --git a/lib/logic/cubit/users/users_state.dart b/lib/logic/cubit/users/users_state.dart index dbd931d7..4e2ed42e 100644 --- a/lib/logic/cubit/users/users_state.dart +++ b/lib/logic/cubit/users/users_state.dart @@ -18,6 +18,32 @@ class UsersState extends ServerInstallationDependendState { @override List get props => [users, isLoading]; + /// Makes a copy of existing users list, but places 'primary' + /// to the beginning and sorts the rest alphabetically + /// + /// If found a 'root' user, it doesn't get copied into the result + List get orderedUsers { + User? primaryUser; + final List normalUsers = []; + for (final User user in users) { + if (user.type == UserType.primary) { + primaryUser = user; + continue; + } + if (user.type == UserType.root) { + continue; + } + normalUsers.add(user); + } + + normalUsers.sort( + (final User a, final User b) => + a.login.toLowerCase().compareTo(b.login.toLowerCase()), + ); + + return primaryUser == null ? normalUsers : [primaryUser] + normalUsers; + } + UsersState copyWith({ final List? users, final bool? isLoading, diff --git a/lib/ui/pages/users/user.dart b/lib/ui/pages/users/user.dart index bbc01012..9a90857b 100644 --- a/lib/ui/pages/users/user.dart +++ b/lib/ui/pages/users/user.dart @@ -3,11 +3,11 @@ part of 'users.dart'; class _User extends StatelessWidget { const _User({ required this.user, - required this.isRootUser, + required this.isPrimaryUser, }); final User user; - final bool isRootUser; + final bool isPrimaryUser; @override Widget build(final BuildContext context) => InkWell( onTap: () { @@ -32,7 +32,7 @@ class _User extends StatelessWidget { user.login, style: Theme.of(context).textTheme.titleMedium?.copyWith( color: Theme.of(context).colorScheme.onBackground, - decoration: isRootUser + decoration: isPrimaryUser ? TextDecoration.underline : user.isFoundOnServer ? TextDecoration.none diff --git a/lib/ui/pages/users/users.dart b/lib/ui/pages/users/users.dart index 58cb3b7d..22b9e451 100644 --- a/lib/ui/pages/users/users.dart +++ b/lib/ui/pages/users/users.dart @@ -45,15 +45,7 @@ class UsersPage extends StatelessWidget { } else { child = BlocBuilder( builder: (final BuildContext context, final UsersState state) { - final List users = state.users - .where((final user) => user.type != UserType.root) - .toList(); - // final List users = []; - users.sort( - (final User a, final User b) => - a.login.toLowerCase().compareTo(b.login.toLowerCase()), - ); - + final users = state.orderedUsers; if (users.isEmpty) { if (state.isLoading) { return const Center( @@ -115,7 +107,7 @@ class UsersPage extends StatelessWidget { itemBuilder: (final BuildContext context, final int index) => _User( user: users[index], - isRootUser: users[index].type == UserType.primary, + isPrimaryUser: users[index].type == UserType.primary, ), ), ),