|
@@ -0,0 +1,58 @@
|
|
|
|
|
+import 'dart:convert';
|
|
|
|
|
+
|
|
|
|
|
+import 'package:flutter/material.dart';
|
|
|
|
|
+import 'package:http/http.dart' as http;
|
|
|
|
|
+
|
|
|
|
|
+import '../config.dart';
|
|
|
|
|
+
|
|
|
|
|
+class Artists extends StatefulWidget {
|
|
|
|
|
+ @override
|
|
|
|
|
+ _ArtistsWidgetState createState() => _ArtistsWidgetState();
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+Future<List<String>> fetchArtists() async {
|
|
|
|
|
+ final response = await http.get(Uri.https(config['apiUrl'], '/artists'));
|
|
|
|
|
+
|
|
|
|
|
+ if (response.statusCode == 200) {
|
|
|
|
|
+ return List<String>.from(jsonDecode(response.body)['artists']);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ throw Exception('Failed to load artists');
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+class _ArtistsWidgetState extends State<Artists> {
|
|
|
|
|
+ Future<List<String>> artists;
|
|
|
|
|
+
|
|
|
|
|
+ @override
|
|
|
|
|
+ void initState() {
|
|
|
|
|
+ super.initState();
|
|
|
|
|
+ artists = fetchArtists();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @override
|
|
|
|
|
+ Widget build(BuildContext context) {
|
|
|
|
|
+ return FutureBuilder<List<String>>(
|
|
|
|
|
+ future: artists,
|
|
|
|
|
+ builder: (context, snapshot) {
|
|
|
|
|
+ if (snapshot.hasData) {
|
|
|
|
|
+ return ListView(
|
|
|
|
|
+ padding: EdgeInsets.only(left: 8, right: 8),
|
|
|
|
|
+ children: snapshot.data.map((artist) => Container(
|
|
|
|
|
+ height: 32,
|
|
|
|
|
+ color: Colors.white,
|
|
|
|
|
+ child: Align(
|
|
|
|
|
+ alignment: Alignment.centerLeft,
|
|
|
|
|
+ child: Text(artist.length == 0 ? 'Unknown artist' : artist),
|
|
|
|
|
+ ),
|
|
|
|
|
+ )).toList(),
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+ if (snapshot.hasError) {
|
|
|
|
|
+ return Text("${snapshot.error}");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return CircularProgressIndicator();
|
|
|
|
|
+ },
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+}
|