browser.dart 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import 'package:flutter/widgets.dart';
  2. import 'package:get/get.dart';
  3. import '../controller.dart';
  4. import './albums.dart';
  5. import './artists.dart';
  6. import './songs.dart';
  7. class Browser extends StatefulWidget {
  8. @override
  9. _BrowserWidgetState createState() => _BrowserWidgetState();
  10. }
  11. class _BrowserWidgetState extends State<Browser> {
  12. final Controller controller = Get.find();
  13. PageController pageController = PageController();
  14. void _jumpToPage(int page) {
  15. pageController.animateToPage(page, duration: Duration(milliseconds: 500), curve: Curves.ease);
  16. }
  17. void _jumpToAlbums() {
  18. this._jumpToPage(1);
  19. }
  20. void _jumpToSongs() {
  21. this._jumpToPage(2);
  22. }
  23. RxString selectedArtist;
  24. RxString selectedAlbum;
  25. void onSelectArtist(String artist) {
  26. this.selectedArtist = artist.obs;
  27. this._jumpToAlbums();
  28. }
  29. void onSelectAlbum(String artist, String album) {
  30. this.selectedAlbum = album.obs;
  31. this._jumpToSongs();
  32. }
  33. void onSelectSong(int songId) {
  34. controller.playSong(songId);
  35. }
  36. @override
  37. Widget build(BuildContext context) {
  38. return PageView(
  39. controller: pageController,
  40. children: <Widget>[
  41. Obx(() => Artists(
  42. apiUrl: controller.apiUrl.value,
  43. onSelect: this.onSelectArtist,
  44. )),
  45. Obx(() => Albums(
  46. apiUrl: controller.apiUrl.value,
  47. artist: this.selectedArtist.value,
  48. onSelect: this.onSelectAlbum,
  49. )),
  50. Obx(() => Songs(
  51. apiUrl: controller.apiUrl.value,
  52. artist: this.selectedArtist.value,
  53. album: this.selectedAlbum.value,
  54. onSelect: this.onSelectSong,
  55. )),
  56. ],
  57. pageSnapping: true,
  58. );
  59. }
  60. }