Untitled
unknown
plain_text
a year ago
4.2 kB
6
Indexable
class MusicScreenState extends StatefulWidget {
final PanelController _panelController = PanelController();
MusicScreenState({Key? key}) : super(key: key);
@override
_MusicScreenState createState() => _MusicScreenState();
}
class _MusicScreenState extends State<MusicScreenState> {
final _firestore = FirebaseFirestore.instance;
final Map<String, ValueNotifier<bool>> _favoriteMap = {};
LinkedHashSet<MusicInfo> _favoriteList = LinkedHashSet<MusicInfo>();
final AudioPlayer _audioPlayer = AudioPlayerService.audioPlayer;
SharedPreferences? prefs;
bool _isPanelOpen = false;
@override
void initState() {
super.initState();
loadDatakeys();
}
Future<void> loadDatakeys() async {
prefs = await SharedPreferences.getInstance();
}
@override
void dispose() {
_audioPlayer.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: _isPanelOpen
? null
: AppBar(
elevation: 0,
backgroundColor: Colors.blue,
title: const Text(
"Music Library",
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w600,
color: Colors.white,
),
),
),
body: StreamBuilder<QuerySnapshot>(
stream: _firestore.collection('musicCollection').snapshots(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(
child: CircularProgressIndicator(),
);
} else if (snapshot.hasData) {
final musicDocs = snapshot.data!.docs;
List<Widget> musicTiles = [];
for (var doc in musicDocs) {
String jsonString = doc.get('info');
Map<String, dynamic> jsonData = _decodeJson(jsonString);
if (jsonData.containsKey('info')) {
List<dynamic> jsonList = jsonData['info'] as List<dynamic>;
List<MusicInfo> musicInfos = jsonList.map((jsonMap) {
return MusicInfo.fromJson(jsonMap);
}).toList();
return InkWell(
onTap: () {
// Handle onTap
},
child: Card(
elevation: 3,
margin: EdgeInsets.zero,
child: ListTile(
leading: Image.network(musicInfo.thumbnailLink),
title: Text(
musicInfo.heading,
style: const TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Colors.black,
),
),
subtitle: Text(
musicInfo.location,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
color: Colors.red,
),
),
),
),
);
}));
musicTiles.add(const SizedBox(height: 20));
}
}
return Padding(
padding: const EdgeInsets.only(top: 5.0),
child: ListView(children: [
Column(
children: musicTiles,
),
]),
);
} else {
return const Center(child: Text("Try Again After Some Time"));
}
},
),
);
}
Map<String, dynamic> _decodeJson(String jsonString) {
try {
return json.decode(jsonString) as Map<String, dynamic>;
} catch (e) {
print("Error decoding JSON: $e");
return {};
}
}
}
Editor is loading...
Leave a Comment