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
Branches
Tags Release_0.1.1_22
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(
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.
Please to comment