commit 08dfeb9c7f5e16ac26212ae93e6de55a3de7c972
parent 92ec6c1c8b9750f0c8641176abc4e740669f17a8
Author: Marcel <mtrnord1@gmail.com>
Date: Sun, 23 Feb 2020 18:39:45 +0100
Add Rankings
Took 44 minutes
Diffstat:
6 files changed, 98 insertions(+), 6 deletions(-)
diff --git a/lib/repos/RailwayStationsApiClient.dart b/lib/repos/RailwayStationsApiClient.dart
@@ -1,6 +1,7 @@
import 'dart:convert';
import 'package:flutter/foundation.dart';
+import 'package:grizzly_io/grizzly_io.dart';
import 'package:http/http.dart' as http;
import 'package:meta/meta.dart';
@@ -43,4 +44,15 @@ class RailwayStationsApiClient {
});
return stations;
}
+
+ Future<List<List<String>>> getScores() async {
+ final scoresUrl = '$baseUrl/photographers.txt';
+ final scoresResponse = await this.httpClient.get(scoresUrl);
+ if (scoresResponse.statusCode != 200) {
+ throw Exception('error getting stations');
+ }
+
+ List<List<String>> scores = parseTsv(scoresResponse.body);
+ return scores;
+ }
}
diff --git a/lib/repos/RailwayStationsRepository.dart b/lib/repos/RailwayStationsRepository.dart
@@ -9,11 +9,15 @@ class RailwayStationsRepository {
RailwayStationsRepository({@required this.railwayStationsApiClient})
: assert(railwayStationsApiClient != null);
- Future<List<Country>> getCountries() async {
- return await railwayStationsApiClient.getCountries();
+ Future<List<Country>> getCountries() {
+ return railwayStationsApiClient.getCountries();
}
- Future<List<Station>> getStations() async {
- return await railwayStationsApiClient.getStations();
+ Future<List<Station>> getStations() {
+ return railwayStationsApiClient.getStations();
+ }
+
+ Future<List<List<String>>> getScores() {
+ return railwayStationsApiClient.getScores();
}
}
diff --git a/lib/views/HomePage.dart b/lib/views/HomePage.dart
@@ -2,6 +2,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:http/http.dart' as http;
+import 'package:rs_flutter_app/views/tabs/rankingsTab.dart';
import '../blocs/MapBloc.dart';
import '../repos/RailwayStationsApiClient.dart';
@@ -60,7 +61,12 @@ class HomePage extends StatelessWidget {
),
),
Scaffold(
- body: Container(),
+ appBar: AppBar(
+ title: Text("Rangliste"),
+ ),
+ body: RankingsTab(
+ railwayStationsRepository: railwayStationsRepository,
+ ),
),
Scaffold(
appBar: AppBar(
diff --git a/lib/views/tabs/rankingsTab.dart b/lib/views/tabs/rankingsTab.dart
@@ -0,0 +1,60 @@
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import '../../repos/repositories.dart';
+
+class RankingsTab extends StatelessWidget {
+ final RailwayStationsRepository railwayStationsRepository;
+
+ RankingsTab({@required this.railwayStationsRepository})
+ : assert(railwayStationsRepository != null);
+
+ Future<List<List<String>>> getScores() {
+ return this.railwayStationsRepository.getScores();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return FutureBuilder(
+ future: getScores(),
+ builder:
+ (BuildContext context, AsyncSnapshot<List<List<String>>> snapshot) {
+ switch (snapshot.connectionState) {
+ case ConnectionState.done:
+ if (snapshot.hasError) {
+ // TODO handle error
+ debugPrint(snapshot.error.toString());
+ }
+ if (snapshot.hasData) {
+ List<List<String>> scores = snapshot.data;
+ scores.removeAt(0);
+ scores.sort(
+ (a, b) => (int.parse(b.first)).compareTo(int.parse(a.first)),
+ );
+
+ return ListView.separated(
+ itemCount: scores.length,
+ separatorBuilder: (BuildContext context, int index) {
+ return Divider();
+ },
+ itemBuilder: (BuildContext context, int index) {
+ return ListTile(
+ leading: Text(
+ "${(index + 1)}.",
+ style: TextStyle(
+ fontWeight: FontWeight.bold,
+ ),
+ ),
+ title: Text(scores[index][1]),
+ );
+ },
+ );
+ }
+ // TODO handle missing date
+ return Container();
+ default:
+ return CircularProgressIndicator();
+ }
+ },
+ );
+ }
+}
diff --git a/pubspec.lock b/pubspec.lock
@@ -147,7 +147,7 @@ packages:
source: hosted
version: "3.2.0"
flutter_cache_manager:
- dependency: transitive
+ dependency: "direct main"
description:
name: flutter_cache_manager
url: "https://pub.dartlang.org"
@@ -201,6 +201,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
+ grizzly_io:
+ dependency: "direct main"
+ description:
+ name: grizzly_io
+ url: "https://pub.dartlang.org"
+ source: hosted
+ version: "2.2.0"
html:
dependency: transitive
description:
diff --git a/pubspec.yaml b/pubspec.yaml
@@ -36,6 +36,9 @@ dependencies:
settings_ui: ^0.2.0
+ flutter_cache_manager: ^1.1.3
+ grizzly_io: ^2.2.0
+
dev_dependencies:
flutter_test:
sdk: flutter