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
This commit is part of merge request !60. Comments created here will be created in the context of that merge request.
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(
title: 'Scrobbles',
theme: appTheme,
home: const SkeletonScreen(),
child: BlocBuilder<ThemeCubit, ThemeModeState>(
builder: (BuildContext context, ThemeModeState state) {
return MaterialApp(
title: 'Scrobbles',
home: const SkeletonScreen(),
// Localization stuff
localizationsDelegates: context.localizationDelegates,
supportedLocales: context.supportedLocales,
locale: context.locale,
debugShowCheckedModeBanner: false,
),
// 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.
Finish editing this message first!
Please register or to comment