Save and sort sheets by last access time
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:sheetless/storage_helper.dart';
|
||||
|
||||
class Sheet {
|
||||
final String uuid;
|
||||
@@ -28,9 +29,13 @@ class Sheet {
|
||||
|
||||
class SheetsWidget extends StatefulWidget {
|
||||
final List<Sheet> sheets;
|
||||
final ValueSetter<Sheet> callback;
|
||||
final ValueSetter<Sheet> onSheetOpenRequest;
|
||||
|
||||
const SheetsWidget({super.key, required this.sheets, required this.callback});
|
||||
const SheetsWidget({
|
||||
super.key,
|
||||
required this.sheets,
|
||||
required this.onSheetOpenRequest,
|
||||
});
|
||||
|
||||
@override
|
||||
State<SheetsWidget> createState() => _SheetsWidgetState();
|
||||
@@ -38,6 +43,7 @@ class SheetsWidget extends StatefulWidget {
|
||||
|
||||
class _SheetsWidgetState extends State<SheetsWidget> {
|
||||
late List<Sheet> filteredSheets;
|
||||
final StorageHelper storageHelper = StorageHelper();
|
||||
final TextEditingController _searchController = TextEditingController();
|
||||
Timer? _debounce;
|
||||
|
||||
@@ -69,16 +75,15 @@ class _SheetsWidgetState extends State<SheetsWidget> {
|
||||
String query = _searchController.text.toLowerCase().trim();
|
||||
List<String> terms = query.split(RegExp(r'\s+')); // Split by whitespace
|
||||
|
||||
filteredSheets =
|
||||
widget.sheets.where((sheet) {
|
||||
String name = sheet.name.toLowerCase();
|
||||
String composer = sheet.composerName.toLowerCase();
|
||||
filteredSheets = widget.sheets.where((sheet) {
|
||||
String name = sheet.name.toLowerCase();
|
||||
String composer = sheet.composerName.toLowerCase();
|
||||
|
||||
// Each term must be found in either the name or composer
|
||||
return terms.every(
|
||||
(term) => name.contains(term) || composer.contains(term),
|
||||
);
|
||||
}).toList();
|
||||
// Each term must be found in either the name or composer
|
||||
return terms.every(
|
||||
(term) => name.contains(term) || composer.contains(term),
|
||||
);
|
||||
}).toList();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -97,13 +102,12 @@ class _SheetsWidgetState extends State<SheetsWidget> {
|
||||
decoration: InputDecoration(
|
||||
hintText: 'Search...',
|
||||
prefixIcon: const Icon(Icons.search),
|
||||
suffixIcon:
|
||||
_searchController.text.isNotEmpty
|
||||
? IconButton(
|
||||
icon: const Icon(Icons.clear),
|
||||
onPressed: _clearSearch,
|
||||
)
|
||||
: null,
|
||||
suffixIcon: _searchController.text.isNotEmpty
|
||||
? IconButton(
|
||||
icon: const Icon(Icons.clear),
|
||||
onPressed: _clearSearch,
|
||||
)
|
||||
: null,
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(8.0),
|
||||
),
|
||||
@@ -118,7 +122,11 @@ class _SheetsWidgetState extends State<SheetsWidget> {
|
||||
return ListTile(
|
||||
title: Text(sheet.name),
|
||||
subtitle: Text(sheet.composerName),
|
||||
onTap: () => widget.callback(sheet),
|
||||
onTap: () => setState(() {
|
||||
widget.onSheetOpenRequest(sheet);
|
||||
widget.sheets.remove(sheet);
|
||||
widget.sheets.insert(0, sheet);
|
||||
}),
|
||||
);
|
||||
},
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user