Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/components/playlist_container.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import 'dart:convert';
import 'package:flutter/gestures.dart';
import 'package:http/http.dart' as http;
import 'package:flutter/material.dart';
import 'package:musico/components/song_card.dart';
import 'package:musico/widgets/song_card.dart';
import 'package:musico/shimmers/playlistcat_shimmer.dart';
import 'package:musico/models/playlist_category.dart';

Expand Down
6 changes: 6 additions & 0 deletions lib/constants/api_url.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const baseUrl = "https://music.youtube.com/youtubei/v1";
const searchUrl = "$baseUrl/search";
const searchSuggestionUrl = "$baseUrl/music/get_search_suggestions";
const playerUrl = "$baseUrl/player";
const nextUrl = "$baseUrl/next";
const browseUrl = "$baseUrl/browse";
20 changes: 13 additions & 7 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,33 +5,39 @@ import 'package:musico/screens/base_screen.dart';
import 'package:musico/screens/wrapper.dart';
import 'package:musico/services/Providers/music_player_provider.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:upgrader/upgrader.dart';
import 'package:hive_flutter/hive_flutter.dart';

Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
SharedPreferences pref = await SharedPreferences.getInstance();
await Hive.initFlutter();
Box avatarBox = await Hive.openBox('avatarBox');
await JustAudioBackground.init(
androidNotificationChannelId: 'com.ryanheise.bg_demo.channel.audio',
androidNotificationChannelName: 'Audio playback',
androidNotificationOngoing: true,
androidStopForegroundOnPause: true,
);
runApp(MyApp(
prefs: pref,
avatarBox: avatarBox,
));
}

class MyApp extends StatefulWidget {
final SharedPreferences prefs;
final Box avatarBox;

const MyApp({super.key, required this.prefs});
const MyApp({super.key, required this.avatarBox});

@override
State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
}

@override
Widget build(BuildContext context) {
return MultiProvider(
Expand All @@ -54,8 +60,8 @@ class _MyAppState extends State<MyApp> {
),
home: UpgradeAlert(
upgrader: Upgrader(),
child: widget.prefs.getString('username') == null &&
widget.prefs.getString('avatar') == null
child: widget.avatarBox.get('username') == null &&
widget.avatarBox.get('avatar') == null
? const Wrapper()
: const BaseScreen(),
),
Expand Down
119 changes: 10 additions & 109 deletions lib/screens/base_screen.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter_animate/flutter_animate.dart';
import 'package:musico/colors/color.dart';
import 'package:musico/screens/about_screen.dart';
import 'package:musico/screens/home_screen.dart';
import 'package:musico/screens/player_screen.dart';
import 'package:musico/screens/search_screen.dart';
import 'package:musico/services/Providers/music_player_provider.dart';
import 'package:musico/services/api/player_api.dart';
import 'package:musico/widgets/floating_mediabar.dart';
import 'package:page_transition/page_transition.dart';
import 'package:provider/provider.dart';
import 'package:google_fonts/google_fonts.dart';
Expand All @@ -19,7 +22,11 @@ class BaseScreen extends StatefulWidget {

class _BaseScreenState extends State<BaseScreen> {
var currentIndex = 0;
List<Widget> widgets = [const HomeScreen(),const SearchScreen(),const AboutScreen()];
List<Widget> widgets = [
const HomeScreen(),
const SearchScreen(),
const AboutScreen()
];

Widget mainBody() {
switch (currentIndex) {
Expand All @@ -43,115 +50,9 @@ class _BaseScreenState extends State<BaseScreen> {
mainBody(),
Consumer<MusicPlayerProvider>(
builder: (_, musicPlayerProvider, child) {
return Positioned(
return const Positioned(
bottom: 75,
child: Visibility(
visible: musicPlayerProvider.audio == null ||
musicPlayerProvider.songs == []
? false
: true,
child: Container(
alignment: Alignment.center,
margin: const EdgeInsets.symmetric(horizontal: 10.0),
decoration: BoxDecoration(
color: primaryThemeColor,
borderRadius: BorderRadius.circular(10.0)),
width: MediaQuery.of(context).size.width * 0.95,
child: GestureDetector(
onVerticalDragEnd: (details) async {
await musicPlayerProvider.advancedPlayer.stop();
musicPlayerProvider.audio = null;
musicPlayerProvider.isNewSongSet = true;
},
child: ClipRRect(
borderRadius: BorderRadius.circular(12.0),
child: ListTile(
title: Text(
musicPlayerProvider.songs.isNotEmpty
? musicPlayerProvider
.songs[musicPlayerProvider.currentIndex]
.title
: "",
maxLines: 1,
style: GoogleFonts.poppins(
color: Colors.black,
fontWeight: FontWeight.w600),
overflow: TextOverflow.ellipsis,
),
subtitle: Text(
musicPlayerProvider.songs.isNotEmpty
? musicPlayerProvider
.songs[musicPlayerProvider.currentIndex]
.author
: "",
maxLines: 1,
style: GoogleFonts.poppins(
color: Colors.black,
fontWeight: FontWeight.w500),
overflow: TextOverflow.ellipsis,
),
leading: ClipRRect(
borderRadius: BorderRadius.circular(5.0),
child: Image(
image: NetworkImage(musicPlayerProvider
.songs.isNotEmpty
? musicPlayerProvider
.songs[musicPlayerProvider.currentIndex]
.thumbnail
: ""),
),
),
trailing: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.end,
children: [
IconButton(
iconSize: 35,
icon: musicPlayerProvider.isPlaying
? const Icon(
Icons.pause,
size: 35,
color: Colors.black,
)
: const Icon(
Icons.play_arrow,
size: 35,
color: Colors.black,
),
onPressed: () {
musicPlayerProvider.togglePlayback();
},
),
Visibility(
visible:
musicPlayerProvider.advancedPlayer.hasNext
? true
: false,
child: IconButton(
iconSize: 35,
icon: const Icon(
Icons.skip_next,
color: Colors.black,
),
onPressed: () {
musicPlayerProvider.playNextSong();
},
),
),
],
),
),
),
onTap: () {
Navigator.push(
context,
PageTransition(
child: const PlayerScreen(),
type: PageTransitionType.bottomToTop));
},
),
),
));
child: FloatingMediaBar());
})
]),
backgroundColor: Colors.transparent,
Expand Down
10 changes: 5 additions & 5 deletions lib/screens/home_screen.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
//import 'package:curved_navigation_bar/curved_navigation_bar.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:hive/hive.dart';
import 'package:musico/colors/color.dart';
import 'package:musico/components/playlist_container.dart';
import 'package:musico/screens/wrapper.dart';
import 'package:page_transition/page_transition.dart';
import 'package:shared_preferences/shared_preferences.dart';

class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
Expand All @@ -16,15 +16,15 @@ class HomeScreen extends StatefulWidget {

class _HomeScreenState extends State<HomeScreen> {
var settext = "";
late final SharedPreferences pref;
late final Box avatarBox;
String username = "";
String? avatar;

void getsharedpref() async {
pref = await SharedPreferences.getInstance();
avatarBox = await Hive.openBox('avatarBox');
setState(() {
username = pref.getString('username') ?? "";
avatar = pref.getString('avatar');
username = avatarBox.get('username') ?? "";
avatar = avatarBox.get('avatar');
});
}

Expand Down
128 changes: 3 additions & 125 deletions lib/screens/search_results.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:musico/services/Providers/music_player_provider.dart';
import 'package:musico/services/api/search_song_api.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:musico/screens/player_screen.dart';
import 'package:musico/widgets/floating_mediabar.dart';
import 'package:page_transition/page_transition.dart';
import 'package:musico/shimmers/searchresult_shimmer.dart';
import 'package:provider/provider.dart';
Expand All @@ -25,7 +26,6 @@ class _SearchResultScreenState extends State<SearchResultScreen> {

@override
void initState() {
// TODO: implement initState
super.initState();
getSongs = SearchSongs().getSongs(widget.message);
getVideos = SearchSongs().getVideos(widget.message);
Expand Down Expand Up @@ -210,130 +210,8 @@ class _SearchResultScreenState extends State<SearchResultScreen> {
),
Consumer<MusicPlayerProvider>(
builder: (_, musicPlayerProvider, child) {
return Positioned(
bottom: 15,
child: Visibility(
visible: musicPlayerProvider.audio == null
? false
: true,
child: Container(
alignment: Alignment.center,
margin:
const EdgeInsets.symmetric(horizontal: 10.0),
decoration: BoxDecoration(
color: primaryThemeColor,
borderRadius: BorderRadius.circular(10.0)),
width: MediaQuery.of(context).size.width * 0.95,
child: GestureDetector(
onVerticalDragEnd: (details) {
musicPlayerProvider.advancedPlayer.stop();
musicPlayerProvider.audio = null;
musicPlayerProvider.isNewSongSet = true;
},
child: ClipRRect(
borderRadius: BorderRadius.circular(12.0),
child: Column(
children: [
ListTile(
title: Text(
musicPlayerProvider.songs.isNotEmpty
? musicPlayerProvider
.songs[musicPlayerProvider
.currentIndex]
.title
: "",
maxLines: 1,
style: GoogleFonts.poppins(
color: Colors.black,
fontWeight: FontWeight.w600),
overflow: TextOverflow.ellipsis,
),
subtitle: Text(
musicPlayerProvider.songs.isNotEmpty
? musicPlayerProvider
.songs[musicPlayerProvider
.currentIndex]
.author
: "",
maxLines: 1,
style: GoogleFonts.poppins(
color: Colors.black,
fontWeight: FontWeight.w500),
overflow: TextOverflow.ellipsis,
),
leading: ClipRRect(
borderRadius:
BorderRadius.circular(5.0),
child: Image(
image: NetworkImage(
musicPlayerProvider
.songs.isNotEmpty
? musicPlayerProvider
.songs[
musicPlayerProvider
.currentIndex]
.thumbnail
: ""),
),
),
trailing: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment:
MainAxisAlignment.end,
children: [
IconButton(
iconSize: 35,
icon:
musicPlayerProvider.isPlaying
? const Icon(
Icons.pause,
size: 35,
color: Colors.black,
)
: const Icon(
Icons.play_arrow,
size: 35,
color: Colors.black,
),
onPressed: () {
musicPlayerProvider
.togglePlayback();
},
),
Visibility(
visible: musicPlayerProvider
.advancedPlayer.hasNext
? true
: false,
child: IconButton(
iconSize: 35,
icon: const Icon(
Icons.skip_next,
color: Colors.black,
),
onPressed: () {
musicPlayerProvider
.playNextSong();
},
),
),
],
),
),
],
),
),
onTap: () {
Navigator.push(
context,
PageTransition(
child: const PlayerScreen(),
type:
PageTransitionType.bottomToTop));
},
),
),
));
return const Positioned(
bottom: 15, child: FloatingMediaBar());
})
],
)),
Expand Down
Loading
Loading