diff --git a/android/gradle.properties b/android/gradle.properties index 85b94f88ee157e1d1b3cec184c8948902443d36f..65eed6426393974efb5a056ec44936d42b5ef2a1 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.7 -app.versionCode=7 +app.versionName=0.0.8 +app.versionCode=8 diff --git a/fastlane/metadata/android/en-US/changelogs/8.txt b/fastlane/metadata/android/en-US/changelogs/8.txt new file mode 100644 index 0000000000000000000000000000000000000000..4d05e815c3f2252825ef65af0c961519856ebd99 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/8.txt @@ -0,0 +1 @@ +Add eclecticism chart. diff --git a/fastlane/metadata/android/fr-FR/changelogs/8.txt b/fastlane/metadata/android/fr-FR/changelogs/8.txt new file mode 100644 index 0000000000000000000000000000000000000000..e022350bec44fc50243d3150cf17c780c091d6a4 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/8.txt @@ -0,0 +1 @@ +Ajout du graphique de mesure d'éclectisme musical. diff --git a/lib/ui/widgets/main_screen/timeline_chart_eclecticism.dart b/lib/ui/widgets/main_screen/timeline_chart_eclecticism.dart new file mode 100644 index 0000000000000000000000000000000000000000..64598bb854c3eb6bfc6d3d55fec6030c78ddd8ec --- /dev/null +++ b/lib/ui/widgets/main_screen/timeline_chart_eclecticism.dart @@ -0,0 +1,164 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:fl_chart/fl_chart.dart'; + +import '../../../config/app_colors.dart'; +import '../../../models/timeline.dart'; + +class ChartTimelineEclecticism extends StatelessWidget { + final TimelineData chartData; + + const ChartTimelineEclecticism({super.key, required this.chartData}); + + @override + Widget build(BuildContext context) { + return Container( + height: 100.0, + child: LineChart( + LineChartData( + lineBarsData: getDataEclecticism(), + backgroundColor: Theme.of(context).colorScheme.onBackground, + borderData: getBorderData(), + gridData: getGridData(), + titlesData: getTitlesData(), + lineTouchData: getLineTouchDataEclecticism(), + maxY: 100, + minY: 0, + ), + duration: const Duration(milliseconds: 250), + ), + ); + } + + List<LineChartBarData> getDataEclecticism() { + List<FlSpot> spots = []; + + this.chartData.data.keys.forEach((element) { + TimelineDataValue? value = this.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)); + } + }); + + return [ + LineChartBarData( + isCurved: true, + color: AppColors.contentColorCyan, + barWidth: 3, + isStrokeCapRound: false, + dotData: const FlDotData(show: false), + belowBarData: BarAreaData(show: true), + spots: spots, + ), + ]; + } + + FlBorderData getBorderData() { + return FlBorderData( + show: true, + border: Border.all( + color: AppColors.borderColor, + width: 2, + ), + ); + } + + FlGridData getGridData() { + return const FlGridData( + show: true, + ); + } + + FlTitlesData getTitlesData() { + const AxisTitles none = const AxisTitles( + sideTitles: SideTitles(showTitles: false), + ); + + final AxisTitles verticalTitles = AxisTitles( + sideTitles: SideTitles( + showTitles: true, + reservedSize: 30, + getTitlesWidget: getVerticalTitlesWidget, + interval: 25, + ), + ); + final AxisTitles horizontalTitles = AxisTitles( + sideTitles: SideTitles( + showTitles: true, + reservedSize: 20, + getTitlesWidget: getHorizontalTitlesWidget, + ), + ); + + return FlTitlesData( + show: true, + bottomTitles: horizontalTitles, + leftTitles: none, + topTitles: none, + rightTitles: verticalTitles, + ); + } + + Widget getVerticalTitlesWidget(double value, TitleMeta meta) { + return SideTitleWidget( + axisSide: meta.axisSide, + space: 4, + child: Text( + value.toInt().toString(), + style: const TextStyle( + color: AppColors.mainTextColor1, + fontSize: 12, + ), + ), + ); + } + + Widget getHorizontalTitlesWidget(double value, TitleMeta meta) { + final DateFormat formatter = DateFormat('dd/MM'); + + final DateTime date = DateTime.fromMillisecondsSinceEpoch(value.toInt()); + final String text = formatter.format(date); + + return SideTitleWidget( + axisSide: meta.axisSide, + space: 4, + child: RotationTransition( + turns: new AlwaysStoppedAnimation(-30 / 360), + child: Text( + text, + style: const TextStyle( + color: AppColors.mainTextColor1, + fontSize: 11, + ), + ), + ), + ); + } + + LineTouchData getLineTouchDataEclecticism() { + return LineTouchData( + handleBuiltInTouches: true, + touchTooltipData: LineTouchTooltipData( + tooltipBgColor: Colors.transparent, + tooltipPadding: EdgeInsets.all(8), + tooltipMargin: 2, + getTooltipItems: (List<LineBarSpot> touchedSpots) { + return touchedSpots.map((LineBarSpot touchedSpot) { + final textStyle = TextStyle( + color: AppColors.mainTextColor2, + fontWeight: FontWeight.bold, + fontSize: 10, + ); + return LineTooltipItem( + touchedSpot.y.toString(), + textStyle, + ); + }).toList(); + }, + ), + ); + } +} diff --git a/lib/ui/widgets/main_screen/timeline_content.dart b/lib/ui/widgets/main_screen/timeline_content.dart index 747a752ae9c2d1fa7f645ddb415887c13ffe6c6b..f460cdf31dc349d7b9292a0fb7a0895e40f3c40c 100644 --- a/lib/ui/widgets/main_screen/timeline_content.dart +++ b/lib/ui/widgets/main_screen/timeline_content.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import '../../../models/timeline.dart'; import 'timeline_chart_counts.dart'; +import 'timeline_chart_eclecticism.dart'; class ChartTimelineCardContent extends StatelessWidget { final int daysCount; @@ -41,6 +42,10 @@ class ChartTimelineCardContent extends StatelessWidget { ChartTimelineCounts( chartData: TimelineData.fromJson(jsonDecode(this.chartData.toString())), ), + const SizedBox(height: 8), + ChartTimelineEclecticism( + chartData: TimelineData.fromJson(jsonDecode(this.chartData.toString())), + ), ], ), ], diff --git a/pubspec.yaml b/pubspec.yaml index 2439c6dec5fed740a8901704764de77dda3cfe25..6c0ad2f9fcc2c5df64d1146e5af5ab0314a85566 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: Display scrobbles data and charts publish_to: 'none' -version: 0.0.7+7 +version: 0.0.8+8 environment: sdk: '^3.0.0'