Added Http request for available Tournaments
This commit is contained in:
@@ -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}"
|
||||||
|
|||||||
25
frontend_splatournament_manager/lib/models/tournament.dart
Normal file
25
frontend_splatournament_manager/lib/models/tournament.dart
Normal 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'],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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 ?? [];
|
||||||
}
|
}
|
||||||
@@ -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,19 +9,38 @@ 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) =>
|
||||||
|
FutureBuilder(
|
||||||
|
future: value.fetchAvailableTournaments(),
|
||||||
|
builder: (context, snapshot) {
|
||||||
|
if(snapshot.hasError){
|
||||||
|
return Center(child: Text('Error: ${snapshot.error}'));
|
||||||
|
}else if(!snapshot.hasData){
|
||||||
|
return Center(child: CircularProgressIndicator());
|
||||||
|
}
|
||||||
|
var list = snapshot.data!;
|
||||||
|
return ListView.builder(
|
||||||
|
itemCount: list.length,
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
return ListTile(
|
return ListTile(
|
||||||
leading: Icon(Icons.abc),
|
leading: Icon(Icons.abc),
|
||||||
title: Text("TITLE"),
|
title: Text(list[index].name),
|
||||||
subtitle: Text("Description"),
|
subtitle: Text(list[index].description),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.push(context, MaterialPageRoute(builder: (context) => TournamentDetailPage(),));
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => TournamentDetailPage(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user