Added Http request for available Tournaments

This commit is contained in:
2026-03-04 10:09:09 +01:00
parent 65a6089f5e
commit 0a15d7122e
4 changed files with 82 additions and 12 deletions

View File

@@ -1,4 +1,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET"/>
<application <application
android:label="frontend_splatournament_manager" android:label="frontend_splatournament_manager"
android:name="${applicationName}" android:name="${applicationName}"

View File

@@ -0,0 +1,25 @@
class Tournament {
final int id;
final String name;
final String description;
final int maxTeamsAmount;
final int currentTeamAmount;
Tournament({
required this.id,
required this.name,
required this.description,
required this.maxTeamsAmount,
required this.currentTeamAmount,
});
factory Tournament.fromJson(dynamic json) {
return Tournament(
id: json['id'],
name: json['name'],
description: json['description'],
maxTeamsAmount: json['maxTeamsAmount'],
currentTeamAmount: json['currentTeamAmount'],
);
}
}

View File

@@ -1,4 +1,8 @@
import 'dart:convert';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:frontend_splatournament_manager/models/tournament.dart';
import 'package:http/http.dart' as http;
class StateProvider extends ChangeNotifier { class StateProvider extends ChangeNotifier {
ThemeMode _themeMode = ThemeMode.system; ThemeMode _themeMode = ThemeMode.system;
@@ -9,4 +13,22 @@ class StateProvider extends ChangeNotifier {
_themeMode = mode; _themeMode = mode;
notifyListeners(); notifyListeners();
} }
List<Tournament>? _availableTournaments;
Future<List<Tournament>> fetchAvailableTournaments() async {
try {
var response = await http.get(Uri.parse('http://10.0.2.2:3000/availableTournaments'));
if (response.statusCode == 200) {
final List<dynamic> list = json.decode(response.body);
_availableTournaments = list.map((json) => Tournament.fromJson(json)).toList();
return _availableTournaments!;
}
} catch (e) {
print(e);
_availableTournaments = null;
return Future.error(e);
}
return[];
}
List<Tournament> get user => _availableTournaments ?? [];
} }

View File

@@ -1,5 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:frontend_splatournament_manager/pages/tournament_detail_page.dart'; import 'package:frontend_splatournament_manager/pages/tournament_detail_page.dart';
import 'package:frontend_splatournament_manager/state_provider.dart';
import 'package:provider/provider.dart';
class AvailableTournamentList extends StatelessWidget { class AvailableTournamentList extends StatelessWidget {
const AvailableTournamentList({super.key}); const AvailableTournamentList({super.key});
@@ -7,18 +9,37 @@ class AvailableTournamentList extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Expanded( return Expanded(
child: ListView.builder( child: Consumer<StateProvider>(
itemCount: 5, builder: (BuildContext context, StateProvider value, Widget? child) =>
itemBuilder: (context, index) { FutureBuilder(
return ListTile( future: value.fetchAvailableTournaments(),
leading: Icon(Icons.abc), builder: (context, snapshot) {
title: Text("TITLE"), if(snapshot.hasError){
subtitle: Text("Description"), return Center(child: Text('Error: ${snapshot.error}'));
onTap: () { }else if(!snapshot.hasData){
Navigator.push(context, MaterialPageRoute(builder: (context) => TournamentDetailPage(),)); return Center(child: CircularProgressIndicator());
}, }
); var list = snapshot.data!;
}, return ListView.builder(
itemCount: list.length,
itemBuilder: (context, index) {
return ListTile(
leading: Icon(Icons.abc),
title: Text(list[index].name),
subtitle: Text(list[index].description),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TournamentDetailPage(),
),
);
},
);
},
);
},
),
), ),
); );
} }