Skip to content
Snippets Groups Projects
Commit 55e91013 authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Improve title bar, add "refresh" button

parent 5fee6728
No related branches found
No related tags found
1 merge request!12Resolve "Add refresh button"
Pipeline #4463 passed
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
app.versionName=0.0.10
app.versionCode=10
app.versionName=0.0.11
app.versionCode=11
Improve title bar, add refresh button.
Amélioration de la barre de titre, ajout d'un bouton de mise à jour.
......@@ -10,7 +10,9 @@ class ScrobblesApi {
static String baseUrl = 'https://scrobble.harrault.fr';
static Future<StatisticsData> fetchStatistics() async {
final response = await http.get(Uri.parse(baseUrl + '/stats'));
final String url = baseUrl + '/stats';
print('fetching ' + url);
final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) {
return StatisticsData.fromJson(jsonDecode(response.body) as Map<String, dynamic>);
......@@ -21,6 +23,7 @@ class ScrobblesApi {
static Future<TimelineData> fetchTimeline(int daysCount) async {
final String url = baseUrl + '/data/' + daysCount.toString() + '/timeline';
print('fetching ' + url);
final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) {
......@@ -32,6 +35,7 @@ class ScrobblesApi {
static Future<CountsByDayData> fetchCountsByDay(int daysCount) async {
final String url = baseUrl + '/data/' + daysCount.toString() + '/counts-by-day';
print('fetching ' + url);
final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) {
......@@ -43,6 +47,7 @@ class ScrobblesApi {
static Future<CountsByHourData> fetchCountsByHour(int daysCount) async {
final String url = baseUrl + '/data/' + daysCount.toString() + '/counts-by-hour';
print('fetching ' + url);
final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) {
......
import 'package:flutter/material.dart';
import '../widgets/header.dart';
import '../widgets/main_screen/counts_by_day_card.dart';
import '../widgets/main_screen/counts_by_hour_card.dart';
import '../widgets/main_screen/statistics_card.dart';
......@@ -17,7 +16,7 @@ class MainScreen extends StatelessWidget {
padding: const EdgeInsets.symmetric(horizontal: 16),
physics: const BouncingScrollPhysics(),
children: <Widget>[
const Header(text: 'app_name'),
const SizedBox(height: 90),
const StatisticsCard(),
const SizedBox(height: 8),
const ChartTimelineCard(),
......
import 'package:flutter/material.dart';
import 'main_screen.dart';
import '../widgets/app_bar.dart';
class SkeletonScreen extends StatelessWidget {
class SkeletonScreen extends StatefulWidget {
const SkeletonScreen({super.key});
@override
State<SkeletonScreen> createState() => _SkeletonScreenState();
}
class _SkeletonScreenState extends State<SkeletonScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: StandardAppBar(notifyParent: refresh),
extendBodyBehindAppBar: true,
body: MainScreen(),
body: const MainScreen(),
backgroundColor: Theme.of(context).colorScheme.background,
);
}
refresh() {
void rebuild(Element el) {
el.markNeedsBuild();
el.visitChildren(rebuild);
}
(context as Element).visitChildren(rebuild);
}
}
import 'package:flutter/material.dart';
import 'package:unicons/unicons.dart';
import '../widgets/header.dart';
class StandardAppBar extends StatelessWidget implements PreferredSizeWidget {
final Function() notifyParent;
const StandardAppBar({super.key, required this.notifyParent});
@override
Widget build(BuildContext context) {
return AppBar(
title: const Header(text: 'app_name'),
actions: [
IconButton(
onPressed: () {
this.notifyParent();
},
icon: const Icon(UniconsSolid.refresh),
),
],
);
}
@override
Size get preferredSize => const Size.fromHeight(50);
}
......@@ -8,13 +8,10 @@ class Header extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only(left: 2, right: 2, top: 48, bottom: 24),
child: Text(
tr(text),
textAlign: TextAlign.start,
style: Theme.of(context).textTheme.headlineMedium!.apply(fontWeightDelta: 2),
),
return Text(
tr(text),
textAlign: TextAlign.start,
style: Theme.of(context).textTheme.headlineMedium!.apply(fontWeightDelta: 2),
);
}
}
......@@ -12,10 +12,10 @@ class StatisticsCard extends StatelessWidget {
@override
Widget build(BuildContext context) {
late Future<StatisticsData> futureAlbum = ScrobblesApi.fetchStatistics();
late Future<StatisticsData> futureStatistics = ScrobblesApi.fetchStatistics();
return FutureBuilder<StatisticsData>(
future: futureAlbum,
future: futureStatistics,
builder: (context, snapshot) {
if (snapshot.hasError) {
return ShowErrorWidget(message: '${snapshot.error}');
......
......@@ -285,6 +285,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.3.2"
unicons:
dependency: "direct main"
description:
name: unicons
sha256: dbfcf93ff4d4ea19b324113857e358e4882115ab85db04417a4ba1c72b17a670
url: "https://pub.dev"
source: hosted
version: "2.1.1"
vector_math:
dependency: transitive
description:
......
......@@ -3,7 +3,7 @@ description: Display scrobbles data and charts
publish_to: 'none'
version: 0.0.10+10
version: 0.0.11+11
environment:
sdk: '^3.0.0'
......@@ -15,6 +15,7 @@ dependencies:
easy_localization: ^3.0.1
http: ^1.1.0
fl_chart: ^0.64.0
unicons: ^2.1.1
flutter:
uses-material-design: false
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment