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

Add light/dart theme setting

parent 787c4b1d
No related branches found
No related tags found
1 merge request!60Resolve "Add light/dark theme selector"
Pipeline #5469 passed
Showing
with 103 additions and 53 deletions
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
app.versionName=0.0.56
app.versionCode=56
app.versionName=0.0.57
app.versionCode=57
......@@ -28,6 +28,7 @@
"top_artists_title": "Top artists ({daysCount} days)",
"settings_title": "Settings",
"settings_label_theme": "Theme mode",
"settings_title_global": "Global:",
"settings_label_username": "Username: ",
"settings_label_security_token": "Security token: ",
......
......@@ -28,6 +28,7 @@
"top_artists_title": "Top artistes ({daysCount} jours)",
"settings_title": "Paramètres",
"settings_label_theme": "Thème de couleurs",
"settings_title_global": "Généraux :",
"settings_label_username": "Utilisateur : ",
"settings_label_security_token": "Jeton de sécurité : ",
......
Add light/dark theme setting.
Ajout d'un réglage de thème clair/sombre.
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';
part 'theme_state.dart';
class ThemeCubit extends HydratedCubit<ThemeModeState> {
ThemeCubit() : super(const ThemeModeState());
void getTheme(ThemeModeState state) {
emit(state);
}
@override
ThemeModeState? fromJson(Map<String, dynamic> json) {
switch (json['themeMode']) {
case 'ThemeMode.dark':
return const ThemeModeState(themeMode: ThemeMode.dark);
case 'ThemeMode.light':
return const ThemeModeState(themeMode: ThemeMode.light);
case 'ThemeMode.system':
default:
return const ThemeModeState(themeMode: ThemeMode.system);
}
}
@override
Map<String, String>? toJson(ThemeModeState state) {
return <String, String>{'themeMode': state.themeMode.toString()};
}
}
part of 'theme_cubit.dart';
@immutable
class ThemeModeState extends Equatable {
const ThemeModeState({
this.themeMode,
});
final ThemeMode? themeMode;
@override
List<Object?> get props => <Object?>[
themeMode,
];
}
......@@ -20,6 +20,7 @@ import 'package:scrobbles/cubit/data_statistics_recent_cubit.dart';
import 'package:scrobbles/cubit/data_timeline_cubit.dart';
import 'package:scrobbles/cubit/data_top_artists_cubit.dart';
import 'package:scrobbles/cubit/settings_cubit.dart';
import 'package:scrobbles/cubit/theme_cubit.dart';
import 'package:scrobbles/ui/skeleton.dart';
void main() async {
......@@ -67,18 +68,26 @@ class MyApp extends StatelessWidget {
create: (context) => DataStatisticsRecentCubit()),
BlocProvider<DataTimelineCubit>(create: (context) => DataTimelineCubit()),
BlocProvider<DataTopArtistsCubit>(create: (context) => DataTopArtistsCubit()),
BlocProvider<ThemeCubit>(create: (context) => ThemeCubit()),
],
child: MaterialApp(
child: BlocBuilder<ThemeCubit, ThemeModeState>(
builder: (BuildContext context, ThemeModeState state) {
return MaterialApp(
title: 'Scrobbles',
theme: appTheme,
home: const SkeletonScreen(),
// Theme stuff
theme: lightTheme,
darkTheme: darkTheme,
themeMode: state.themeMode,
// Localization stuff
localizationsDelegates: context.localizationDelegates,
supportedLocales: context.supportedLocales,
locale: context.locale,
debugShowCheckedModeBanner: false,
),
);
}),
);
}
}
......@@ -162,7 +162,7 @@ class CustomChart extends StatelessWidget {
child: Text(
text,
style: TextStyle(
color: AppColors.mainTextColor1,
// color: getTextColor(),
fontSize: titleFontSize,
),
),
......@@ -180,7 +180,6 @@ class CustomChart extends StatelessWidget {
child: Text(
tr(dayShortName),
style: const TextStyle(
color: AppColors.mainTextColor1,
fontSize: 11,
),
),
......@@ -200,7 +199,6 @@ class CustomChart extends StatelessWidget {
child: Text(
text,
style: TextStyle(
color: AppColors.mainTextColor1,
fontSize: titleFontSize,
),
),
......@@ -224,7 +222,6 @@ class CustomChart extends StatelessWidget {
child: Text(
value.toInt().toString() + suffix,
style: TextStyle(
color: AppColors.mainTextColor1,
fontSize: titleFontSize,
),
),
......
......@@ -5,10 +5,10 @@ import 'package:scrobbles/models/counts_by_day.dart';
import 'package:scrobbles/ui/widgets/abstracts/custom_bar_chart.dart';
class ChartCountsByDay extends CustomBarChart {
final CountsByDayData chartData;
const ChartCountsByDay({super.key, required this.chartData});
final CountsByDayData chartData;
@override
final double verticalTicksInterval = 5;
@override
......@@ -31,7 +31,7 @@ class ChartCountsByDay extends CustomBarChart {
return getBarChart(
barWidth: getBarWidth(maxWidth, barsCount),
backgroundColor: Theme.of(context).colorScheme.onSurface,
backgroundColor: Theme.of(context).colorScheme.background,
);
},
),
......
......@@ -7,10 +7,10 @@ import 'package:scrobbles/ui/widgets/abstracts/custom_bar_chart.dart';
import 'package:scrobbles/utils/color_extensions.dart';
class ChartCountsByHour extends CustomBarChart {
final CountsByHourData chartData;
const ChartCountsByHour({super.key, required this.chartData});
final CountsByHourData chartData;
@override
final double verticalTicksInterval = 5;
@override
......@@ -33,7 +33,7 @@ class ChartCountsByHour extends CustomBarChart {
return getBarChart(
barWidth: getBarWidth(maxWidth, barsCount),
backgroundColor: Theme.of(context).colorScheme.onSurface,
backgroundColor: Theme.of(context).colorScheme.background,
);
},
),
......
......@@ -7,10 +7,10 @@ import 'package:scrobbles/ui/widgets/abstracts/custom_bar_chart.dart';
import 'package:scrobbles/utils/color_extensions.dart';
class ChartDiscoveriesArtists extends CustomBarChart {
final DiscoveriesData chartData;
const ChartDiscoveriesArtists({super.key, required this.chartData});
final DiscoveriesData chartData;
@override
Widget build(BuildContext context) {
if (chartData.data.keys.isEmpty) {
......@@ -28,7 +28,7 @@ class ChartDiscoveriesArtists extends CustomBarChart {
return getBarChart(
barWidth: getBarWidth(maxWidth, barsCount),
backgroundColor: Theme.of(context).colorScheme.onSurface,
backgroundColor: Theme.of(context).colorScheme.background,
);
},
),
......
......@@ -7,10 +7,10 @@ import 'package:scrobbles/ui/widgets/abstracts/custom_bar_chart.dart';
import 'package:scrobbles/utils/color_extensions.dart';
class ChartDiscoveriesTracks extends CustomBarChart {
final DiscoveriesData chartData;
const ChartDiscoveriesTracks({super.key, required this.chartData});
final DiscoveriesData chartData;
@override
Widget build(BuildContext context) {
if (chartData.data.keys.isEmpty) {
......@@ -28,7 +28,7 @@ class ChartDiscoveriesTracks extends CustomBarChart {
return getBarChart(
barWidth: getBarWidth(maxWidth, barsCount),
backgroundColor: Theme.of(context).colorScheme.onSurface,
backgroundColor: Theme.of(context).colorScheme.background,
);
},
),
......
......@@ -7,10 +7,10 @@ import 'package:scrobbles/models/heatmap.dart';
import 'package:scrobbles/ui/widgets/abstracts/custom_chart.dart';
class ChartHeatmap extends CustomChart {
final HeatmapData chartData;
const ChartHeatmap({super.key, required this.chartData});
final HeatmapData chartData;
@override
final double chartHeight = 150.0;
@override
......@@ -133,7 +133,6 @@ class ChartHeatmap extends CustomChart {
child: Text(
tr(dayShortName),
style: TextStyle(
color: AppColors.mainTextColor1,
fontSize: titleFontSize,
),
),
......
......@@ -6,10 +6,10 @@ import 'package:scrobbles/models/timeline.dart';
import 'package:scrobbles/ui/widgets/abstracts/custom_bar_chart.dart';
class ChartTimelineCounts extends CustomBarChart {
final TimelineData chartData;
const ChartTimelineCounts({super.key, required this.chartData});
final TimelineData chartData;
@override
final double verticalTicksInterval = 50;
......@@ -30,7 +30,7 @@ class ChartTimelineCounts extends CustomBarChart {
return getBarChart(
barWidth: getBarWidth(maxWidth, barsCount),
backgroundColor: Theme.of(context).colorScheme.onSurface,
backgroundColor: Theme.of(context).colorScheme.background,
);
},
),
......
......@@ -7,10 +7,10 @@ import 'package:scrobbles/ui/widgets/abstracts/custom_line_chart.dart';
import 'package:scrobbles/utils/color_extensions.dart';
class ChartTimelineEclecticism extends CustomLineChart {
final TimelineData chartData;
const ChartTimelineEclecticism({super.key, required this.chartData});
final TimelineData chartData;
@override
final String verticalAxisTitleSuffix = '%';
......
import 'package:flutter/material.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:scrobbles/config/app_colors.dart';
import 'package:scrobbles/models/topartists.dart';
import 'package:scrobbles/ui/widgets/abstracts/custom_chart.dart';
import 'package:scrobbles/utils/color_extensions.dart';
class ChartTopArtists extends CustomChart {
final TopArtistsData chartData;
const ChartTopArtists({super.key, required this.chartData});
final TopArtistsData chartData;
@override
Widget build(BuildContext context) {
return AspectRatio(
......@@ -68,7 +67,6 @@ class ChartTopArtists extends CustomChart {
radius: radius,
titleStyle: const TextStyle(
fontSize: fontSize,
color: AppColors.mainTextColor1,
shadows: shadows,
),
);
......
......@@ -6,10 +6,10 @@ import 'package:scrobbles/ui/widgets/abstracts/custom_line_chart.dart';
import 'package:scrobbles/utils/color_extensions.dart';
class ChartTopArtistsStream extends CustomLineChart {
final TopArtistsData chartData;
const ChartTopArtistsStream({super.key, required this.chartData});
final TopArtistsData chartData;
@override
final double verticalTicksInterval = 10;
@override
......@@ -68,8 +68,7 @@ class ChartTopArtistsStream extends CustomLineChart {
List<LineChartBarData> getDataStreamLine() {
final int artistsCount =
chartData.topArtistsStream[chartData.topArtistsStream.keys.first]?.length ??
0;
chartData.topArtistsStream[chartData.topArtistsStream.keys.first]?.length ?? 0;
List<LineChartBarData> lines = [];
......@@ -133,8 +132,7 @@ class ChartTopArtistsStream extends CustomLineChart {
List<BetweenBarsData> getBetweenBarsData() {
final int artistsCount =
chartData.topArtistsStream[chartData.topArtistsStream.keys.first]?.length ??
0;
chartData.topArtistsStream[chartData.topArtistsStream.keys.first]?.length ?? 0;
return Iterable<int>.generate(artistsCount)
.toList()
......
......@@ -4,10 +4,10 @@ import 'package:flutter/material.dart';
import 'package:scrobbles/models/statistics_global.dart';
class ContentStatisticsGlobal extends StatelessWidget {
final StatisticsGlobalData statistics;
const ContentStatisticsGlobal({super.key, required this.statistics});
final StatisticsGlobalData statistics;
@override
Widget build(BuildContext context) {
final TextTheme textTheme = Theme.of(context).primaryTextTheme;
......@@ -22,9 +22,8 @@ class ContentStatisticsGlobal extends StatelessWidget {
style: textTheme.bodyMedium,
).tr(
namedArgs: {
'count': statistics.totalCount != null
? statistics.totalCount.toString()
: placeholder,
'count':
statistics.totalCount != null ? statistics.totalCount.toString() : placeholder,
},
),
Text(
......
......@@ -4,10 +4,10 @@ import 'package:flutter/material.dart';
import 'package:scrobbles/models/statistics_recent.dart';
class ContentStatisticsRecent extends StatelessWidget {
final StatisticsRecentData statistics;
const ContentStatisticsRecent({super.key, required this.statistics});
final StatisticsRecentData statistics;
@override
Widget build(BuildContext context) {
final TextTheme textTheme = Theme.of(context).primaryTextTheme;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment