From daf63b438ae2450759dc414ce55c645c4c661b9f Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Fri, 13 Nov 2020 16:12:17 +0100 Subject: [PATCH] RepoSelector: Sort by prefix first If we have "blahFlutter" and "Flutter" searching for "flu" should put "Flutter" higher up in the list. --- lib/setup/repo_selector.dart | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/lib/setup/repo_selector.dart b/lib/setup/repo_selector.dart index 5138cf8c..81e6ca2b 100644 --- a/lib/setup/repo_selector.dart +++ b/lib/setup/repo_selector.dart @@ -124,8 +124,7 @@ class GitHostSetupRepoSelectorState extends State { } var q = _textController.text.toLowerCase(); - var filteredRepos = - repos.where((r) => r.name.toLowerCase().contains(q)).toList(); + var filteredRepos = filterList(repos, q); var repoExists = filteredRepos.indexWhere((r) => r.name.toLowerCase() == q && @@ -241,6 +240,28 @@ class GitHostSetupRepoSelectorState extends State { } } +/// If we have "blahFlutter" and "Flutter" searching for "flu" should put +/// "Flutter" higher up in the list. +List filterList(List repos, String q) { + if (q.isEmpty) return repos; + + var l = repos.where((r) => r.name.toLowerCase().contains(q)).toList(); + l.sort((r1, r2) { + var r1StartsWith = r1.name.startsWith(q); + var r2StartsWith = r2.name.startsWith(q); + + if (r1StartsWith == r2StartsWith) { + return r1.name.compareTo(r2.name); + } else if (r1StartsWith) { + return -1; + } else { + return 1; + } + }); + + return l; +} + class _RepoTile extends StatelessWidget { final GitHostRepo repo; final String searchText;