class IssueSearchDelegate extends SearchDelegate {
List<dynamic> issues;
Repository repo;
dynamic searchLabels = [];
IssueSearchDelegate(BuildContext context, this.issues, this.repo);
@override
List<Widget> buildActions(BuildContext context) {
return [
IconButton(
icon: Icon(Icons.clear),
onPressed: () {
query = '';
searchLabels = [];
},
),
IconButton(
tooltip: "Filter",
icon: const Icon(Icons.label),
onPressed: () async {
query = '';
_getLabelSearch(context);
}
)
];
}
@override
Widget buildLeading(BuildContext context) {
return IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
close(context, null);
},
);
}
@override
Widget buildResults(BuildContext context) {
List<Widget> results = [];
if (query != '' && searchLabels.length == 0){
for (int i = 0; i < issues.length; i++) {
if (issues[i].runtimeType == Issue){
Issue issue = issues[i];
if (issue.title.toLowerCase().contains(query.toLowerCase()) || issue.number == int.tryParse(query)){
results.add(IssueTile(issue, null));
}
}
}
}
else {
for (int i = 0; i < issues.length; i++) {
if (issues[i].runtimeType == Issue){
Issue issue = issues[i];
if (issue.labels.length != 0){
for (int j = 0; j < issue.labels.length; j++) {
if (searchLabels.contains(issue.labels[j].id)) {
print('found');
results.add(IssueTile(issue, null));
}
}
}
}
}
}
return ListView(
children: results,
);
}
@override
Widget buildSuggestions(BuildContext context) {
return Column();
}
void _getLabelSearch(BuildContext context) async {
final items = <MultiSelectDialogItem<int>>[];
List<Label> labels = repo.labels;
for (int i = 0; i < labels.length; i++){
items.add(MultiSelectDialogItem(i + 1, labels[i]));
}
final selectedValues = await showDialog<Set<int>>(
context: context,
builder: (BuildContext context) {
return MultiSelectDialog( // edit the code to render it as a bunch of labels
items: items
);
},
);
List<String> labelIds = [];
if (selectedValues != null) {
for (int i = 0; i < items.length; i++){
if (selectedValues.contains(items[i].value)){
}
}
}
searchLabels = labelIds;
buildResults(context);
}
}