diff --git a/flutter/lib/common/widgets/peer_tab_page.dart b/flutter/lib/common/widgets/peer_tab_page.dart index cdafbc4f1..e3bb3a5be 100644 --- a/flutter/lib/common/widgets/peer_tab_page.dart +++ b/flutter/lib/common/widgets/peer_tab_page.dart @@ -435,7 +435,6 @@ class PeerSortDropdown extends StatefulWidget { } class _PeerSortDropdownState extends State { - final List sort_names = ['Remote ID', 'Username', "Status"]; String _sortType = peerSort.value; @override @@ -449,7 +448,9 @@ class _PeerSortDropdownState extends State { decoration: deco, child: DropdownButtonHideUnderline( child: DropdownButton2( - value: sort_names.contains(_sortType) ? _sortType : sort_names[0], + value: PeerSortType.values.contains(_sortType) + ? _sortType + : PeerSortType.remoteId, onChanged: (v) async { if (v != null) { setState(() => _sortType = v); @@ -480,7 +481,7 @@ class _PeerSortDropdownState extends State { ), enabled: false, ), - ...sort_names + ...PeerSortType.values .map>( (String value) => DropdownMenuItem( value: value, diff --git a/flutter/lib/common/widgets/peers_view.dart b/flutter/lib/common/widgets/peers_view.dart index 2bc0f6fbb..640f7d085 100644 --- a/flutter/lib/common/widgets/peers_view.dart +++ b/flutter/lib/common/widgets/peers_view.dart @@ -16,6 +16,22 @@ import 'peer_card.dart'; typedef PeerFilter = bool Function(Peer peer); typedef PeerCardBuilder = Widget Function(Peer peer); +class PeerSortType { + static const String remoteId = 'Remote ID'; + static const String remoteHost = 'Remote Host'; + static const String alias = 'Alias'; + static const String username = 'Username'; + static const String status = 'Status'; + + static List values = [ + PeerSortType.remoteId, + PeerSortType.remoteHost, + PeerSortType.alias, + PeerSortType.username, + PeerSortType.status + ]; +} + /// for peer search text, global obs value final peerSearchText = "".obs; @@ -193,8 +209,8 @@ class _PeersViewState extends State<_PeersView> with WindowListener { } // fallback to id sorting - if (sortedBy.isEmpty) { - sortedBy = 'id'; + if (!PeerSortType.values.contains(sortedBy)) { + sortedBy = PeerSortType.remoteId; bind.setLocalFlutterConfig( k: "peer-sorting", v: sortedBy, @@ -203,14 +219,22 @@ class _PeersViewState extends State<_PeersView> with WindowListener { if (widget.peers.loadEvent != 'load_recent_peers') { switch (sortedBy) { - case 'id': + case PeerSortType.remoteId: peers.sort((p1, p2) => p1.id.compareTo(p2.id)); break; - case 'username': + case PeerSortType.remoteHost: + peers.sort((p1, p2) => + p1.hostname.toLowerCase().compareTo(p2.hostname.toLowerCase())); + break; + case PeerSortType.alias: + peers.sort((p1, p2) => + p1.alias.toLowerCase().compareTo(p2.alias.toLowerCase())); + break; + case PeerSortType.username: peers.sort((p1, p2) => p1.username.toLowerCase().compareTo(p2.username.toLowerCase())); break; - case 'status': + case PeerSortType.status: peers.sort((p1, p2) => p1.online ? -1 : 1); break; }