feat: add searchBar to level selection
This commit is contained in:
		
							parent
							
								
									3682fa551a
								
							
						
					
					
						commit
						86dfc815cd
					
				|  | @ -20,6 +20,8 @@ class LevelSelection extends StatefulWidget { | ||||||
| class _LevelSelectionState extends State<LevelSelection> { | class _LevelSelectionState extends State<LevelSelection> { | ||||||
|   String? stepmaniaCoursesPath; |   String? stepmaniaCoursesPath; | ||||||
|   List<Simfile> stepmaniaCoursesFolders = []; |   List<Simfile> stepmaniaCoursesFolders = []; | ||||||
|  |   List<Simfile> stepmaniaCoursesFoldersFiltered = []; | ||||||
|  |   String searchString = ''; | ||||||
| 
 | 
 | ||||||
|   @override |   @override | ||||||
|   void initState() { |   void initState() { | ||||||
|  | @ -27,7 +29,6 @@ class _LevelSelectionState extends State<LevelSelection> { | ||||||
|     loadFolderPath(); |     loadFolderPath(); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|   Future<void> loadFolderPath() async { |   Future<void> loadFolderPath() async { | ||||||
|     SharedPreferences prefs = await SharedPreferences.getInstance(); |     SharedPreferences prefs = await SharedPreferences.getInstance(); | ||||||
|     final String? stepmaniaCoursesPathSetting = |     final String? stepmaniaCoursesPathSetting = | ||||||
|  | @ -40,6 +41,7 @@ class _LevelSelectionState extends State<LevelSelection> { | ||||||
|     setState(() { |     setState(() { | ||||||
|       stepmaniaCoursesPath = stepmaniaCoursesPathSetting; |       stepmaniaCoursesPath = stepmaniaCoursesPathSetting; | ||||||
|       stepmaniaCoursesFolders = stepmaniaCoursesFoldersFuture; |       stepmaniaCoursesFolders = stepmaniaCoursesFoldersFuture; | ||||||
|  |       stepmaniaCoursesFoldersFiltered = stepmaniaCoursesFoldersFuture; | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | @ -68,7 +70,7 @@ class _LevelSelectionState extends State<LevelSelection> { | ||||||
|         simfile.load(); |         simfile.load(); | ||||||
|         return simfile; |         return simfile; | ||||||
|       }).toList(); |       }).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; |       return simfiles; | ||||||
|     } catch (e) { |     } catch (e) { | ||||||
|  | @ -104,24 +106,48 @@ class _LevelSelectionState extends State<LevelSelection> { | ||||||
|           return Text( |           return Text( | ||||||
|               'Folder empty. Add Stepmania Songs to Folder or select a different folder on \'+\''); |               'Folder empty. Add Stepmania Songs to Folder or select a different folder on \'+\''); | ||||||
|         } else { |         } else { | ||||||
|           return ListView.separated( |           return Column( | ||||||
|             itemCount: stepmaniaCoursesFolders.length, |             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) => |                   separatorBuilder: (BuildContext context, int index) => | ||||||
|                       const Divider(), |                       const Divider(), | ||||||
|                   itemBuilder: (context, index) { |                   itemBuilder: (context, index) { | ||||||
|  |                     Simfile simfile = stepmaniaCoursesFoldersFiltered[index]; | ||||||
|                     return ListTile( |                     return ListTile( | ||||||
|                 leading: Image.file( |                       leading: Image.file(File(simfile.bannerPath!)), | ||||||
|                     File(stepmaniaCoursesFolders[index].bannerPath!)), |  | ||||||
|                       trailing: Icon(Icons.play_arrow), |                       trailing: Icon(Icons.play_arrow), | ||||||
|                 title: Text(stepmaniaCoursesFolders[index].tags["TITLE"]!), |                       title: Text(simfile.tags["TITLE"]!), | ||||||
|                       subtitle: Text('3:45'), |                       subtitle: Text('3:45'), | ||||||
|                       onTap: () => Navigator.push( |                       onTap: () => Navigator.push( | ||||||
|                           context, |                           context, | ||||||
|                           MaterialPageRoute( |                           MaterialPageRoute( | ||||||
|                               builder: (BuildContext context) => |                               builder: (BuildContext context) => | ||||||
|                             Level(stepmaniaCoursesFolders[index]))), |                                   Level(simfile))), | ||||||
|                     ); |                     ); | ||||||
|                   }, |                   }, | ||||||
|  |                 ), | ||||||
|  |               ), | ||||||
|  |             ], | ||||||
|           ); |           ); | ||||||
|         } |         } | ||||||
|       }), |       }), | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue