artists.dart 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import 'dart:convert';
  2. import 'package:flutter/material.dart';
  3. import 'package:http/http.dart' as http;
  4. import '../config.dart';
  5. class Artists extends StatefulWidget {
  6. @override
  7. _ArtistsWidgetState createState() => _ArtistsWidgetState();
  8. }
  9. Future<List<String>> fetchArtists() async {
  10. final response = await http.get(Uri.https(config['apiUrl'], '/artists'));
  11. if (response.statusCode == 200) {
  12. return List<String>.from(jsonDecode(response.body)['artists']);
  13. } else {
  14. throw Exception('Failed to load artists');
  15. }
  16. }
  17. class _ArtistsWidgetState extends State<Artists> {
  18. Future<List<String>> artists;
  19. @override
  20. void initState() {
  21. super.initState();
  22. artists = fetchArtists();
  23. }
  24. @override
  25. Widget build(BuildContext context) {
  26. return FutureBuilder<List<String>>(
  27. future: artists,
  28. builder: (context, snapshot) {
  29. if (snapshot.hasData) {
  30. return ListView(
  31. padding: EdgeInsets.only(left: 8, right: 8),
  32. children: snapshot.data.map((artist) => Container(
  33. height: 32,
  34. color: Colors.white,
  35. child: Align(
  36. alignment: Alignment.centerLeft,
  37. child: Text(artist.length == 0 ? 'Unknown artist' : artist),
  38. ),
  39. )).toList(),
  40. );
  41. }
  42. if (snapshot.hasError) {
  43. return Text("${snapshot.error}");
  44. }
  45. return CircularProgressIndicator();
  46. },
  47. );
  48. }
  49. }