diff --git a/lib/level_selection.dart b/lib/level_selection.dart index 33d8c8b..3d3a95a 100644 --- a/lib/level_selection.dart +++ b/lib/level_selection.dart @@ -20,6 +20,8 @@ class LevelSelection extends StatefulWidget { class _LevelSelectionState extends State { String? stepmaniaCoursesPath; List stepmaniaCoursesFolders = []; + List stepmaniaCoursesFoldersFiltered = []; + String searchString = ''; @override void initState() { @@ -27,7 +29,6 @@ class _LevelSelectionState extends State { loadFolderPath(); } - Future loadFolderPath() async { SharedPreferences prefs = await SharedPreferences.getInstance(); final String? stepmaniaCoursesPathSetting = @@ -40,6 +41,7 @@ class _LevelSelectionState extends State { setState(() { stepmaniaCoursesPath = stepmaniaCoursesPathSetting; stepmaniaCoursesFolders = stepmaniaCoursesFoldersFuture; + stepmaniaCoursesFoldersFiltered = stepmaniaCoursesFoldersFuture; }); } @@ -68,7 +70,7 @@ class _LevelSelectionState extends State { simfile.load(); return simfile; }).toList(); - simfiles.sort((a,b) => a.tags['TITLE']!.compareTo(b.tags['TITLE']!)); + simfiles.sort((a, b) => a.tags['TITLE']!.compareTo(b.tags['TITLE']!)); return simfiles; } catch (e) { @@ -104,24 +106,48 @@ class _LevelSelectionState extends State { return Text( 'Folder empty. Add Stepmania Songs to Folder or select a different folder on \'+\''); } else { - return ListView.separated( - itemCount: stepmaniaCoursesFolders.length, - separatorBuilder: (BuildContext context, int index) => - const Divider(), - itemBuilder: (context, index) { - return ListTile( - leading: Image.file( - File(stepmaniaCoursesFolders[index].bannerPath!)), - trailing: Icon(Icons.play_arrow), - title: Text(stepmaniaCoursesFolders[index].tags["TITLE"]!), - subtitle: Text('3:45'), - onTap: () => Navigator.push( - context, - MaterialPageRoute( - builder: (BuildContext context) => - Level(stepmaniaCoursesFolders[index]))), - ); - }, + return Column( + children: [ + Padding( + padding: + const EdgeInsets.symmetric(horizontal: 16.0, vertical: 0.0), + child: TextField( + onChanged: (input) { + setState(() { + stepmaniaCoursesFoldersFiltered = stepmaniaCoursesFolders + .where((simfile) => simfile.tags["TITLE"]! + .toLowerCase() + .contains(input.toLowerCase())) + .toList(); + }); + }, + decoration: InputDecoration( + // icon: Icon(Icons.search), + hintText: 'Search'), + ), + ), + Expanded( + child: ListView.separated( + itemCount: stepmaniaCoursesFoldersFiltered.length, + separatorBuilder: (BuildContext context, int index) => + const Divider(), + itemBuilder: (context, index) { + Simfile simfile = stepmaniaCoursesFoldersFiltered[index]; + return ListTile( + leading: Image.file(File(simfile.bannerPath!)), + trailing: Icon(Icons.play_arrow), + title: Text(simfile.tags["TITLE"]!), + subtitle: Text('3:45'), + onTap: () => Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) => + Level(simfile))), + ); + }, + ), + ), + ], ); } }),