Skip to content
Snippets Groups Projects
searchpage.dart 3.21 KiB
Newer Older
  • Learn to ignore specific revisions
  • import 'package:flutter/material.dart';
    
    
    import 'dart:developer';
    
    import 'package:ambient/services/spotify.dart';
    
    Daniel Furaev's avatar
    Daniel Furaev committed
    import 'package:ambient/homepage.dart';
    import 'package:flutter/services.dart';
    import 'package:spotify_sdk/spotify_sdk.dart';
    
    
    class StateSearcgPage extends StatefulWidget {
      const StateSearcgPage({super.key});
    
      @override
      State<StateSearcgPage> createState() => SearchPage();
    }
    
    class SearchPage extends State<StateSearcgPage> {
      final controller = TextEditingController();
      Spotify spotifyApi = Spotify();
    
    Daniel Furaev's avatar
    Daniel Furaev committed
      HomePage homePage = HomePage();
    
      List<Song> songs = List.empty(growable: true);
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
    
            body: Padding(
                padding: const EdgeInsets.all(10.0),
                child: Column(
                  children: [
                    const SizedBox(
                      height: 20,
                    ),
                    TextField(
                      onChanged: (value) {
                        updateList(value);
                        setState(() {
                          log(songs.length.toString());
                          songs;
                        });
                      },
                      decoration: const InputDecoration(
                          labelText: 'Search', suffixIcon: Icon(Icons.search)),
                    ),
                    const SizedBox(
                      height: 20,
                    ),
                    Expanded(
                      child: ListView.builder(
                          itemCount: songs.length,
                          itemBuilder: ((context, index) {
                            Song song = songs[index];
    
    Daniel Furaev's avatar
    Daniel Furaev committed
                            return GestureDetector(
    
                              child: Padding(
                                padding: const EdgeInsets.all(10),
                                child: Row(
                                  children: [
    
                                    Image.network(
                                      song.image,
                                      height: 50,
                                      width: 50,
                                      fit: BoxFit.fill,
                                    ),
                                    Container(
                                      width: 10,
                                    ),
                                    Expanded(child: Text(song.name)),
                                    Expanded(child: Text(song.artist)),
    
    Daniel Furaev's avatar
    Daniel Furaev committed
                              onTap: () {
    
    Daniel Furaev's avatar
    Daniel Furaev committed
                                play(song.id);
    
    Daniel Furaev's avatar
    Daniel Furaev committed
                              },
    
                            );
                          })),
                    )
                  ],
                )));
      }
    
      updateList(String searchedString) async {
    
    Daniel Furaev's avatar
    Daniel Furaev committed
        if (searchedString.length >= 3) {
          var searchList = await spotifyApi.search(searchedString);
          for (var element in searchList) {
            songs.add(element);
          }
        } else if (searchedString.isEmpty) {
          songs = List.empty(growable: true);
    
    Daniel Furaev's avatar
    Daniel Furaev committed
        }
    
    Daniel Furaev's avatar
    Daniel Furaev committed
    
      Future<void> play(String songId) async {
        try {
          await SpotifySdk.play(spotifyUri: 'spotify:track:$songId');
        } on PlatformException catch (e) {
          //setStatus(e.code, message: e.message);
        } on MissingPluginException {
          //setStatus('not implemented');
        }
      }