Explorar o código

feat: basic artists list

Fela Maslen %!s(int64=4) %!d(string=hai) anos
pai
achega
cf1d4e04c9

+ 58 - 0
gmus-mobile/lib/components/artists.dart

@@ -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();
+      },
+    );
+  }
+}

+ 2 - 1
gmus-mobile/lib/components/ui.dart

@@ -3,6 +3,7 @@ import 'package:get/get.dart';
 
 import '../controller.dart';
 
+import './artists.dart';
 import './player.dart';
 
 // Main UI once identified
@@ -12,9 +13,9 @@ class UI extends StatelessWidget {
   Widget build(BuildContext context) {
     return Column(
       children: [
+        Expanded(child: Artists()),
         GmusPlayer(),
       ],
     );
   }
 }
-

+ 0 - 1
gmus-mobile/lib/controller.dart

@@ -55,7 +55,6 @@ class Controller extends GetxController {
     var action = jsonDecode(message);
     switch (action['type']) {
       case actions.CLIENT_LIST_UPDATED:
-        print("Client list updated: ${action['payload']}");
         var payload = action['payload'];
 
         List<Client> clientList = [];

+ 3 - 1
gmus-mobile/lib/main.dart

@@ -21,7 +21,9 @@ class Gmus extends StatelessWidget {
       body: Container(
           child: Column(
               children: [
-                Content(),
+                Expanded(
+                  child: Content(),
+                ),
                 StatusBar(),
               ],
           ),

+ 1 - 13
gmus-mobile/lib/socket.dart

@@ -6,20 +6,8 @@ import 'package:web_socket_channel/io.dart';
 import './config.dart';
 import './controller.dart';
 
-String getApiUrlWithProtocol() {
-  final String baseUrl = config['apiUrl'];
-  if (baseUrl.startsWith('//')) {
-    return "https://$baseUrl";
-  }
-  return baseUrl;
-}
-
 String getWebSocketUrl() {
-  String apiUrlWithProtocol = getApiUrlWithProtocol();
-  String protocol = apiUrlWithProtocol.substring(0, apiUrlWithProtocol.indexOf('//'));
-  String apiUrlWithoutProtocol = apiUrlWithProtocol.substring(apiUrlWithProtocol.indexOf('//') + 2);
-
-  return "${(protocol == 'https:') ? 'wss' : 'ws'}://$apiUrlWithoutProtocol/pubsub";
+  return "wss://${config['apiUrl']}/pubsub";
 }
 
 String getUniqueName(String name) {

+ 21 - 0
gmus-mobile/pubspec.lock

@@ -95,6 +95,20 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "3.25.4"
+  http:
+    dependency: "direct main"
+    description:
+      name: http
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "0.13.0"
+  http_parser:
+    dependency: transitive
+    description:
+      name: http_parser
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "4.0.0"
   matcher:
     dependency: transitive
     description:
@@ -123,6 +137,13 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "1.8.0"
+  pedantic:
+    dependency: transitive
+    description:
+      name: pedantic
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.10.0"
   sky_engine:
     dependency: transitive
     description: flutter

+ 1 - 0
gmus-mobile/pubspec.yaml

@@ -25,6 +25,7 @@ dependencies:
     sdk: flutter
   flutter_dotenv:
   get:
+  http:
   cupertino_icons: ^1.0.0
   nanoid:
   web_socket_channel: