|
| 1 | +import 'package:flutter/material.dart'; |
| 2 | +import 'package:watch_it/watch_it.dart'; |
| 3 | + |
| 4 | +import '../../app_config.dart'; |
| 5 | +import '../../common/data/audio_type.dart'; |
| 6 | +import '../../common/page_ids.dart'; |
| 7 | +import '../../common/view/icons.dart'; |
| 8 | +import '../../common/view/side_bar_fall_back_image.dart'; |
| 9 | +import '../../common/view/theme.dart'; |
| 10 | +import '../../custom_content/view/custom_content_page.dart'; |
| 11 | +import '../../extensions/string_x.dart'; |
| 12 | +import '../../home/home_page.dart'; |
| 13 | +import '../../l10n/l10n.dart'; |
| 14 | +import '../../library/library_model.dart'; |
| 15 | +import '../../local_audio/view/album_page.dart'; |
| 16 | +import '../../local_audio/view/local_audio_page.dart'; |
| 17 | +import '../../playlists/view/liked_audio_page.dart'; |
| 18 | +import '../../playlists/view/playlist_page.dart'; |
| 19 | +import '../../podcasts/view/lazy_podcast_page.dart'; |
| 20 | +import '../../podcasts/view/podcast_page_side_bar_icon.dart'; |
| 21 | +import '../../podcasts/view/podcast_page_title.dart'; |
| 22 | +import '../../podcasts/view/podcasts_page.dart'; |
| 23 | +import '../../radio/view/radio_page.dart'; |
| 24 | +import '../../radio/view/station_page.dart'; |
| 25 | +import '../../radio/view/station_page_icon.dart'; |
| 26 | +import '../../radio/view/station_title.dart'; |
| 27 | +import '../../search/view/search_page.dart'; |
| 28 | +import '../../settings/view/settings_page.dart'; |
| 29 | +import 'main_page_icon.dart'; |
| 30 | +import 'master_items.dart'; |
| 31 | + |
| 32 | +List<MasterItem> createMasterItems() { |
| 33 | + final libraryModel = di<LibraryModel>(); |
| 34 | + return [ |
| 35 | + MasterItem( |
| 36 | + titleBuilder: (context) => Text(context.l10n.search), |
| 37 | + pageBuilder: (_) => const SearchPage(), |
| 38 | + iconBuilder: (_) => Icon(Iconz.search), |
| 39 | + pageId: PageIDs.searchPage, |
| 40 | + ), |
| 41 | + MasterItem( |
| 42 | + titleBuilder: (context) => Text(context.l10n.local), |
| 43 | + pageBuilder: (_) => const LocalAudioPage(), |
| 44 | + iconBuilder: (selected) => MainPageIcon( |
| 45 | + audioType: AudioType.local, |
| 46 | + selected: selected, |
| 47 | + ), |
| 48 | + pageId: PageIDs.localAudio, |
| 49 | + ), |
| 50 | + MasterItem( |
| 51 | + titleBuilder: (context) => Text(context.l10n.radio), |
| 52 | + pageBuilder: (_) => const RadioPage(), |
| 53 | + iconBuilder: (selected) => MainPageIcon( |
| 54 | + audioType: AudioType.radio, |
| 55 | + selected: selected, |
| 56 | + ), |
| 57 | + pageId: PageIDs.radio, |
| 58 | + ), |
| 59 | + MasterItem( |
| 60 | + titleBuilder: (context) => Text(context.l10n.podcasts), |
| 61 | + pageBuilder: (_) => const PodcastsPage(), |
| 62 | + iconBuilder: (selected) => MainPageIcon( |
| 63 | + audioType: AudioType.podcast, |
| 64 | + selected: selected, |
| 65 | + ), |
| 66 | + pageId: PageIDs.podcasts, |
| 67 | + ), |
| 68 | + if (AppConfig.isMobilePlatform) |
| 69 | + MasterItem( |
| 70 | + titleBuilder: (context) => Text(context.l10n.settings), |
| 71 | + iconBuilder: (selected) => |
| 72 | + Icon(selected ? Iconz.settingsFilled : Iconz.settings), |
| 73 | + pageBuilder: (context) => const SettingsPage(), |
| 74 | + pageId: PageIDs.settings, |
| 75 | + ), |
| 76 | + if (AppConfig.isMobilePlatform) |
| 77 | + MasterItem( |
| 78 | + titleBuilder: (context) => Text(context.l10n.home), |
| 79 | + iconBuilder: (selected) => |
| 80 | + Icon(selected ? Iconz.homeFilled : Iconz.home), |
| 81 | + pageBuilder: (context) => const HomePage(), |
| 82 | + pageId: PageIDs.homePage, |
| 83 | + ), |
| 84 | + MasterItem( |
| 85 | + iconBuilder: (selected) => Icon(Iconz.plus), |
| 86 | + titleBuilder: (context) => Text(context.l10n.add), |
| 87 | + pageBuilder: (_) => const CustomContentPage(), |
| 88 | + pageId: PageIDs.customContent, |
| 89 | + ), |
| 90 | + MasterItem( |
| 91 | + titleBuilder: (context) => Text(context.l10n.likedSongs), |
| 92 | + pageId: PageIDs.likedAudios, |
| 93 | + pageBuilder: (_) => const LikedAudioPage(), |
| 94 | + subtitleBuilder: (context) => Text(context.l10n.playlist), |
| 95 | + iconBuilder: (selected) => LikedAudioPageIcon(selected: selected), |
| 96 | + ), |
| 97 | + for (final id in libraryModel.playlistIDs) |
| 98 | + MasterItem( |
| 99 | + titleBuilder: (context) => Text(id), |
| 100 | + subtitleBuilder: (context) => Text(context.l10n.playlist), |
| 101 | + pageId: id, |
| 102 | + pageBuilder: (_) => PlaylistPage(pageId: id), |
| 103 | + iconBuilder: (selected) => SideBarFallBackImage( |
| 104 | + color: getAlphabetColor(id), |
| 105 | + child: Icon(Iconz.playlist), |
| 106 | + ), |
| 107 | + ), |
| 108 | + for (final feedUrl in libraryModel.podcastFeedUrls) |
| 109 | + MasterItem( |
| 110 | + titleBuilder: (_) => PodcastPageTitle( |
| 111 | + feedUrl: feedUrl, |
| 112 | + ), |
| 113 | + subtitleBuilder: (context) => PodcastPageSubTitle(feedUrl: feedUrl), |
| 114 | + pageId: feedUrl, |
| 115 | + pageBuilder: (_) => LazyPodcastPage(feedUrl: feedUrl), |
| 116 | + iconBuilder: (selected) => PodcastPageSideBarIcon(feedUrl: feedUrl), |
| 117 | + ), |
| 118 | + for (final id in libraryModel.favoriteAlbums) |
| 119 | + MasterItem( |
| 120 | + titleBuilder: (context) => Text(id.albumOfId), |
| 121 | + subtitleBuilder: (context) => Text(id.artistOfId), |
| 122 | + pageId: id, |
| 123 | + pageBuilder: (_) => AlbumPage(id: id), |
| 124 | + iconBuilder: (selected) => AlbumPageSideBarIcon( |
| 125 | + albumId: id, |
| 126 | + ), |
| 127 | + ), |
| 128 | + for (final uuid in libraryModel.starredStations.where((e) => e.isNotEmpty)) |
| 129 | + MasterItem( |
| 130 | + titleBuilder: (context) => StationTitle(uuid: uuid), |
| 131 | + subtitleBuilder: (context) => Text(context.l10n.station), |
| 132 | + pageId: uuid, |
| 133 | + pageBuilder: (_) => StationPage(uuid: uuid), |
| 134 | + iconBuilder: (selected) => StationPageIcon( |
| 135 | + uuid: uuid, |
| 136 | + selected: selected, |
| 137 | + ), |
| 138 | + ), |
| 139 | + ]; |
| 140 | +} |
0 commit comments