diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f9b303465f19b5fbf5ec669cd083c9cc38ecda9a --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1 @@ +include: package:flutter_lints/flutter.yaml diff --git a/android/gradle.properties b/android/gradle.properties index b87ac7c88e3a98a757a90bff89e63fb14b2f355b..de9dc0d19ce1de34abbab2c48a8182abf6d2642c 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.52 -app.versionCode=52 +app.versionName=0.0.53 +app.versionCode=53 diff --git a/fastlane/metadata/android/en-US/changelogs/53.txt b/fastlane/metadata/android/en-US/changelogs/53.txt new file mode 100644 index 0000000000000000000000000000000000000000..6ab11150150fc75a46c9acc317890208e5a120b9 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/53.txt @@ -0,0 +1 @@ +Add automatic flutter linter. Apply code lints. Update dependencies. diff --git a/fastlane/metadata/android/fr-FR/changelogs/53.txt b/fastlane/metadata/android/fr-FR/changelogs/53.txt new file mode 100644 index 0000000000000000000000000000000000000000..609f5cf6e95a8df0799865df2e1ebde8fa981e5a --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/53.txt @@ -0,0 +1 @@ +Ajout d'un correcteur automatique de code. Application des corrections. Mise à jour des dépendances. diff --git a/lib/models/artists.dart b/lib/models/artists.dart index e9eaf5e698f862823478523ffd36ec28f9964dca..aaf3b9627f90507d950b5d994e0e1a083d73de9b 100644 --- a/lib/models/artists.dart +++ b/lib/models/artists.dart @@ -21,13 +21,14 @@ class Artist { Map<String, Object?>? toJson() { return { - 'id': this.id, - 'name': this.name, - 'mbid': this.mbid, + 'id': id, + 'name': name, + 'mbid': mbid, }; } + @override String toString() { - return jsonEncode(this.toJson()); + return jsonEncode(toJson()); } } diff --git a/lib/models/counts_by_day.dart b/lib/models/counts_by_day.dart index 27e41f6783fc5e4f408e2266723d5dc1fb5c3079..cfc22631307aac5f880d313645681168b01780bc 100644 --- a/lib/models/counts_by_day.dart +++ b/lib/models/counts_by_day.dart @@ -22,15 +22,16 @@ class CountsByDayData { Map<String, Object?>? toJson() { Map<String, double> map = {}; - this.data.keys.forEach((day) { - double? value = this.data[day]; + for (var day in data.keys) { + double? value = data[day]; map[day.toString()] = value != null ? value.toDouble() : 0.0; - }); + } return {'counts-by-day': map}; } + @override String toString() { - return jsonEncode(this.toJson()); + return jsonEncode(toJson()); } } diff --git a/lib/models/counts_by_hour.dart b/lib/models/counts_by_hour.dart index 7bf380294d2dc2addace67a473cbe05865ac1d69..5073ace368bd5eacfe2dde744a7d07d6ca4cdea7 100644 --- a/lib/models/counts_by_hour.dart +++ b/lib/models/counts_by_hour.dart @@ -24,15 +24,16 @@ class CountsByHourData { Map<String, Object?>? toJson() { Map<String, double> map = {}; - this.data.keys.forEach((day) { - double? value = this.data[day]; + for (var day in data.keys) { + double? value = data[day]; map[day.toString()] = value != null ? value.toDouble() : 0.0; - }); + } return {'counts-by-hour': map}; } + @override String toString() { - return jsonEncode(this.toJson()); + return jsonEncode(toJson()); } } diff --git a/lib/models/discoveries.dart b/lib/models/discoveries.dart index 386098f5304e5b7b326c7b48f3e3ba187f7602fd..89eea2f497def84cc5721f84bc82a6eeb6658ba9 100644 --- a/lib/models/discoveries.dart +++ b/lib/models/discoveries.dart @@ -39,18 +39,19 @@ class DiscoveriesData { Map<String, Object?>? toJson() { Map<String, Map<String, int>> map = {}; - this.data.keys.forEach((element) { - DiscoveriesDataValue? item = this.data[element]; + for (var element in data.keys) { + DiscoveriesDataValue? item = data[element]; map[element] = { 'new-artists': item != null ? item.newArtistsCount : 0, 'new-tracks': item != null ? item.newTracksCount : 0, }; - }); + } return map; } + @override String toString() { - return jsonEncode(this.toJson()); + return jsonEncode(toJson()); } } diff --git a/lib/models/heatmap.dart b/lib/models/heatmap.dart index 81a06ee89314294763ca8f40e721a978723fde06..4722e2bffc59b7c6079b0dc5b2c7f4b739b0d34d 100644 --- a/lib/models/heatmap.dart +++ b/lib/models/heatmap.dart @@ -15,9 +15,9 @@ class HeatmapData { Map<String, dynamic> rawDataForThisDay = json['heatmap'][day]; Map<int, int> dataForThisDay = {}; - rawDataForThisDay.keys.forEach((hour) { + for (var hour in rawDataForThisDay.keys) { dataForThisDay[int.parse(hour)] = int.parse(rawDataForThisDay[hour].toString()); - }); + } data[int.parse(day)] = dataForThisDay; }); @@ -29,18 +29,19 @@ class HeatmapData { Map<String, dynamic> toJson() { Map<String, Map<String, int>> map = {}; - this.data.keys.forEach((day) { + for (var day in data.keys) { Map<String, int> dayMap = {}; - this.data[day]?.forEach((hour, count) { + data[day]?.forEach((hour, count) { dayMap[hour.toString()] = count; }); map[day.toString()] = dayMap; - }); + } return {'heatmap': map}; } + @override String toString() { - return jsonEncode(this.toJson()); + return jsonEncode(toJson()); } } diff --git a/lib/models/new_artists.dart b/lib/models/new_artists.dart index d0c4b6a69fab06b76f570cb9f711066147421fde..fffafc628d11ab099f053db462d74d6590adbc73 100644 --- a/lib/models/new_artists.dart +++ b/lib/models/new_artists.dart @@ -43,19 +43,20 @@ class NewArtistsData { List<Map<String, dynamic>> toJson() { List<Map<String, dynamic>> list = []; - this.data.forEach((item) { + for (var item in data) { list.add({ 'firstPlayed': { - 'date': item.firstPlayed != null ? item.firstPlayed.toString() : null, + 'date': item.firstPlayed?.toString(), }, 'artist': item.artist?.toJson(), }); - }); + } return list; } + @override String toString() { - return jsonEncode(this.toJson()); + return jsonEncode(toJson()); } } diff --git a/lib/models/new_tracks.dart b/lib/models/new_tracks.dart index 101c4334df229ba85c56aa03a38ca5477af49c0e..b1105effacdb46a2b19381bf4eda68bd6e67578a 100644 --- a/lib/models/new_tracks.dart +++ b/lib/models/new_tracks.dart @@ -43,19 +43,20 @@ class NewTracksData { List<Map<String, dynamic>> toJson() { List<Map<String, dynamic>> list = []; - this.data.forEach((item) { + for (var item in data) { list.add({ 'firstPlayed': { - 'date': item.firstPlayed != null ? item.firstPlayed.toString() : null, + 'date': item.firstPlayed?.toString(), }, 'track': item.track?.toJson(), }); - }); + } return list; } + @override String toString() { - return jsonEncode(this.toJson()); + return jsonEncode(toJson()); } } diff --git a/lib/models/statistics_global.dart b/lib/models/statistics_global.dart index 1f87265ed5902f2515066761fc7c7d9cea515de9..065d10ebb491f8485b74529fe49249f89c57d72a 100644 --- a/lib/models/statistics_global.dart +++ b/lib/models/statistics_global.dart @@ -22,14 +22,15 @@ class StatisticsGlobalData { Map<String, Object?>? toJson() { return <String, Object?>{ - 'totalCount': this.totalCount, + 'totalCount': totalCount, 'lastScrobble': { - 'date': this.lastScrobble != null ? this.lastScrobble.toString() : null, + 'date': lastScrobble?.toString(), }, }; } + @override String toString() { - return jsonEncode(this.toJson()); + return jsonEncode(toJson()); } } diff --git a/lib/models/statistics_recent.dart b/lib/models/statistics_recent.dart index 1f342f9e7d0627789d097eeb17ca5ce8a761ac32..2d204bb8d4392eea7161d9e32946fc0300fe3fa3 100644 --- a/lib/models/statistics_recent.dart +++ b/lib/models/statistics_recent.dart @@ -29,14 +29,15 @@ class StatisticsRecentData { Map<String, Object?>? toJson() { return <String, Object?>{ - 'recentCount': this.recentCount, - 'firstPlayedArtistsCount': this.firstPlayedArtistsCount, - 'firstPlayedTracksCount': this.firstPlayedTracksCount, - 'selectedPeriod': this.selectedPeriod, + 'recentCount': recentCount, + 'firstPlayedArtistsCount': firstPlayedArtistsCount, + 'firstPlayedTracksCount': firstPlayedTracksCount, + 'selectedPeriod': selectedPeriod, }; } + @override String toString() { - return jsonEncode(this.toJson()); + return jsonEncode(toJson()); } } diff --git a/lib/models/timeline.dart b/lib/models/timeline.dart index 37f987bffb13395954c16714daf91c8eda54ed27..14bd42885e8707b9e2d8a5ef4c273809dc8fad2c 100644 --- a/lib/models/timeline.dart +++ b/lib/models/timeline.dart @@ -39,18 +39,19 @@ class TimelineData { Map<String, Object?>? toJson() { Map<String, Map<String, int>> map = {}; - this.data.keys.forEach((element) { - TimelineDataValue? item = this.data[element]; + for (var element in data.keys) { + TimelineDataValue? item = data[element]; map[element] = { 'counts': item != null ? item.counts : 0, 'eclecticism': item != null ? item.eclecticism : 0, }; - }); + } return map; } + @override String toString() { - return jsonEncode(this.toJson()); + return jsonEncode(toJson()); } } diff --git a/lib/models/topartists.dart b/lib/models/topartists.dart index 47013c8445cae37fce5025b3a22f7933906eb617..31b87df292b03c5f5040b40be34da43b30a761be 100644 --- a/lib/models/topartists.dart +++ b/lib/models/topartists.dart @@ -38,7 +38,7 @@ class TopArtistsStreamDataValue { @override String toString() { - return jsonEncode(this.toJson()); + return jsonEncode(toJson()); } } @@ -98,15 +98,15 @@ class TopArtistsData { List<Map<String, Object>> listArtists = []; Map<String, List<Map<String, double>>> artistsStreamMap = {}; - this.topArtists.forEach((TopArtistsDataValue? item) { + for (TopArtistsDataValue item in topArtists) { listArtists.add({ - 'artistName': item != null ? item.artistName : '', - 'count': item != null ? item.count : 0, + 'artistName': item.artistName, + 'count': item.count, }); - }); + } - this.topArtistsStream.keys.forEach((dateAsString) { - List<TopArtistsStreamDataValue>? items = this.topArtistsStream[dateAsString]; + for (var dateAsString in topArtistsStream.keys) { + List<TopArtistsStreamDataValue>? items = topArtistsStream[dateAsString]; List<Map<String, double>> values = []; items?.forEach((item) { values.add({ @@ -114,7 +114,7 @@ class TopArtistsData { }); }); artistsStreamMap[dateAsString] = values; - }); + } return { 'top-artists': listArtists, @@ -122,7 +122,8 @@ class TopArtistsData { }; } + @override String toString() { - return jsonEncode(this.toJson()); + return jsonEncode(toJson()); } } diff --git a/lib/models/track.dart b/lib/models/track.dart index 4630b88d7bfe0abe2ecb27205a40f12d1fddecc7..39e3d6a8d9994df8c7a4d7f342068a2fea4e4358 100644 --- a/lib/models/track.dart +++ b/lib/models/track.dart @@ -26,14 +26,15 @@ class Track { Map<String, Object?>? toJson() { return { - 'id': this.id, - 'name': this.name, - 'mbid': this.mbid, - 'artist': this.artist.toJson(), + 'id': id, + 'name': name, + 'mbid': mbid, + 'artist': artist.toJson(), }; } + @override String toString() { - return jsonEncode(this.toJson()); + return jsonEncode(toJson()); } } diff --git a/lib/network/scrobbles.dart b/lib/network/scrobbles.dart index 3e58697bf0d9651ab06cf9d8a11c57d01ad00589..3592365eaade76d0777bf7b2d6631ee582a44399 100644 --- a/lib/network/scrobbles.dart +++ b/lib/network/scrobbles.dart @@ -16,7 +16,7 @@ class ScrobblesApi { static String baseUrl = 'https://scrobble.harrault.fr'; static Future<StatisticsGlobalData> fetchGlobalStatistics() async { - final String url = baseUrl + '/stats'; + final String url = '$baseUrl/stats'; final response = await http.get(Uri.parse(url)); if (response.statusCode == 200) { @@ -27,7 +27,7 @@ class ScrobblesApi { } static Future<StatisticsRecentData> fetchRecentStatistics(int daysCount) async { - final String url = baseUrl + '/' + daysCount.toString() + '/stats'; + final String url = '$baseUrl/$daysCount/stats'; final response = await http.get(Uri.parse(url)); if (response.statusCode == 200) { @@ -38,7 +38,7 @@ class ScrobblesApi { } static Future<TimelineData> fetchTimeline(int daysCount) async { - final String url = baseUrl + '/data/' + daysCount.toString() + '/timeline'; + final String url = '$baseUrl/data/$daysCount/timeline'; final response = await http.get(Uri.parse(url)); if (response.statusCode == 200) { @@ -49,7 +49,7 @@ class ScrobblesApi { } static Future<CountsByDayData> fetchCountsByDay(int daysCount) async { - final String url = baseUrl + '/data/' + daysCount.toString() + '/counts-by-day'; + final String url = '$baseUrl/data/$daysCount/counts-by-day'; final response = await http.get(Uri.parse(url)); if (response.statusCode == 200) { @@ -60,7 +60,7 @@ class ScrobblesApi { } static Future<CountsByHourData> fetchCountsByHour(int daysCount) async { - final String url = baseUrl + '/data/' + daysCount.toString() + '/counts-by-hour'; + final String url = '$baseUrl/data/$daysCount/counts-by-hour'; final response = await http.get(Uri.parse(url)); if (response.statusCode == 200) { @@ -71,7 +71,7 @@ class ScrobblesApi { } static Future<DiscoveriesData> fetchDiscoveries(int daysCount) async { - final String url = baseUrl + '/data/' + daysCount.toString() + '/news'; + final String url = '$baseUrl/data/$daysCount/news'; final response = await http.get(Uri.parse(url)); if (response.statusCode == 200) { @@ -82,7 +82,7 @@ class ScrobblesApi { } static Future<TopArtistsData> fetchTopArtists(int daysCount) async { - final String url = baseUrl + '/data/' + daysCount.toString() + '/top-artists'; + final String url = '$baseUrl/data/$daysCount/top-artists'; final response = await http.get(Uri.parse(url)); if (response.statusCode == 200) { @@ -93,7 +93,7 @@ class ScrobblesApi { } static Future<HeatmapData> fetchHeatmap(int daysCount) async { - final String url = baseUrl + '/data/' + daysCount.toString() + '/heatmap'; + final String url = '$baseUrl/data/$daysCount/heatmap'; final response = await http.get(Uri.parse(url)); if (response.statusCode == 200) { @@ -104,7 +104,7 @@ class ScrobblesApi { } static Future<NewArtistsData> fetchNewArtists(int count) async { - final String url = baseUrl + '/data/discoveries/artists/' + count.toString(); + final String url = '$baseUrl/data/discoveries/artists/$count'; final response = await http.get(Uri.parse(url)); if (response.statusCode == 200) { @@ -115,7 +115,7 @@ class ScrobblesApi { } static Future<NewTracksData> fetchNewTracks(int count) async { - final String url = baseUrl + '/data/discoveries/tracks/' + count.toString(); + final String url = '$baseUrl/data/discoveries/tracks/$count'; final response = await http.get(Uri.parse(url)); if (response.statusCode == 200) { diff --git a/lib/ui/screens/discoveries.dart b/lib/ui/screens/discoveries.dart index c30be6637b78d07536fe9747f953f49d247644d8..550307b8f3a37ca702a034cc49e05b628d936ab5 100644 --- a/lib/ui/screens/discoveries.dart +++ b/lib/ui/screens/discoveries.dart @@ -15,19 +15,19 @@ class ScreenDiscoveries extends StatelessWidget { color: Theme.of(context).colorScheme.background, child: RefreshIndicator( onRefresh: () async { - this.notifyParent(); + notifyParent(); }, child: ListView( padding: const EdgeInsets.symmetric(horizontal: 4), physics: const BouncingScrollPhysics(), - children: <Widget>[ - const SizedBox(height: 8), - const CardDiscoveries(), - const SizedBox(height: 6), - const CardNewArtists(), - const SizedBox(height: 6), - const CardNewTracks(), - const SizedBox(height: 36), + children: const <Widget>[ + SizedBox(height: 8), + CardDiscoveries(), + SizedBox(height: 6), + CardNewArtists(), + SizedBox(height: 6), + CardNewTracks(), + SizedBox(height: 36), ], ), ), diff --git a/lib/ui/screens/home.dart b/lib/ui/screens/home.dart index 4960e2e3e2e5f67475cbc19f479b659a6aa50e8e..e943ff8ebbefe4f26626a728c1124f6b9e780f63 100644 --- a/lib/ui/screens/home.dart +++ b/lib/ui/screens/home.dart @@ -16,21 +16,21 @@ class ScreenHome extends StatelessWidget { color: Theme.of(context).colorScheme.background, child: RefreshIndicator( onRefresh: () async { - this.notifyParent(); + notifyParent(); }, child: ListView( padding: const EdgeInsets.symmetric(horizontal: 4), physics: const BouncingScrollPhysics(), - children: <Widget>[ - const SizedBox(height: 8), - const CardStatisticsGlobal(), - const SizedBox(height: 6), - const CardStatisticsRecent(), - const SizedBox(height: 6), - const CardTimeline(), - const SizedBox(height: 6), - const CardTopArtists(), - const SizedBox(height: 36), + children: const <Widget>[ + SizedBox(height: 8), + CardStatisticsGlobal(), + SizedBox(height: 6), + CardStatisticsRecent(), + SizedBox(height: 6), + CardTimeline(), + SizedBox(height: 6), + CardTopArtists(), + SizedBox(height: 36), ], ), ), diff --git a/lib/ui/screens/settings.dart b/lib/ui/screens/settings.dart index 79851e7b98a3b6e1fe7669eedbd516779a5a2a6e..736f3a5fe35aaf7ec45686b01805000e21405f37 100644 --- a/lib/ui/screens/settings.dart +++ b/lib/ui/screens/settings.dart @@ -15,9 +15,9 @@ class ScreenSettings extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 4), physics: const BouncingScrollPhysics(), children: <Widget>[ - SizedBox(height: 8), + const SizedBox(height: 8), AppTitle1(text: tr('settings_title')), - SettingsForm(), + const SettingsForm(), ], ), ); diff --git a/lib/ui/screens/statistics.dart b/lib/ui/screens/statistics.dart index 69e8a38a1502bf38166a1501de9bcb4a1246fc95..7e35f1ec9905c382d0ed789cbd42217d692f7b85 100644 --- a/lib/ui/screens/statistics.dart +++ b/lib/ui/screens/statistics.dart @@ -15,19 +15,19 @@ class ScreenStatistics extends StatelessWidget { color: Theme.of(context).colorScheme.background, child: RefreshIndicator( onRefresh: () async { - this.notifyParent(); + notifyParent(); }, child: ListView( padding: const EdgeInsets.symmetric(horizontal: 4), physics: const BouncingScrollPhysics(), - children: <Widget>[ - const SizedBox(height: 8), - const CardHeatmap(), - const SizedBox(height: 6), - const CardCountsByDay(), - const SizedBox(height: 6), - const CardCountsByHour(), - const SizedBox(height: 36), + children: const <Widget>[ + SizedBox(height: 8), + CardHeatmap(), + SizedBox(height: 6), + CardCountsByDay(), + SizedBox(height: 6), + CardCountsByHour(), + SizedBox(height: 36), ], ), ), diff --git a/lib/ui/widgets/abstracts/custom_bar_chart.dart b/lib/ui/widgets/abstracts/custom_bar_chart.dart index 9ca47dc578f4d469bd4e52d778999430a028ca6a..ebf9fe83969c21ee4d67cf1682f64d6bae1e6abd 100644 --- a/lib/ui/widgets/abstracts/custom_bar_chart.dart +++ b/lib/ui/widgets/abstracts/custom_bar_chart.dart @@ -10,7 +10,7 @@ class CustomBarChart extends CustomChart { @override Widget build(BuildContext context) { return SizedBox( - height: this.chartHeight, + height: chartHeight, ); } @@ -23,7 +23,7 @@ class CustomBarChart extends CustomChart { gridData: horizontalGridData, titlesData: getTitlesData(), barTouchData: BarTouchData(enabled: false), - maxY: getNextRoundNumber(getMaxCountsValue(), this.verticalTicksInterval), + maxY: getNextRoundNumber(getMaxCountsValue(), verticalTicksInterval), ), ); } @@ -45,7 +45,7 @@ class CustomBarChart extends CustomChart { return LinearGradient( begin: Alignment(-1, alignmentTopValue), - end: Alignment(1, 1), + end: const Alignment(1, 1), colors: <Color>[ baseColor.lighten(30), baseColor, @@ -66,7 +66,7 @@ class CustomBarChart extends CustomChart { double value = values[i]; Color barColor = barColors[i]; - final gradient = this.getGradient(barColor, value, this.getMaxCountsValue()); + final gradient = getGradient(barColor, value, getMaxCountsValue()); final borderColor = barColor.darken(20); barRods.add( @@ -75,7 +75,7 @@ class CustomBarChart extends CustomChart { color: barColor, gradient: gradient, width: barWidth, - borderRadius: BorderRadius.all(Radius.zero), + borderRadius: const BorderRadius.all(Radius.zero), borderSide: BorderSide( color: borderColor, ), @@ -89,14 +89,17 @@ class CustomBarChart extends CustomChart { ); } + @override Widget getHorizontalTitlesWidget(double value, TitleMeta meta) { return getHorizontalTitlesWidgetWithDate(value, meta); } + @override Widget getVerticalLeftTitlesWidget(double value, TitleMeta meta) { return getVerticalTitlesWidgetWithValue(value, meta); } + @override Widget getVerticalRightTitlesWidget(double value, TitleMeta meta) { return getVerticalTitlesWidgetWithValue(value, meta); } diff --git a/lib/ui/widgets/abstracts/custom_chart.dart b/lib/ui/widgets/abstracts/custom_chart.dart index 04c5425a7b576c516f28152a70595de83428b4be..dd294c49c3bff8e9b10d69b936624a2fb64382de 100644 --- a/lib/ui/widgets/abstracts/custom_chart.dart +++ b/lib/ui/widgets/abstracts/custom_chart.dart @@ -15,7 +15,7 @@ class CustomChart extends StatelessWidget { @override Widget build(BuildContext context) { return SizedBox( - height: this.chartHeight, + height: chartHeight, ); } @@ -95,7 +95,7 @@ class CustomChart extends StatelessWidget { } FlTitlesData getTitlesData() { - const AxisTitles none = const AxisTitles( + const AxisTitles none = AxisTitles( sideTitles: SideTitles(showTitles: false), ); @@ -104,7 +104,7 @@ class CustomChart extends StatelessWidget { showTitles: true, reservedSize: 35, getTitlesWidget: getVerticalLeftTitlesWidget, - interval: this.verticalTicksInterval, + interval: verticalTicksInterval, ), ); @@ -113,7 +113,7 @@ class CustomChart extends StatelessWidget { showTitles: true, reservedSize: 35, getTitlesWidget: getVerticalRightTitlesWidget, - interval: this.verticalTicksInterval, + interval: verticalTicksInterval, ), ); @@ -135,15 +135,15 @@ class CustomChart extends StatelessWidget { } Widget getHorizontalTitlesWidget(double value, TitleMeta meta) { - return Text(''); + return const Text(''); } Widget getVerticalLeftTitlesWidget(double value, TitleMeta meta) { - return Text(''); + return const Text(''); } Widget getVerticalRightTitlesWidget(double value, TitleMeta meta) { - return Text(''); + return const Text(''); } Widget getHorizontalTitlesWidgetWithDate(double value, TitleMeta meta) { @@ -156,14 +156,14 @@ class CustomChart extends StatelessWidget { axisSide: meta.axisSide, space: 4, child: Padding( - padding: EdgeInsets.only(right: 10), + padding: const EdgeInsets.only(right: 10), child: RotationTransition( - turns: new AlwaysStoppedAnimation(-30 / 360), + turns: const AlwaysStoppedAnimation(-30 / 360), child: Text( text, style: TextStyle( color: AppColors.mainTextColor1, - fontSize: this.titleFontSize, + fontSize: titleFontSize, ), ), ), @@ -201,7 +201,7 @@ class CustomChart extends StatelessWidget { text, style: TextStyle( color: AppColors.mainTextColor1, - fontSize: this.titleFontSize, + fontSize: titleFontSize, ), ), ); @@ -211,13 +211,13 @@ class CustomChart extends StatelessWidget { return SideTitleWidget( axisSide: meta.axisSide, space: 4, - child: Text(''), + child: const Text(''), ); } Widget getVerticalTitlesWidgetWithValue(double value, TitleMeta meta) { String suffix = - this.verticalAxisTitleSuffix != '' ? ' ' + this.verticalAxisTitleSuffix : ''; + verticalAxisTitleSuffix != '' ? ' $verticalAxisTitleSuffix' : ''; return SideTitleWidget( axisSide: meta.axisSide, @@ -226,7 +226,7 @@ class CustomChart extends StatelessWidget { value.toInt().toString() + suffix, style: TextStyle( color: AppColors.mainTextColor1, - fontSize: this.titleFontSize, + fontSize: titleFontSize, ), ), ); diff --git a/lib/ui/widgets/abstracts/custom_line_chart.dart b/lib/ui/widgets/abstracts/custom_line_chart.dart index 5bd3b96ddbcb333987921663d6c3c3bc673f7770..941b44472281cd6661cc6758cf32cac039a8c939 100644 --- a/lib/ui/widgets/abstracts/custom_line_chart.dart +++ b/lib/ui/widgets/abstracts/custom_line_chart.dart @@ -9,7 +9,7 @@ class CustomLineChart extends CustomChart { @override Widget build(BuildContext context) { return SizedBox( - height: this.chartHeight, + height: chartHeight, ); } @@ -17,7 +17,7 @@ class CustomLineChart extends CustomChart { double minDateAsDouble = double.maxFinite; double maxDateAsDouble = -double.maxFinite; - datesAsString.forEach((element) { + for (var element in datesAsString) { final double date = DateTime.parse(element).millisecondsSinceEpoch.toDouble(); if (date < minDateAsDouble) { @@ -26,7 +26,7 @@ class CustomLineChart extends CustomChart { if (date > maxDateAsDouble) { maxDateAsDouble = date; } - }); + } return { 'min': minDateAsDouble, @@ -34,10 +34,12 @@ class CustomLineChart extends CustomChart { }; } + @override Widget getVerticalLeftTitlesWidget(double value, TitleMeta meta) { return getVerticalTitlesWidgetWithValue(value, meta); } + @override Widget getVerticalRightTitlesWidget(double value, TitleMeta meta) { return getVerticalTitlesWidgetWithValue(value, meta); } diff --git a/lib/ui/widgets/app_bar.dart b/lib/ui/widgets/app_bar.dart index 1d9618a0ce950fe41c4e10a74f8ddc8ac1b62f54..cef615a27e52bce077d0d02ce5a0d00ce0692252 100644 --- a/lib/ui/widgets/app_bar.dart +++ b/lib/ui/widgets/app_bar.dart @@ -15,7 +15,7 @@ class StandardAppBar extends StatelessWidget implements PreferredSizeWidget { actions: [ IconButton( onPressed: () { - this.notifyParent(); + notifyParent(); }, icon: const Icon(UniconsSolid.refresh), ), diff --git a/lib/ui/widgets/card_content.dart b/lib/ui/widgets/card_content.dart index b69b7e891fe6b278cdb3fad8da187b79b1486123..0d222cebd72e957a122e9d4012ccd21be8dbb52a 100644 --- a/lib/ui/widgets/card_content.dart +++ b/lib/ui/widgets/card_content.dart @@ -20,7 +20,7 @@ class CardContent extends StatelessWidget { return Card( elevation: 2, shadowColor: Theme.of(context).colorScheme.shadow, - color: this.color, + color: color, shape: const RoundedRectangleBorder( borderRadius: BorderRadius.all( Radius.circular(8), @@ -36,12 +36,12 @@ class CardContent extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ - AppTitle1(text: this.title), - this.loader, + AppTitle1(text: title), + loader, ], ), const SizedBox(height: 8), - this.content, + content, ], ), ), diff --git a/lib/ui/widgets/cards/counts_by_day.dart b/lib/ui/widgets/cards/counts_by_day.dart index ad1c3d143e0ed89a0ca42c123002af9b1e7c2219..5ece893b43f5d5bff5a8ca7f405fad109f7d2956 100644 --- a/lib/ui/widgets/cards/counts_by_day.dart +++ b/lib/ui/widgets/cards/counts_by_day.dart @@ -38,8 +38,8 @@ class CardCountsByDay extends StatelessWidget { } Widget update(int daysCount) { - final Widget loading = const Text('â³'); - final Widget done = const Text(''); + const Widget loading = Text('â³'); + const Widget done = Text(''); late Future<CountsByDayData> future = ScrobblesApi.fetchCountsByDay(daysCount); diff --git a/lib/ui/widgets/cards/counts_by_hour.dart b/lib/ui/widgets/cards/counts_by_hour.dart index 3bfc614305a2a9cf174bb5cc9e9b79ad98bd8170..f45c0537372b058120831f0c25653663859f8279 100644 --- a/lib/ui/widgets/cards/counts_by_hour.dart +++ b/lib/ui/widgets/cards/counts_by_hour.dart @@ -38,8 +38,8 @@ class CardCountsByHour extends StatelessWidget { } Widget update(int daysCount) { - final Widget loading = const Text('â³'); - final Widget done = const Text(''); + const Widget loading = Text('â³'); + const Widget done = Text(''); late Future<CountsByHourData> future = ScrobblesApi.fetchCountsByHour(daysCount); diff --git a/lib/ui/widgets/cards/discoveries.dart b/lib/ui/widgets/cards/discoveries.dart index e136131536f67545c537c4c1e5464b043284913d..415a68f11330741d0303d87ec56dcfb22fdeded1 100644 --- a/lib/ui/widgets/cards/discoveries.dart +++ b/lib/ui/widgets/cards/discoveries.dart @@ -59,8 +59,8 @@ class CardDiscoveries extends StatelessWidget { } Widget update(int daysCount) { - final Widget loading = const Text('â³'); - final Widget done = const Text(''); + const Widget loading = Text('â³'); + const Widget done = Text(''); late Future<DiscoveriesData> future = ScrobblesApi.fetchDiscoveries(daysCount); diff --git a/lib/ui/widgets/cards/heatmap.dart b/lib/ui/widgets/cards/heatmap.dart index 485058dee9684e02dc225ba0bf0fec7b7262d251..11dc86931ad7c84156c63aa5b0763de317ee8700 100644 --- a/lib/ui/widgets/cards/heatmap.dart +++ b/lib/ui/widgets/cards/heatmap.dart @@ -38,8 +38,8 @@ class CardHeatmap extends StatelessWidget { } Widget update(int daysCount) { - final Widget loading = const Text('â³'); - final Widget done = const Text(''); + const Widget loading = Text('â³'); + const Widget done = Text(''); late Future<HeatmapData> future = ScrobblesApi.fetchHeatmap(daysCount); diff --git a/lib/ui/widgets/cards/new_artists.dart b/lib/ui/widgets/cards/new_artists.dart index 432aa83c4ccdde0d3725615477750bbe54c625fc..be377fe4ed84e4af9daf5c66140e177e5d2eab60 100644 --- a/lib/ui/widgets/cards/new_artists.dart +++ b/lib/ui/widgets/cards/new_artists.dart @@ -38,8 +38,8 @@ class CardNewArtists extends StatelessWidget { } Widget update(int count) { - final Widget loading = const Text('â³'); - final Widget done = const Text(''); + const Widget loading = Text('â³'); + const Widget done = Text(''); late Future<NewArtistsData> future = ScrobblesApi.fetchNewArtists(count); diff --git a/lib/ui/widgets/cards/new_tracks.dart b/lib/ui/widgets/cards/new_tracks.dart index fd1dff5719f4bd5b18d289868daee0cae157bb0c..4787dbfe4ca6ea8f8f46d2973da438df5c4207e4 100644 --- a/lib/ui/widgets/cards/new_tracks.dart +++ b/lib/ui/widgets/cards/new_tracks.dart @@ -28,9 +28,7 @@ class CardNewTracks extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: data.newTracks?.data - .map((newTrack) => Text((newTrack.track?.artist.name ?? '') + - ' - ' + - (newTrack.track?.name ?? ''))) + .map((newTrack) => Text('${newTrack.track?.artist.name ?? ''} - ${newTrack.track?.name ?? ''}')) .toList() ?? [], ), @@ -40,8 +38,8 @@ class CardNewTracks extends StatelessWidget { } Widget update(int count) { - final Widget loading = const Text('â³'); - final Widget done = const Text(''); + const Widget loading = Text('â³'); + const Widget done = Text(''); late Future<NewTracksData> future = ScrobblesApi.fetchNewTracks(count); diff --git a/lib/ui/widgets/cards/statistics_global.dart b/lib/ui/widgets/cards/statistics_global.dart index 2d7351d1be95c0d916f57dc93f7c51b0b7000a95..6477d3d9917ededd8b0e1a49178a9609b039e63e 100644 --- a/lib/ui/widgets/cards/statistics_global.dart +++ b/lib/ui/widgets/cards/statistics_global.dart @@ -30,8 +30,8 @@ class CardStatisticsGlobal extends StatelessWidget { } Widget update() { - final Widget loading = const Text('â³'); - final Widget done = const Text(''); + const Widget loading = Text('â³'); + const Widget done = Text(''); late Future<StatisticsGlobalData> future = ScrobblesApi.fetchGlobalStatistics(); diff --git a/lib/ui/widgets/cards/statistics_recent.dart b/lib/ui/widgets/cards/statistics_recent.dart index 044ce9191acefb6f54fd6993c86d6cabd1bdda64..1ef1aa20f3e327459e8fd011562d7ac823a852c9 100644 --- a/lib/ui/widgets/cards/statistics_recent.dart +++ b/lib/ui/widgets/cards/statistics_recent.dart @@ -39,8 +39,8 @@ class CardStatisticsRecent extends StatelessWidget { } Widget update(int daysCount) { - final Widget loading = const Text('â³'); - final Widget done = const Text(''); + const Widget loading = Text('â³'); + const Widget done = Text(''); late Future<StatisticsRecentData> future = ScrobblesApi.fetchRecentStatistics(daysCount); diff --git a/lib/ui/widgets/cards/timeline.dart b/lib/ui/widgets/cards/timeline.dart index f343b316f09591da2cfd27990c6670abd82825fa..8e551bf0544f4edba8e8f7c0d3e424cdbe40e73c 100644 --- a/lib/ui/widgets/cards/timeline.dart +++ b/lib/ui/widgets/cards/timeline.dart @@ -44,8 +44,8 @@ class CardTimeline extends StatelessWidget { } Widget update(int daysCount) { - final Widget loading = const Text('â³'); - final Widget done = const Text(''); + const Widget loading = Text('â³'); + const Widget done = Text(''); late Future<TimelineData> future = ScrobblesApi.fetchTimeline(daysCount); diff --git a/lib/ui/widgets/cards/top_artists.dart b/lib/ui/widgets/cards/top_artists.dart index ff6a5035a212f61384c940a60e95bf027a6ff537..2830bfa8c3c4903f3d12a34c87866aa9de241c3b 100644 --- a/lib/ui/widgets/cards/top_artists.dart +++ b/lib/ui/widgets/cards/top_artists.dart @@ -47,8 +47,8 @@ class CardTopArtists extends StatelessWidget { } Widget update(int daysCount) { - final Widget loading = const Text('â³'); - final Widget done = const Text(''); + const Widget loading = Text('â³'); + const Widget done = Text(''); late Future<TopArtistsData> future = ScrobblesApi.fetchTopArtists(daysCount); diff --git a/lib/ui/widgets/charts/counts_by_day.dart b/lib/ui/widgets/charts/counts_by_day.dart index b54be919b53324313c7cefb15d2370df5399fb12..ebded1d870dff751f0c7a4d35ca87e6e115e1147 100644 --- a/lib/ui/widgets/charts/counts_by_day.dart +++ b/lib/ui/widgets/charts/counts_by_day.dart @@ -9,26 +9,28 @@ class ChartCountsByDay extends CustomBarChart { const ChartCountsByDay({super.key, required this.chartData}); + @override final double verticalTicksInterval = 5; + @override final String verticalAxisTitleSuffix = '%'; @override Widget build(BuildContext context) { - if (this.chartData.data.keys.length == 0) { + if (chartData.data.keys.isEmpty) { return SizedBox( - height: this.chartHeight, + height: chartHeight, ); } - return Container( - height: this.chartHeight, + return SizedBox( + height: chartHeight, child: LayoutBuilder( builder: (context, constraints) { final double maxWidth = constraints.maxWidth; - final int barsCount = this.chartData.data.keys.length; + final int barsCount = chartData.data.keys.length; return getBarChart( - barWidth: this.getBarWidth(maxWidth, barsCount), + barWidth: getBarWidth(maxWidth, barsCount), backgroundColor: Theme.of(context).colorScheme.onSurface, ); }, @@ -36,17 +38,18 @@ class ChartCountsByDay extends CustomBarChart { ); } + @override double getMaxCountsValue() { double maxValue = 0; - this.chartData.data.keys.forEach((key) { - double? counts = this.chartData.data[key]; + for (var key in chartData.data.keys) { + double? counts = chartData.data[key]; if (counts != null) { if (counts > maxValue) { maxValue = counts; } } - }); + } return maxValue; } @@ -55,52 +58,54 @@ class ChartCountsByDay extends CustomBarChart { Color barColor = Colors.black; switch (dayIndex) { case 1: - barColor = Color.fromARGB(255, 255, 99, 132); + barColor = const Color.fromARGB(255, 255, 99, 132); break; case 2: - barColor = Color.fromARGB(255, 255, 159, 64); + barColor = const Color.fromARGB(255, 255, 159, 64); break; case 3: - barColor = Color.fromARGB(255, 255, 205, 86); + barColor = const Color.fromARGB(255, 255, 205, 86); break; case 4: - barColor = Color.fromARGB(255, 75, 192, 192); + barColor = const Color.fromARGB(255, 75, 192, 192); break; case 5: - barColor = Color.fromARGB(255, 54, 162, 235); + barColor = const Color.fromARGB(255, 54, 162, 235); break; case 6: - barColor = Color.fromARGB(255, 153, 102, 255); + barColor = const Color.fromARGB(255, 153, 102, 255); break; case 7: - barColor = Color.fromARGB(255, 201, 203, 207); + barColor = const Color.fromARGB(255, 201, 203, 207); break; default: } return barColor; } + @override List<BarChartGroupData> getDataCounts(double barWidth) { List<BarChartGroupData> data = []; - this.chartData.data.keys.forEach((day) { - final double? counts = this.chartData.data[day]; + for (var day in chartData.data.keys) { + final double? counts = chartData.data[day]; if (counts != null) { - final Color barColor = this.getColorFromDayIndex(day); + final Color barColor = getColorFromDayIndex(day); - data.add(this.getBarItem( + data.add(getBarItem( x: day, values: [counts], barColors: [barColor], barWidth: barWidth, )); } - }); + } return data; } + @override Widget getHorizontalTitlesWidget(double value, TitleMeta meta) { return getHorizontalTitlesWidgetWithDay(value, meta); } diff --git a/lib/ui/widgets/charts/counts_by_hour.dart b/lib/ui/widgets/charts/counts_by_hour.dart index 73feb7ec6f2291f4b1c81e68fa44c2411be274ce..fc423899f5902add58883cd63e441124aa007567 100644 --- a/lib/ui/widgets/charts/counts_by_hour.dart +++ b/lib/ui/widgets/charts/counts_by_hour.dart @@ -11,26 +11,28 @@ class ChartCountsByHour extends CustomBarChart { const ChartCountsByHour({super.key, required this.chartData}); + @override final double verticalTicksInterval = 5; + @override final String verticalAxisTitleSuffix = '%'; @override Widget build(BuildContext context) { - if (this.chartData.data.keys.length == 0) { + if (chartData.data.keys.isEmpty) { return SizedBox( - height: this.chartHeight, + height: chartHeight, ); } - return Container( - height: this.chartHeight, + return SizedBox( + height: chartHeight, child: LayoutBuilder( builder: (context, constraints) { final double maxWidth = constraints.maxWidth; - final int barsCount = this.chartData.data.keys.length; + final int barsCount = chartData.data.keys.length; return getBarChart( - barWidth: this.getBarWidth(maxWidth, barsCount), + barWidth: getBarWidth(maxWidth, barsCount), backgroundColor: Theme.of(context).colorScheme.onSurface, ); }, @@ -38,28 +40,30 @@ class ChartCountsByHour extends CustomBarChart { ); } + @override double getMaxCountsValue() { double maxValue = 0; - this.chartData.data.keys.forEach((key) { - double? counts = this.chartData.data[key]; + for (var key in chartData.data.keys) { + double? counts = chartData.data[key]; if (counts != null) { if (counts > maxValue) { maxValue = counts; } } - }); + } return maxValue; } + @override List<BarChartGroupData> getDataCounts(double barWidth) { List<BarChartGroupData> data = []; final barColor = AppColors.contentColorCyan.darken(30); - this.chartData.data.keys.forEach((day) { - final double? counts = this.chartData.data[day]; + for (var day in chartData.data.keys) { + final double? counts = chartData.data[day]; if (counts != null) { data.add(getBarItem( @@ -69,11 +73,12 @@ class ChartCountsByHour extends CustomBarChart { barWidth: barWidth, )); } - }); + } return data; } + @override Widget getHorizontalTitlesWidget(double value, TitleMeta meta) { return getHorizontalTitlesWidgetWithHour(value, meta); } diff --git a/lib/ui/widgets/charts/discoveries_artists.dart b/lib/ui/widgets/charts/discoveries_artists.dart index e3994f5dcf4bb107378eb3787279426947d3b169..d5c9bd315b6674d7be6e4ddb804b0e61256d412f 100644 --- a/lib/ui/widgets/charts/discoveries_artists.dart +++ b/lib/ui/widgets/charts/discoveries_artists.dart @@ -13,21 +13,21 @@ class ChartDiscoveriesArtists extends CustomBarChart { @override Widget build(BuildContext context) { - if (this.chartData.data.keys.length == 0) { + if (chartData.data.keys.isEmpty) { return SizedBox( - height: this.chartHeight, + height: chartHeight, ); } - return Container( - height: this.chartHeight, + return SizedBox( + height: chartHeight, child: LayoutBuilder( builder: (context, constraints) { final double maxWidth = constraints.maxWidth; - final int barsCount = this.chartData.data.keys.length; + final int barsCount = chartData.data.keys.length; return getBarChart( - barWidth: this.getBarWidth(maxWidth, barsCount), + barWidth: getBarWidth(maxWidth, barsCount), backgroundColor: Theme.of(context).colorScheme.onSurface, ); }, @@ -35,11 +35,12 @@ class ChartDiscoveriesArtists extends CustomBarChart { ); } + @override double getMaxCountsValue() { double maxValue = 0; - this.chartData.data.keys.forEach((key) { - DiscoveriesDataValue? value = this.chartData.data[key]; + for (var key in chartData.data.keys) { + DiscoveriesDataValue? value = chartData.data[key]; if (value != null) { double newArtistsCount = value.newArtistsCount.toDouble(); @@ -47,22 +48,23 @@ class ChartDiscoveriesArtists extends CustomBarChart { maxValue = newArtistsCount; } } - }); + } return maxValue; } + @override List<BarChartGroupData> getDataCounts(double barWidth) { List<BarChartGroupData> data = []; final newArtistsBarColor = AppColors.contentColorGreen.darken(20); - this.chartData.data.keys.forEach((key) { - DiscoveriesDataValue? value = this.chartData.data[key]; + for (var key in chartData.data.keys) { + DiscoveriesDataValue? value = chartData.data[key]; if (value != null) { final int date = DateTime.parse(key).millisecondsSinceEpoch; - data.add(this.getBarItem( + data.add(getBarItem( x: date, values: [ value.newArtistsCount.toDouble(), @@ -73,7 +75,7 @@ class ChartDiscoveriesArtists extends CustomBarChart { barWidth: barWidth, )); } - }); + } return data; } diff --git a/lib/ui/widgets/charts/discoveries_tracks.dart b/lib/ui/widgets/charts/discoveries_tracks.dart index 2436fcf07e46beea6284b87c5af6db0f70e29dae..9272e825baf60ad36daf2b77ad69bbb2a6f1c7e8 100644 --- a/lib/ui/widgets/charts/discoveries_tracks.dart +++ b/lib/ui/widgets/charts/discoveries_tracks.dart @@ -13,21 +13,21 @@ class ChartDiscoveriesTracks extends CustomBarChart { @override Widget build(BuildContext context) { - if (this.chartData.data.keys.length == 0) { + if (chartData.data.keys.isEmpty) { return SizedBox( - height: this.chartHeight, + height: chartHeight, ); } - return Container( - height: this.chartHeight, + return SizedBox( + height: chartHeight, child: LayoutBuilder( builder: (context, constraints) { final double maxWidth = constraints.maxWidth; - final int barsCount = this.chartData.data.keys.length; + final int barsCount = chartData.data.keys.length; return getBarChart( - barWidth: this.getBarWidth(maxWidth, barsCount), + barWidth: getBarWidth(maxWidth, barsCount), backgroundColor: Theme.of(context).colorScheme.onSurface, ); }, @@ -35,11 +35,12 @@ class ChartDiscoveriesTracks extends CustomBarChart { ); } + @override double getMaxCountsValue() { double maxValue = 0; - this.chartData.data.keys.forEach((key) { - DiscoveriesDataValue? value = this.chartData.data[key]; + for (var key in chartData.data.keys) { + DiscoveriesDataValue? value = chartData.data[key]; if (value != null) { double newTracksCount = value.newTracksCount.toDouble(); @@ -47,22 +48,23 @@ class ChartDiscoveriesTracks extends CustomBarChart { maxValue = newTracksCount; } } - }); + } return maxValue; } + @override List<BarChartGroupData> getDataCounts(double barWidth) { List<BarChartGroupData> data = []; final newTracksBarColor = AppColors.contentColorBlue.darken(20); - this.chartData.data.keys.forEach((key) { - DiscoveriesDataValue? value = this.chartData.data[key]; + for (var key in chartData.data.keys) { + DiscoveriesDataValue? value = chartData.data[key]; if (value != null) { final int date = DateTime.parse(key).millisecondsSinceEpoch; - data.add(this.getBarItem( + data.add(getBarItem( x: date, values: [ value.newTracksCount.toDouble(), @@ -73,7 +75,7 @@ class ChartDiscoveriesTracks extends CustomBarChart { barWidth: barWidth, )); } - }); + } return data; } diff --git a/lib/ui/widgets/charts/heatmap.dart b/lib/ui/widgets/charts/heatmap.dart index b274fc2853694c255b1c4bdf8bf5ec4189888b73..3867053c6d08049d9601da9983e1529e690f1461 100644 --- a/lib/ui/widgets/charts/heatmap.dart +++ b/lib/ui/widgets/charts/heatmap.dart @@ -5,14 +5,15 @@ import 'package:flutter/material.dart'; import 'package:scrobbles/config/app_colors.dart'; import 'package:scrobbles/models/heatmap.dart'; import 'package:scrobbles/ui/widgets/abstracts/custom_chart.dart'; -import 'package:scrobbles/utils/color_extensions.dart'; class ChartHeatmap extends CustomChart { final HeatmapData chartData; const ChartHeatmap({super.key, required this.chartData}); + @override final double chartHeight = 150.0; + @override final double titleFontSize = 9; final Color baseColor = AppColors.contentColorPink; final double scale = 8.0; @@ -20,9 +21,9 @@ class ChartHeatmap extends CustomChart { @override Widget build(BuildContext context) { - if (this.chartData.data.keys.length == 0) { + if (chartData.data.keys.isEmpty) { return SizedBox( - height: this.chartHeight, + height: chartHeight, ); } @@ -36,7 +37,7 @@ class ChartHeatmap extends CustomChart { minY: 0, maxY: 7, borderData: FlBorderData(show: false), - gridData: FlGridData(show: false), + gridData: const FlGridData(show: false), titlesData: getTitlesData(), scatterTouchData: ScatterTouchData(enabled: false), ), @@ -54,7 +55,7 @@ class ChartHeatmap extends CustomChart { int getMaxCount() { int maxValue = 0; - this.chartData.data.forEach((day, hours) { + chartData.data.forEach((day, hours) { hours.forEach((hour, count) { if (count > maxValue) { maxValue = count; @@ -70,7 +71,7 @@ class ChartHeatmap extends CustomChart { final int maxCount = getMaxCount(); - this.chartData.data.forEach((day, hours) { + chartData.data.forEach((day, hours) { hours.forEach((hour, count) { double normalizedValue = count / maxCount; @@ -89,8 +90,9 @@ class ChartHeatmap extends CustomChart { return spots; } + @override FlTitlesData getTitlesData() { - const AxisTitles none = const AxisTitles( + const AxisTitles none = AxisTitles( sideTitles: SideTitles(showTitles: false), ); @@ -121,6 +123,7 @@ class ChartHeatmap extends CustomChart { ); } + @override Widget getVerticalTitlesWidgetWithValue(double value, TitleMeta meta) { final String dayShortName = getDayShortName(8 - value.toInt()); @@ -131,7 +134,7 @@ class ChartHeatmap extends CustomChart { tr(dayShortName), style: TextStyle( color: AppColors.mainTextColor1, - fontSize: this.titleFontSize, + fontSize: titleFontSize, ), ), ); diff --git a/lib/ui/widgets/charts/timeline_counts.dart b/lib/ui/widgets/charts/timeline_counts.dart index 5d57f50d1091dec2bb994c21e4ce5d171132a9da..39fa5ac72681889951d0f2f8d1ee1d15532aff7c 100644 --- a/lib/ui/widgets/charts/timeline_counts.dart +++ b/lib/ui/widgets/charts/timeline_counts.dart @@ -10,25 +10,26 @@ class ChartTimelineCounts extends CustomBarChart { const ChartTimelineCounts({super.key, required this.chartData}); + @override final double verticalTicksInterval = 50; @override Widget build(BuildContext context) { - if (this.chartData.data.keys.length == 0) { + if (chartData.data.keys.isEmpty) { return SizedBox( - height: this.chartHeight, + height: chartHeight, ); } - return Container( - height: this.chartHeight, + return SizedBox( + height: chartHeight, child: LayoutBuilder( builder: (context, constraints) { final double maxWidth = constraints.maxWidth; - final int barsCount = this.chartData.data.keys.length; + final int barsCount = chartData.data.keys.length; return getBarChart( - barWidth: this.getBarWidth(maxWidth, barsCount), + barWidth: getBarWidth(maxWidth, barsCount), backgroundColor: Theme.of(context).colorScheme.onSurface, ); }, @@ -36,45 +37,48 @@ class ChartTimelineCounts extends CustomBarChart { ); } + @override double getMaxCountsValue() { double maxValue = 0; - this.chartData.data.keys.forEach((key) { - TimelineDataValue? value = this.chartData.data[key]; + for (var key in chartData.data.keys) { + TimelineDataValue? value = chartData.data[key]; if (value != null) { double counts = value.counts.toDouble(); if (counts > maxValue) { maxValue = counts; } } - }); + } return maxValue; } + @override List<BarChartGroupData> getDataCounts(double barWidth) { List<BarChartGroupData> data = []; - final barColor = AppColors.contentColorOrange; + const barColor = AppColors.contentColorOrange; - this.chartData.data.keys.forEach((key) { - TimelineDataValue? value = this.chartData.data[key]; + for (var key in chartData.data.keys) { + TimelineDataValue? value = chartData.data[key]; if (value != null) { final int date = DateTime.parse(key).millisecondsSinceEpoch; final double counts = value.counts.toDouble(); - data.add(this.getBarItem( + data.add(getBarItem( x: date, values: [counts], barColors: [barColor], barWidth: barWidth, )); } - }); + } return data; } + @override Widget getVerticalLeftTitlesWidget(double value, TitleMeta meta) { return getVerticalTitlesSpacerWidget(value, meta); } diff --git a/lib/ui/widgets/charts/timeline_eclecticism.dart b/lib/ui/widgets/charts/timeline_eclecticism.dart index 56f05aab19672a1d2f7fcd5e1b1093a2c8c995cb..d3c8f201a269669327dc801388bb73b84bf5f1f9 100644 --- a/lib/ui/widgets/charts/timeline_eclecticism.dart +++ b/lib/ui/widgets/charts/timeline_eclecticism.dart @@ -11,23 +11,24 @@ class ChartTimelineEclecticism extends CustomLineChart { const ChartTimelineEclecticism({super.key, required this.chartData}); + @override final String verticalAxisTitleSuffix = '%'; @override Widget build(BuildContext context) { - if (this.chartData.data.keys.length == 0) { + if (chartData.data.keys.isEmpty) { return SizedBox( - height: this.chartHeight, + height: chartHeight, ); } - final horizontalScale = getHorizontalScaleFromDates(this.chartData.data.keys); + final horizontalScale = getHorizontalScaleFromDates(chartData.data.keys); // Left/right margins: 12h, in milliseconds const double margin = 12 * 60 * 60 * 1000; - return Container( - height: this.chartHeight, + return SizedBox( + height: chartHeight, child: LineChart( LineChartData( lineBarsData: getDataEclecticism(), @@ -48,17 +49,17 @@ class ChartTimelineEclecticism extends CustomLineChart { List<LineChartBarData> getDataEclecticism() { List<FlSpot> spots = []; - this.chartData.data.keys.forEach((element) { - TimelineDataValue? value = this.chartData.data[element]; + for (var element in chartData.data.keys) { + TimelineDataValue? value = chartData.data[element]; if (value != null) { final double date = DateTime.parse(element).millisecondsSinceEpoch.toDouble(); final double eclecticism = value.eclecticism.toDouble(); spots.add(FlSpot(date, eclecticism)); } - }); + } - final baseColor = AppColors.contentColorCyan; + const baseColor = AppColors.contentColorCyan; final borderColor = baseColor.darken(20); return [ @@ -73,6 +74,7 @@ class ChartTimelineEclecticism extends CustomLineChart { ]; } + @override Widget getVerticalRightTitlesWidget(double value, TitleMeta meta) { return getVerticalTitlesSpacerWidget(value, meta); } diff --git a/lib/ui/widgets/charts/top_artists.dart b/lib/ui/widgets/charts/top_artists.dart index bf380ee804916e37b145f7698859121b30b9b77e..369be995eee4b41f7a80c0ad4b6351ed88e41f8f 100644 --- a/lib/ui/widgets/charts/top_artists.dart +++ b/lib/ui/widgets/charts/top_artists.dart @@ -54,7 +54,7 @@ class ChartTopArtists extends CustomChart { int index = 0; - this.chartData.topArtists.forEach((element) { + for (var element in chartData.topArtists) { final Color baseColor = getColorFromIndex(index++); final PieChartSectionData item = PieChartSectionData( @@ -74,7 +74,7 @@ class ChartTopArtists extends CustomChart { ); items.add(item); - }); + } return items; } @@ -85,7 +85,7 @@ class ChartTopArtists extends CustomChart { List<Widget> items = []; int index = 0; - this.chartData.topArtists.forEach((element) { + for (var element in chartData.topArtists) { final Color baseColor = getColorFromIndex(index++); final Widget item = Row( @@ -104,8 +104,8 @@ class ChartTopArtists extends CustomChart { ), const SizedBox(width: 4), Text( - element.artistName + ' (' + element.count.toString() + ')', - style: TextStyle( + '${element.artistName} (${element.count})', + style: const TextStyle( fontSize: itemSize - 2, fontWeight: FontWeight.bold, ), @@ -114,7 +114,7 @@ class ChartTopArtists extends CustomChart { ); items.add(item); - }); + } return Column( mainAxisAlignment: MainAxisAlignment.start, diff --git a/lib/ui/widgets/charts/top_artists_stream.dart b/lib/ui/widgets/charts/top_artists_stream.dart index 6a01a6268cff268c9651eb123cfcfd341b07afbe..738cc6d9b089a1fdcf73dc224ada86a3126d9e36 100644 --- a/lib/ui/widgets/charts/top_artists_stream.dart +++ b/lib/ui/widgets/charts/top_artists_stream.dart @@ -10,21 +10,23 @@ class ChartTopArtistsStream extends CustomLineChart { const ChartTopArtistsStream({super.key, required this.chartData}); + @override final double verticalTicksInterval = 10; + @override final String verticalAxisTitleSuffix = '%'; @override Widget build(BuildContext context) { - if (this.chartData.topArtistsStream.keys.isEmpty) { + if (chartData.topArtistsStream.keys.isEmpty) { return SizedBox( - height: this.chartHeight, + height: chartHeight, ); } - final horizontalScale = getHorizontalScaleFromDates(this.chartData.topArtistsStream.keys); + final horizontalScale = getHorizontalScaleFromDates(chartData.topArtistsStream.keys); - return Container( - height: this.chartHeight, + return SizedBox( + height: chartHeight, child: LineChart( LineChartData( lineBarsData: getDataStreamLine(), @@ -35,7 +37,7 @@ class ChartTopArtistsStream extends CustomLineChart { lineTouchData: const LineTouchData(enabled: false), minX: horizontalScale['min'], maxX: horizontalScale['max'], - maxY: getNextRoundNumber(getMaxVerticalValue(), this.verticalTicksInterval), + maxY: getNextRoundNumber(getMaxVerticalValue(), verticalTicksInterval), minY: 0, ), duration: const Duration(milliseconds: 250), @@ -46,27 +48,27 @@ class ChartTopArtistsStream extends CustomLineChart { double getMaxVerticalValue() { double maxValue = 0; - this.chartData.topArtistsStream.keys.forEach((dateAsString) { + for (var dateAsString in chartData.topArtistsStream.keys) { double totalValue = 0.0; final List<TopArtistsStreamDataValue> artists = - this.chartData.topArtistsStream[dateAsString] ?? []; + chartData.topArtistsStream[dateAsString] ?? []; - artists.forEach((artist) { + for (var artist in artists) { final double value = artist.value; totalValue = totalValue + value; - }); + } if (totalValue > maxValue) { maxValue = totalValue; } - }); + } return maxValue; } List<LineChartBarData> getDataStreamLine() { final int artistsCount = - this.chartData.topArtistsStream[this.chartData.topArtistsStream.keys.first]?.length ?? + chartData.topArtistsStream[chartData.topArtistsStream.keys.first]?.length ?? 0; List<LineChartBarData> lines = []; @@ -77,10 +79,10 @@ class ChartTopArtistsStream extends CustomLineChart { List<FlSpot> spots = []; - this.chartData.topArtistsStream.keys.forEach((dateAsString) { + for (var dateAsString in chartData.topArtistsStream.keys) { final double date = DateTime.parse(dateAsString).millisecondsSinceEpoch.toDouble(); spots.add(FlSpot(date, 0)); - }); + } return LineChartBarData( color: borderColor, @@ -98,11 +100,11 @@ class ChartTopArtistsStream extends CustomLineChart { List<FlSpot> spots = []; - this.chartData.topArtistsStream.keys.forEach((dateAsString) { + for (var dateAsString in chartData.topArtistsStream.keys) { final double date = DateTime.parse(dateAsString).millisecondsSinceEpoch.toDouble(); List<TopArtistsStreamDataValue> artists = - this.chartData.topArtistsStream[dateAsString] ?? []; + chartData.topArtistsStream[dateAsString] ?? []; double value = 0; for (int i = 0; i <= index; i++) { @@ -110,7 +112,7 @@ class ChartTopArtistsStream extends CustomLineChart { } spots.add(FlSpot(date, value)); - }); + } return LineChartBarData( isCurved: true, @@ -131,7 +133,7 @@ class ChartTopArtistsStream extends CustomLineChart { List<BetweenBarsData> getBetweenBarsData() { final int artistsCount = - this.chartData.topArtistsStream[this.chartData.topArtistsStream.keys.first]?.length ?? + chartData.topArtistsStream[chartData.topArtistsStream.keys.first]?.length ?? 0; return Iterable<int>.generate(artistsCount) @@ -144,6 +146,7 @@ class ChartTopArtistsStream extends CustomLineChart { .toList(); } + @override Widget getHorizontalTitlesWidget(double value, TitleMeta meta) { return getHorizontalTitlesWidgetWithDate(value, meta); } diff --git a/lib/ui/widgets/content/statistics_global.dart b/lib/ui/widgets/content/statistics_global.dart index 49c0203d3d93c8d77c1bb1b6d20dd9378b29aa6b..838e3b24b77473c48de2e74adfe9506709bb82b0 100644 --- a/lib/ui/widgets/content/statistics_global.dart +++ b/lib/ui/widgets/content/statistics_global.dart @@ -22,8 +22,8 @@ class ContentStatisticsGlobal extends StatelessWidget { style: textTheme.bodyMedium, ).tr( namedArgs: { - 'count': this.statistics.totalCount != null - ? this.statistics.totalCount.toString() + 'count': statistics.totalCount != null + ? statistics.totalCount.toString() : placeholder, }, ), @@ -32,8 +32,8 @@ class ContentStatisticsGlobal extends StatelessWidget { style: textTheme.bodyMedium, ).tr( namedArgs: { - 'datetime': this.statistics.lastScrobble != null - ? DateFormat().format(this.statistics.lastScrobble ?? DateTime.now()) + 'datetime': statistics.lastScrobble != null + ? DateFormat().format(statistics.lastScrobble ?? DateTime.now()) : placeholder, }, ), diff --git a/lib/ui/widgets/content/statistics_recent.dart b/lib/ui/widgets/content/statistics_recent.dart index f79aef9a9ed16c8c718c156ca73aab4eb695b3ac..e5a748fe8c2597acea395a3f0e7a2fe833f984d9 100644 --- a/lib/ui/widgets/content/statistics_recent.dart +++ b/lib/ui/widgets/content/statistics_recent.dart @@ -17,17 +17,17 @@ class ContentStatisticsRecent extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ Text( - (this.statistics.recentCount != null && - this.statistics.firstPlayedArtistsCount != null && - this.statistics.firstPlayedTracksCount != null) + (statistics.recentCount != null && + statistics.firstPlayedArtistsCount != null && + statistics.firstPlayedTracksCount != null) ? 'statistics_recent_scrobbles_count_and_discoveries' : '', style: textTheme.bodyMedium, ).tr( namedArgs: { - 'count': this.statistics.recentCount.toString(), - 'artistsCount': this.statistics.firstPlayedArtistsCount.toString(), - 'tracksCount': this.statistics.firstPlayedTracksCount.toString(), + 'count': statistics.recentCount.toString(), + 'artistsCount': statistics.firstPlayedArtistsCount.toString(), + 'tracksCount': statistics.firstPlayedTracksCount.toString(), }, ), ], diff --git a/lib/ui/widgets/error.dart b/lib/ui/widgets/error.dart index d09c290104cba7331606c555d8206b999d778d19..2a68880c0c45daf6272e4bb179a4743d586888a4 100644 --- a/lib/ui/widgets/error.dart +++ b/lib/ui/widgets/error.dart @@ -11,9 +11,9 @@ class ShowErrorWidget extends StatelessWidget { print(message); return Text( - 'âš ï¸ ' + tr(message), + 'âš ï¸ ${tr(message)}', textAlign: TextAlign.start, - style: TextStyle(color: Colors.red), + style: const TextStyle(color: Colors.red), ); } } diff --git a/lib/ui/widgets/settings_form.dart b/lib/ui/widgets/settings_form.dart index de09c91d03229cc7082e0bc8a7d7709419d4f915..0afaabee22c35d3a29eb7b18cab300d1889a0017 100644 --- a/lib/ui/widgets/settings_form.dart +++ b/lib/ui/widgets/settings_form.dart @@ -98,22 +98,22 @@ class _SettingsFormState extends State<SettingsForm> { crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.max, children: <Widget>[ - SizedBox(height: 8), + const SizedBox(height: 8), AppTitle2(text: tr('settings_title_global')), // Username - Text('settings_label_username').tr(), + const Text('settings_label_username').tr(), TextFormField( controller: usernameController, decoration: InputDecoration( - border: UnderlineInputBorder(), + border: const UnderlineInputBorder(), suffixIcon: ElevatedButton( style: ElevatedButton.styleFrom( - shape: new RoundedRectangleBorder( - borderRadius: new BorderRadius.circular(6.0), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(6.0), ), ), - child: Icon(UniconsLine.save), + child: const Icon(UniconsLine.save), onPressed: () { saveSettings(); }, @@ -121,7 +121,7 @@ class _SettingsFormState extends State<SettingsForm> { ), ), - SizedBox(height: 8), + const SizedBox(height: 8), AppTitle2(text: tr('settings_title_days_count')), // Statistics (recent) @@ -129,7 +129,7 @@ class _SettingsFormState extends State<SettingsForm> { mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Text('settings_label_statistics_recent_days_count').tr(), + const Text('settings_label_statistics_recent_days_count').tr(), ToggleButtons( onPressed: (int index) { setState(() { @@ -155,7 +155,7 @@ class _SettingsFormState extends State<SettingsForm> { mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Text('settings_label_timeline_days_count').tr(), + const Text('settings_label_timeline_days_count').tr(), ToggleButtons( onPressed: (int index) { setState(() { @@ -181,7 +181,7 @@ class _SettingsFormState extends State<SettingsForm> { mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Text('settings_label_top_artists_days_count').tr(), + const Text('settings_label_top_artists_days_count').tr(), ToggleButtons( onPressed: (int index) { setState(() { @@ -207,7 +207,7 @@ class _SettingsFormState extends State<SettingsForm> { mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Text('settings_label_discoveries_days_count').tr(), + const Text('settings_label_discoveries_days_count').tr(), ToggleButtons( onPressed: (int index) { setState(() { @@ -233,7 +233,7 @@ class _SettingsFormState extends State<SettingsForm> { mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Text('settings_label_distribution_days_count').tr(), + const Text('settings_label_distribution_days_count').tr(), ToggleButtons( onPressed: (int index) { setState(() { @@ -254,7 +254,7 @@ class _SettingsFormState extends State<SettingsForm> { ], ), - SizedBox(height: 8), + const SizedBox(height: 8), AppTitle2(text: tr('settings_title_counts')), // New artists count @@ -262,7 +262,7 @@ class _SettingsFormState extends State<SettingsForm> { mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Text('settings_label_new_artists_count').tr(), + const Text('settings_label_new_artists_count').tr(), ToggleButtons( onPressed: (int index) { setState(() { @@ -287,7 +287,7 @@ class _SettingsFormState extends State<SettingsForm> { mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Text('settings_label_new_tracks_count').tr(), + const Text('settings_label_new_tracks_count').tr(), ToggleButtons( onPressed: (int index) { setState(() { diff --git a/pubspec.lock b/pubspec.lock index afdb62534217d42cfb47e64e6e38018bade04df7..d63bff2106858c1dc36319a2f47808d049b704ff 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -21,10 +21,10 @@ packages: dependency: transitive description: name: bloc - sha256: "3820f15f502372d979121de1f6b97bfcf1630ebff8fe1d52fb2b0bfa49be5b49" + sha256: f53a110e3b48dcd78136c10daa5d51512443cea5e1348c9d80a320095fa2db9e url: "https://pub.dev" source: hosted - version: "8.1.2" + version: "8.1.3" characters: dependency: transitive description: @@ -61,10 +61,10 @@ packages: dependency: "direct main" description: name: easy_localization - sha256: de63e3b422adfc97f256cbb3f8cf12739b6a4993d390f3cadb3f51837afaefe5 + sha256: "9c86754b22aaa3e74e471635b25b33729f958dd6fb83df0ad6612948a7b231af" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.4" easy_logger: dependency: transitive description: @@ -85,10 +85,10 @@ packages: dependency: transitive description: name: ffi - sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.2" file: dependency: transitive description: @@ -101,10 +101,10 @@ packages: dependency: "direct main" description: name: fl_chart - sha256: fe6fec7d85975a99c73b9515a69a6e291364accfa0e4a5b3ce6de814d74b9a1c + sha256: "00b74ae680df6b1135bdbea00a7d1fc072a9180b7c3f3702e4b19a9943f5ed7d" url: "https://pub.dev" source: hosted - version: "0.66.0" + version: "0.66.2" flutter: dependency: "direct main" description: flutter @@ -114,10 +114,18 @@ packages: dependency: "direct main" description: name: flutter_bloc - sha256: e74efb89ee6945bcbce74a5b3a5a3376b088e5f21f55c263fc38cbdc6237faae + sha256: "87325da1ac757fcc4813e6b34ed5dd61169973871fdf181d6c2109dd6935ece1" url: "https://pub.dev" source: hosted - version: "8.1.3" + version: "8.1.4" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7 + url: "https://pub.dev" + source: hosted + version: "3.0.1" flutter_localizations: dependency: transitive description: flutter @@ -137,7 +145,7 @@ packages: source: sdk version: "0.0.0" hive: - dependency: transitive + dependency: "direct main" description: name: hive sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" @@ -148,10 +156,10 @@ packages: dependency: "direct main" description: name: http - sha256: d4872660c46d929f6b8a9ef4e7a7eff7e49bbf0c4ec3f385ee32df5119175139 + sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.2.1" http_parser: dependency: transitive description: @@ -164,10 +172,10 @@ packages: dependency: "direct main" description: name: hydrated_bloc - sha256: c925e49704c052a8f249226ae7603f86bfa776b910816390763b956c71d2cbaf + sha256: "00a2099680162e74b5a836b8a7f446e478520a9cae9f6032e028ad8129f4432d" url: "https://pub.dev" source: hosted - version: "9.1.3" + version: "9.1.4" intl: dependency: transitive description: @@ -184,22 +192,30 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.2" + lints: + dependency: transitive + description: + name: lints + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + url: "https://pub.dev" + source: hosted + version: "3.0.0" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.8.0" meta: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" nested: dependency: transitive description: @@ -212,18 +228,18 @@ packages: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" path_provider: dependency: "direct main" description: name: path_provider - sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa + sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" path_provider_android: dependency: transitive description: @@ -236,10 +252,10 @@ packages: dependency: transitive description: name: path_provider_foundation - sha256: "19314d595120f82aca0ba62787d58dde2cc6b5df7d2f0daf72489e38d1b57f2d" + sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" path_provider_linux: dependency: transitive description: @@ -252,10 +268,10 @@ packages: dependency: transitive description: name: path_provider_platform_interface - sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" path_provider_windows: dependency: transitive description: @@ -268,18 +284,18 @@ packages: dependency: transitive description: name: platform - sha256: "0a279f0707af40c890e80b1e9df8bb761694c074ba7e1d4ab1bc4b728e200b59" + sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec" url: "https://pub.dev" source: hosted - version: "3.1.3" + version: "3.1.4" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: f4f88d4a900933e7267e2b353594774fc0d07fb072b47eedcd5b54e1ea3269f8 + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" url: "https://pub.dev" source: hosted - version: "2.1.7" + version: "2.1.8" provider: dependency: transitive description: @@ -308,10 +324,10 @@ packages: dependency: transitive description: name: shared_preferences_foundation - sha256: "7bf53a9f2d007329ee6f3df7268fd498f8373602f943c975598bbb34649b62a7" + sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c" url: "https://pub.dev" source: hosted - version: "2.3.4" + version: "2.3.5" shared_preferences_linux: dependency: transitive description: @@ -324,18 +340,18 @@ packages: dependency: transitive description: name: shared_preferences_platform_interface - sha256: d4ec5fc9ebb2f2e056c617112aa75dcf92fc2e4faaf2ae999caa297473f75d8a + sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.3.2" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" + sha256: d762709c2bbe80626ecc819143013cc820fa49ca5e363620ee20a8b15a3e3daf url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.2.1" shared_preferences_windows: dependency: transitive description: @@ -409,26 +425,26 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: "1d9158c616048c38f712a6646e317a3426da10e884447626167240d45209cbad" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.5.0" win32: dependency: transitive description: name: win32 - sha256: b0f37db61ba2f2e9b7a78a1caece0052564d1bc70668156cf3a29d676fe4e574 + sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8" url: "https://pub.dev" source: hosted - version: "5.1.1" + version: "5.2.0" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" sdks: - dart: ">=3.2.0 <4.0.0" + dart: ">=3.3.0 <4.0.0" flutter: ">=3.16.0" diff --git a/pubspec.yaml b/pubspec.yaml index 76d2f8c12006e6f2fd439cae404a1b752c4a0e21..fcf34647c6292f58a2c907d45963df7c3c7e02ff 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: Display scrobbles data and charts publish_to: 'none' -version: 0.0.52+52 +version: 0.0.53+53 environment: sdk: '^3.0.0' @@ -16,6 +16,7 @@ dependencies: equatable: ^2.0.5 fl_chart: ^0.66.0 flutter_bloc: ^8.1.1 + hive: ^2.2.3 http: ^1.1.0 path_provider: ^2.0.11 hydrated_bloc: ^9.0.0 @@ -23,6 +24,9 @@ dependencies: unicons: ^2.1.1 flutter_swipe: ^1.0.1 +dev_dependencies: + flutter_lints: ^3.0.1 + flutter: uses-material-design: false assets: