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

Merge branch '60-use-flutter-linter-and-apply-lints' into 'master'

Resolve "Use flutter linter and apply lints"

Closes #60

See merge request !56
parents fadd6108 bec180f9
No related branches found
No related tags found
1 merge request!56Resolve "Use flutter linter and apply lints"
Pipeline #5120 passed
Showing
with 105 additions and 90 deletions
include: package:flutter_lints/flutter.yaml
org.gradle.jvmargs=-Xmx1536M org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
app.versionName=0.0.52 app.versionName=0.0.53
app.versionCode=52 app.versionCode=53
Add automatic flutter linter. Apply code lints. Update dependencies.
Ajout d'un correcteur automatique de code. Application des corrections. Mise à jour des dépendances.
...@@ -21,13 +21,14 @@ class Artist { ...@@ -21,13 +21,14 @@ class Artist {
Map<String, Object?>? toJson() { Map<String, Object?>? toJson() {
return { return {
'id': this.id, 'id': id,
'name': this.name, 'name': name,
'mbid': this.mbid, 'mbid': mbid,
}; };
} }
@override
String toString() { String toString() {
return jsonEncode(this.toJson()); return jsonEncode(toJson());
} }
} }
...@@ -22,15 +22,16 @@ class CountsByDayData { ...@@ -22,15 +22,16 @@ class CountsByDayData {
Map<String, Object?>? toJson() { Map<String, Object?>? toJson() {
Map<String, double> map = {}; Map<String, double> map = {};
this.data.keys.forEach((day) { for (var day in data.keys) {
double? value = this.data[day]; double? value = data[day];
map[day.toString()] = value != null ? value.toDouble() : 0.0; map[day.toString()] = value != null ? value.toDouble() : 0.0;
}); }
return {'counts-by-day': map}; return {'counts-by-day': map};
} }
@override
String toString() { String toString() {
return jsonEncode(this.toJson()); return jsonEncode(toJson());
} }
} }
...@@ -24,15 +24,16 @@ class CountsByHourData { ...@@ -24,15 +24,16 @@ class CountsByHourData {
Map<String, Object?>? toJson() { Map<String, Object?>? toJson() {
Map<String, double> map = {}; Map<String, double> map = {};
this.data.keys.forEach((day) { for (var day in data.keys) {
double? value = this.data[day]; double? value = data[day];
map[day.toString()] = value != null ? value.toDouble() : 0.0; map[day.toString()] = value != null ? value.toDouble() : 0.0;
}); }
return {'counts-by-hour': map}; return {'counts-by-hour': map};
} }
@override
String toString() { String toString() {
return jsonEncode(this.toJson()); return jsonEncode(toJson());
} }
} }
...@@ -39,18 +39,19 @@ class DiscoveriesData { ...@@ -39,18 +39,19 @@ class DiscoveriesData {
Map<String, Object?>? toJson() { Map<String, Object?>? toJson() {
Map<String, Map<String, int>> map = {}; Map<String, Map<String, int>> map = {};
this.data.keys.forEach((element) { for (var element in data.keys) {
DiscoveriesDataValue? item = this.data[element]; DiscoveriesDataValue? item = data[element];
map[element] = { map[element] = {
'new-artists': item != null ? item.newArtistsCount : 0, 'new-artists': item != null ? item.newArtistsCount : 0,
'new-tracks': item != null ? item.newTracksCount : 0, 'new-tracks': item != null ? item.newTracksCount : 0,
}; };
}); }
return map; return map;
} }
@override
String toString() { String toString() {
return jsonEncode(this.toJson()); return jsonEncode(toJson());
} }
} }
...@@ -15,9 +15,9 @@ class HeatmapData { ...@@ -15,9 +15,9 @@ class HeatmapData {
Map<String, dynamic> rawDataForThisDay = json['heatmap'][day]; Map<String, dynamic> rawDataForThisDay = json['heatmap'][day];
Map<int, int> dataForThisDay = {}; Map<int, int> dataForThisDay = {};
rawDataForThisDay.keys.forEach((hour) { for (var hour in rawDataForThisDay.keys) {
dataForThisDay[int.parse(hour)] = int.parse(rawDataForThisDay[hour].toString()); dataForThisDay[int.parse(hour)] = int.parse(rawDataForThisDay[hour].toString());
}); }
data[int.parse(day)] = dataForThisDay; data[int.parse(day)] = dataForThisDay;
}); });
...@@ -29,18 +29,19 @@ class HeatmapData { ...@@ -29,18 +29,19 @@ class HeatmapData {
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
Map<String, Map<String, int>> map = {}; Map<String, Map<String, int>> map = {};
this.data.keys.forEach((day) { for (var day in data.keys) {
Map<String, int> dayMap = {}; Map<String, int> dayMap = {};
this.data[day]?.forEach((hour, count) { data[day]?.forEach((hour, count) {
dayMap[hour.toString()] = count; dayMap[hour.toString()] = count;
}); });
map[day.toString()] = dayMap; map[day.toString()] = dayMap;
}); }
return {'heatmap': map}; return {'heatmap': map};
} }
@override
String toString() { String toString() {
return jsonEncode(this.toJson()); return jsonEncode(toJson());
} }
} }
...@@ -43,19 +43,20 @@ class NewArtistsData { ...@@ -43,19 +43,20 @@ class NewArtistsData {
List<Map<String, dynamic>> toJson() { List<Map<String, dynamic>> toJson() {
List<Map<String, dynamic>> list = []; List<Map<String, dynamic>> list = [];
this.data.forEach((item) { for (var item in data) {
list.add({ list.add({
'firstPlayed': { 'firstPlayed': {
'date': item.firstPlayed != null ? item.firstPlayed.toString() : null, 'date': item.firstPlayed?.toString(),
}, },
'artist': item.artist?.toJson(), 'artist': item.artist?.toJson(),
}); });
}); }
return list; return list;
} }
@override
String toString() { String toString() {
return jsonEncode(this.toJson()); return jsonEncode(toJson());
} }
} }
...@@ -43,19 +43,20 @@ class NewTracksData { ...@@ -43,19 +43,20 @@ class NewTracksData {
List<Map<String, dynamic>> toJson() { List<Map<String, dynamic>> toJson() {
List<Map<String, dynamic>> list = []; List<Map<String, dynamic>> list = [];
this.data.forEach((item) { for (var item in data) {
list.add({ list.add({
'firstPlayed': { 'firstPlayed': {
'date': item.firstPlayed != null ? item.firstPlayed.toString() : null, 'date': item.firstPlayed?.toString(),
}, },
'track': item.track?.toJson(), 'track': item.track?.toJson(),
}); });
}); }
return list; return list;
} }
@override
String toString() { String toString() {
return jsonEncode(this.toJson()); return jsonEncode(toJson());
} }
} }
...@@ -22,14 +22,15 @@ class StatisticsGlobalData { ...@@ -22,14 +22,15 @@ class StatisticsGlobalData {
Map<String, Object?>? toJson() { Map<String, Object?>? toJson() {
return <String, Object?>{ return <String, Object?>{
'totalCount': this.totalCount, 'totalCount': totalCount,
'lastScrobble': { 'lastScrobble': {
'date': this.lastScrobble != null ? this.lastScrobble.toString() : null, 'date': lastScrobble?.toString(),
}, },
}; };
} }
@override
String toString() { String toString() {
return jsonEncode(this.toJson()); return jsonEncode(toJson());
} }
} }
...@@ -29,14 +29,15 @@ class StatisticsRecentData { ...@@ -29,14 +29,15 @@ class StatisticsRecentData {
Map<String, Object?>? toJson() { Map<String, Object?>? toJson() {
return <String, Object?>{ return <String, Object?>{
'recentCount': this.recentCount, 'recentCount': recentCount,
'firstPlayedArtistsCount': this.firstPlayedArtistsCount, 'firstPlayedArtistsCount': firstPlayedArtistsCount,
'firstPlayedTracksCount': this.firstPlayedTracksCount, 'firstPlayedTracksCount': firstPlayedTracksCount,
'selectedPeriod': this.selectedPeriod, 'selectedPeriod': selectedPeriod,
}; };
} }
@override
String toString() { String toString() {
return jsonEncode(this.toJson()); return jsonEncode(toJson());
} }
} }
...@@ -39,18 +39,19 @@ class TimelineData { ...@@ -39,18 +39,19 @@ class TimelineData {
Map<String, Object?>? toJson() { Map<String, Object?>? toJson() {
Map<String, Map<String, int>> map = {}; Map<String, Map<String, int>> map = {};
this.data.keys.forEach((element) { for (var element in data.keys) {
TimelineDataValue? item = this.data[element]; TimelineDataValue? item = data[element];
map[element] = { map[element] = {
'counts': item != null ? item.counts : 0, 'counts': item != null ? item.counts : 0,
'eclecticism': item != null ? item.eclecticism : 0, 'eclecticism': item != null ? item.eclecticism : 0,
}; };
}); }
return map; return map;
} }
@override
String toString() { String toString() {
return jsonEncode(this.toJson()); return jsonEncode(toJson());
} }
} }
...@@ -38,7 +38,7 @@ class TopArtistsStreamDataValue { ...@@ -38,7 +38,7 @@ class TopArtistsStreamDataValue {
@override @override
String toString() { String toString() {
return jsonEncode(this.toJson()); return jsonEncode(toJson());
} }
} }
...@@ -98,15 +98,15 @@ class TopArtistsData { ...@@ -98,15 +98,15 @@ class TopArtistsData {
List<Map<String, Object>> listArtists = []; List<Map<String, Object>> listArtists = [];
Map<String, List<Map<String, double>>> artistsStreamMap = {}; Map<String, List<Map<String, double>>> artistsStreamMap = {};
this.topArtists.forEach((TopArtistsDataValue? item) { for (TopArtistsDataValue item in topArtists) {
listArtists.add({ listArtists.add({
'artistName': item != null ? item.artistName : '', 'artistName': item.artistName,
'count': item != null ? item.count : 0, 'count': item.count,
}); });
}); }
this.topArtistsStream.keys.forEach((dateAsString) { for (var dateAsString in topArtistsStream.keys) {
List<TopArtistsStreamDataValue>? items = this.topArtistsStream[dateAsString]; List<TopArtistsStreamDataValue>? items = topArtistsStream[dateAsString];
List<Map<String, double>> values = []; List<Map<String, double>> values = [];
items?.forEach((item) { items?.forEach((item) {
values.add({ values.add({
...@@ -114,7 +114,7 @@ class TopArtistsData { ...@@ -114,7 +114,7 @@ class TopArtistsData {
}); });
}); });
artistsStreamMap[dateAsString] = values; artistsStreamMap[dateAsString] = values;
}); }
return { return {
'top-artists': listArtists, 'top-artists': listArtists,
...@@ -122,7 +122,8 @@ class TopArtistsData { ...@@ -122,7 +122,8 @@ class TopArtistsData {
}; };
} }
@override
String toString() { String toString() {
return jsonEncode(this.toJson()); return jsonEncode(toJson());
} }
} }
...@@ -26,14 +26,15 @@ class Track { ...@@ -26,14 +26,15 @@ class Track {
Map<String, Object?>? toJson() { Map<String, Object?>? toJson() {
return { return {
'id': this.id, 'id': id,
'name': this.name, 'name': name,
'mbid': this.mbid, 'mbid': mbid,
'artist': this.artist.toJson(), 'artist': artist.toJson(),
}; };
} }
@override
String toString() { String toString() {
return jsonEncode(this.toJson()); return jsonEncode(toJson());
} }
} }
...@@ -16,7 +16,7 @@ class ScrobblesApi { ...@@ -16,7 +16,7 @@ class ScrobblesApi {
static String baseUrl = 'https://scrobble.harrault.fr'; static String baseUrl = 'https://scrobble.harrault.fr';
static Future<StatisticsGlobalData> fetchGlobalStatistics() async { static Future<StatisticsGlobalData> fetchGlobalStatistics() async {
final String url = baseUrl + '/stats'; final String url = '$baseUrl/stats';
final response = await http.get(Uri.parse(url)); final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) { if (response.statusCode == 200) {
...@@ -27,7 +27,7 @@ class ScrobblesApi { ...@@ -27,7 +27,7 @@ class ScrobblesApi {
} }
static Future<StatisticsRecentData> fetchRecentStatistics(int daysCount) async { 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)); final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) { if (response.statusCode == 200) {
...@@ -38,7 +38,7 @@ class ScrobblesApi { ...@@ -38,7 +38,7 @@ class ScrobblesApi {
} }
static Future<TimelineData> fetchTimeline(int daysCount) async { 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)); final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) { if (response.statusCode == 200) {
...@@ -49,7 +49,7 @@ class ScrobblesApi { ...@@ -49,7 +49,7 @@ class ScrobblesApi {
} }
static Future<CountsByDayData> fetchCountsByDay(int daysCount) async { 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)); final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) { if (response.statusCode == 200) {
...@@ -60,7 +60,7 @@ class ScrobblesApi { ...@@ -60,7 +60,7 @@ class ScrobblesApi {
} }
static Future<CountsByHourData> fetchCountsByHour(int daysCount) async { 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)); final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) { if (response.statusCode == 200) {
...@@ -71,7 +71,7 @@ class ScrobblesApi { ...@@ -71,7 +71,7 @@ class ScrobblesApi {
} }
static Future<DiscoveriesData> fetchDiscoveries(int daysCount) async { 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)); final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) { if (response.statusCode == 200) {
...@@ -82,7 +82,7 @@ class ScrobblesApi { ...@@ -82,7 +82,7 @@ class ScrobblesApi {
} }
static Future<TopArtistsData> fetchTopArtists(int daysCount) async { 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)); final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) { if (response.statusCode == 200) {
...@@ -93,7 +93,7 @@ class ScrobblesApi { ...@@ -93,7 +93,7 @@ class ScrobblesApi {
} }
static Future<HeatmapData> fetchHeatmap(int daysCount) async { 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)); final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) { if (response.statusCode == 200) {
...@@ -104,7 +104,7 @@ class ScrobblesApi { ...@@ -104,7 +104,7 @@ class ScrobblesApi {
} }
static Future<NewArtistsData> fetchNewArtists(int count) async { 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)); final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) { if (response.statusCode == 200) {
...@@ -115,7 +115,7 @@ class ScrobblesApi { ...@@ -115,7 +115,7 @@ class ScrobblesApi {
} }
static Future<NewTracksData> fetchNewTracks(int count) async { 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)); final response = await http.get(Uri.parse(url));
if (response.statusCode == 200) { if (response.statusCode == 200) {
......
...@@ -15,19 +15,19 @@ class ScreenDiscoveries extends StatelessWidget { ...@@ -15,19 +15,19 @@ class ScreenDiscoveries extends StatelessWidget {
color: Theme.of(context).colorScheme.background, color: Theme.of(context).colorScheme.background,
child: RefreshIndicator( child: RefreshIndicator(
onRefresh: () async { onRefresh: () async {
this.notifyParent(); notifyParent();
}, },
child: ListView( child: ListView(
padding: const EdgeInsets.symmetric(horizontal: 4), padding: const EdgeInsets.symmetric(horizontal: 4),
physics: const BouncingScrollPhysics(), physics: const BouncingScrollPhysics(),
children: <Widget>[ children: const <Widget>[
const SizedBox(height: 8), SizedBox(height: 8),
const CardDiscoveries(), CardDiscoveries(),
const SizedBox(height: 6), SizedBox(height: 6),
const CardNewArtists(), CardNewArtists(),
const SizedBox(height: 6), SizedBox(height: 6),
const CardNewTracks(), CardNewTracks(),
const SizedBox(height: 36), SizedBox(height: 36),
], ],
), ),
), ),
......
...@@ -16,21 +16,21 @@ class ScreenHome extends StatelessWidget { ...@@ -16,21 +16,21 @@ class ScreenHome extends StatelessWidget {
color: Theme.of(context).colorScheme.background, color: Theme.of(context).colorScheme.background,
child: RefreshIndicator( child: RefreshIndicator(
onRefresh: () async { onRefresh: () async {
this.notifyParent(); notifyParent();
}, },
child: ListView( child: ListView(
padding: const EdgeInsets.symmetric(horizontal: 4), padding: const EdgeInsets.symmetric(horizontal: 4),
physics: const BouncingScrollPhysics(), physics: const BouncingScrollPhysics(),
children: <Widget>[ children: const <Widget>[
const SizedBox(height: 8), SizedBox(height: 8),
const CardStatisticsGlobal(), CardStatisticsGlobal(),
const SizedBox(height: 6), SizedBox(height: 6),
const CardStatisticsRecent(), CardStatisticsRecent(),
const SizedBox(height: 6), SizedBox(height: 6),
const CardTimeline(), CardTimeline(),
const SizedBox(height: 6), SizedBox(height: 6),
const CardTopArtists(), CardTopArtists(),
const SizedBox(height: 36), SizedBox(height: 36),
], ],
), ),
), ),
......
...@@ -15,9 +15,9 @@ class ScreenSettings extends StatelessWidget { ...@@ -15,9 +15,9 @@ class ScreenSettings extends StatelessWidget {
padding: const EdgeInsets.symmetric(horizontal: 4), padding: const EdgeInsets.symmetric(horizontal: 4),
physics: const BouncingScrollPhysics(), physics: const BouncingScrollPhysics(),
children: <Widget>[ children: <Widget>[
SizedBox(height: 8), const SizedBox(height: 8),
AppTitle1(text: tr('settings_title')), AppTitle1(text: tr('settings_title')),
SettingsForm(), const SettingsForm(),
], ],
), ),
); );
......
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