From 55e91013cb1cf19d3c7fc4c85165f601d5579c4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Fri, 27 Oct 2023 15:26:00 +0200 Subject: [PATCH] Improve title bar, add "refresh" button --- android/gradle.properties | 4 +-- .../metadata/android/en-US/changelogs/11.txt | 1 + .../metadata/android/fr-FR/changelogs/11.txt | 1 + lib/network/scrobbles_api.dart | 7 ++++- lib/ui/screens/main_screen.dart | 3 +- lib/ui/screens/skeleton_screen.dart | 20 +++++++++++-- lib/ui/widgets/app_bar.dart | 28 +++++++++++++++++++ lib/ui/widgets/header.dart | 11 +++----- .../widgets/main_screen/statistics_card.dart | 4 +-- pubspec.lock | 8 ++++++ pubspec.yaml | 3 +- 11 files changed, 73 insertions(+), 17 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/11.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/11.txt create mode 100644 lib/ui/widgets/app_bar.dart diff --git a/android/gradle.properties b/android/gradle.properties index 6bf54a6..f0be9fb 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,5 +1,5 @@ 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 diff --git a/fastlane/metadata/android/en-US/changelogs/11.txt b/fastlane/metadata/android/en-US/changelogs/11.txt new file mode 100644 index 0000000..f081bd3 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/11.txt @@ -0,0 +1 @@ +Improve title bar, add refresh button. diff --git a/fastlane/metadata/android/fr-FR/changelogs/11.txt b/fastlane/metadata/android/fr-FR/changelogs/11.txt new file mode 100644 index 0000000..6f31360 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/11.txt @@ -0,0 +1 @@ +Amélioration de la barre de titre, ajout d'un bouton de mise à jour. diff --git a/lib/network/scrobbles_api.dart b/lib/network/scrobbles_api.dart index 7b00359..8aed8f9 100644 --- a/lib/network/scrobbles_api.dart +++ b/lib/network/scrobbles_api.dart @@ -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) { diff --git a/lib/ui/screens/main_screen.dart b/lib/ui/screens/main_screen.dart index 8ac7cca..9943616 100644 --- a/lib/ui/screens/main_screen.dart +++ b/lib/ui/screens/main_screen.dart @@ -1,6 +1,5 @@ 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(), diff --git a/lib/ui/screens/skeleton_screen.dart b/lib/ui/screens/skeleton_screen.dart index aeeb665..161794e 100644 --- a/lib/ui/screens/skeleton_screen.dart +++ b/lib/ui/screens/skeleton_screen.dart @@ -1,16 +1,32 @@ 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); + } } diff --git a/lib/ui/widgets/app_bar.dart b/lib/ui/widgets/app_bar.dart new file mode 100644 index 0000000..3313e59 --- /dev/null +++ b/lib/ui/widgets/app_bar.dart @@ -0,0 +1,28 @@ +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); +} diff --git a/lib/ui/widgets/header.dart b/lib/ui/widgets/header.dart index 1186bd3..2187ef8 100644 --- a/lib/ui/widgets/header.dart +++ b/lib/ui/widgets/header.dart @@ -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), ); } } diff --git a/lib/ui/widgets/main_screen/statistics_card.dart b/lib/ui/widgets/main_screen/statistics_card.dart index ae0a4e9..aef4e34 100644 --- a/lib/ui/widgets/main_screen/statistics_card.dart +++ b/lib/ui/widgets/main_screen/statistics_card.dart @@ -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}'); diff --git a/pubspec.lock b/pubspec.lock index 6952c80..42ca9d5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -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: diff --git a/pubspec.yaml b/pubspec.yaml index 27e3de8..4336e10 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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 -- GitLab