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> {
 | 
			
		||||
  String? stepmaniaCoursesPath;
 | 
			
		||||
  List<Simfile> stepmaniaCoursesFolders = [];
 | 
			
		||||
  List<Simfile> stepmaniaCoursesFoldersFiltered = [];
 | 
			
		||||
  String searchString = '';
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  void initState() {
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +29,6 @@ class _LevelSelectionState extends State<LevelSelection> {
 | 
			
		|||
    loadFolderPath();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  Future<void> loadFolderPath() async {
 | 
			
		||||
    SharedPreferences prefs = await SharedPreferences.getInstance();
 | 
			
		||||
    final String? stepmaniaCoursesPathSetting =
 | 
			
		||||
| 
						 | 
				
			
			@ -40,6 +41,7 @@ class _LevelSelectionState extends State<LevelSelection> {
 | 
			
		|||
    setState(() {
 | 
			
		||||
      stepmaniaCoursesPath = stepmaniaCoursesPathSetting;
 | 
			
		||||
      stepmaniaCoursesFolders = stepmaniaCoursesFoldersFuture;
 | 
			
		||||
      stepmaniaCoursesFoldersFiltered = stepmaniaCoursesFoldersFuture;
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -68,7 +70,7 @@ class _LevelSelectionState extends State<LevelSelection> {
 | 
			
		|||
        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<LevelSelection> {
 | 
			
		|||
          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))),
 | 
			
		||||
                    );
 | 
			
		||||
                  },
 | 
			
		||||
                ),
 | 
			
		||||
              ),
 | 
			
		||||
            ],
 | 
			
		||||
          );
 | 
			
		||||
        }
 | 
			
		||||
      }),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue