Newer
Older
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:scrobbles/cubit/activity/data_counts_by_day_cubit.dart';
import 'package:scrobbles/cubit/activity/data_counts_by_hour_cubit.dart';
import 'package:scrobbles/cubit/activity/data_discoveries_cubit.dart';
import 'package:scrobbles/cubit/activity/data_heatmap_cubit.dart';
import 'package:scrobbles/cubit/activity/data_new_artists_cubit.dart';
import 'package:scrobbles/cubit/activity/data_new_tracks_cubit.dart';
import 'package:scrobbles/cubit/activity/data_statistics_recent_cubit.dart';
import 'package:scrobbles/cubit/activity/data_timeline_cubit.dart';
import 'package:scrobbles/cubit/activity/data_top_artists_cubit.dart';
import 'package:scrobbles/config/application_config.dart';
class SettingsForm extends StatefulWidget {
const SettingsForm({super.key});
@override
State<SettingsForm> createState() => _SettingsFormState();
}
class _SettingsFormState extends State<SettingsForm> {
String discoveriesDaysCount = ApplicationConfig.config
.getFromCode(ApplicationConfig.parameterCodeDiscoveriesDaysCount)
.defaultValue;
String distributionDaysCount = ApplicationConfig.config
.getFromCode(ApplicationConfig.parameterCodeDistributionDaysCount)
.defaultValue;
String statisticsRecentDaysCount = ApplicationConfig.config
.getFromCode(ApplicationConfig.parameterCodeStatisticsRecentDaysCount)
.defaultValue;
String timelineDaysCount = ApplicationConfig.config
.getFromCode(ApplicationConfig.parameterCodeTimelineDaysCount)
.defaultValue;
String topArtistsDaysCount = ApplicationConfig.config
.getFromCode(ApplicationConfig.parameterCodeTopArtistsDaysCount)
.defaultValue;
String newArtistsCount = ApplicationConfig.config
.getFromCode(ApplicationConfig.parameterCodeNewArtistsCount)
.defaultValue;
String newTracksCount = ApplicationConfig.config
.getFromCode(ApplicationConfig.parameterCodeNewTracksCount)
.defaultValue;
final List<bool> _selectedDiscoveriesDaysCount = [];
final List<bool> _selectedDistributionDaysCount = [];
final List<bool> _selectedStatisticsRecentDaysCount = [];
final List<bool> _selectedTimelineDaysCount = [];
final List<bool> _selectedTopArtistsDaysCount = [];
final List<bool> _selectedNewArtistsCount = [];
final List<bool> _selectedNewTracksCount = [];
@override
void didChangeDependencies() {
ActivitySettings settings = BlocProvider.of<ActivitySettingsCubit>(context).state.settings;
discoveriesDaysCount = settings.get(ApplicationConfig.parameterCodeDiscoveriesDaysCount);
distributionDaysCount = settings.get(ApplicationConfig.parameterCodeDistributionDaysCount);
statisticsRecentDaysCount =
settings.get(ApplicationConfig.parameterCodeStatisticsRecentDaysCount);
timelineDaysCount = settings.get(ApplicationConfig.parameterCodeTimelineDaysCount);
topArtistsDaysCount = settings.get(ApplicationConfig.parameterCodeTopArtistsDaysCount);
newArtistsCount = settings.get(ApplicationConfig.parameterCodeNewArtistsCount);
newTracksCount = settings.get(ApplicationConfig.parameterCodeNewTracksCount);
_selectedDiscoveriesDaysCount.clear();
for (var parameterItemValue in ApplicationConfig.allowedDaysCountValues) {
_selectedDiscoveriesDaysCount.add(parameterItemValue.value == discoveriesDaysCount);
}
_selectedDistributionDaysCount.clear();
for (var parameterItemValue in ApplicationConfig.allowedDaysCountValues) {
_selectedDistributionDaysCount.add(parameterItemValue.value == distributionDaysCount);
}
_selectedStatisticsRecentDaysCount.clear();
for (var parameterItemValue in ApplicationConfig.allowedDaysCountValues) {
_selectedStatisticsRecentDaysCount
.add(parameterItemValue.value == statisticsRecentDaysCount);
}
_selectedTimelineDaysCount.clear();
for (var parameterItemValue in ApplicationConfig.allowedDaysCountValues) {
_selectedTimelineDaysCount.add(parameterItemValue.value == timelineDaysCount);
}
_selectedTopArtistsDaysCount.clear();
for (var parameterItemValue in ApplicationConfig.allowedDaysCountValues) {
_selectedTopArtistsDaysCount.add(parameterItemValue.value == topArtistsDaysCount);
}
_selectedNewArtistsCount.clear();
for (var parameterItemValue in ApplicationConfig.allowedCountValues) {
_selectedNewArtistsCount.add(parameterItemValue.value == newArtistsCount);
}
_selectedNewTracksCount.clear();
for (var parameterItemValue in ApplicationConfig.allowedCountValues) {
_selectedNewTracksCount.add(parameterItemValue.value == newTracksCount);
}
super.didChangeDependencies();
}
@override
Widget build(BuildContext context) {
void saveSettings() {
BlocProvider.of<ActivitySettingsCubit>(context).setValues(values: {
ApplicationConfig.parameterCodeDiscoveriesDaysCount: discoveriesDaysCount,
ApplicationConfig.parameterCodeDistributionDaysCount: distributionDaysCount,
ApplicationConfig.parameterCodeStatisticsRecentDaysCount: statisticsRecentDaysCount,
ApplicationConfig.parameterCodeTimelineDaysCount: timelineDaysCount,
ApplicationConfig.parameterCodeTopArtistsDaysCount: topArtistsDaysCount,
ApplicationConfig.parameterCodeNewArtistsCount: newArtistsCount,
ApplicationConfig.parameterCodeNewTracksCount: newTracksCount,
});
}
return Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
const SizedBox(height: 8),
// Light/dark theme
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
const Text('settings_label_theme').tr(),
const Row(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
ApplicationSettingsThemeModeCard(
mode: ThemeMode.system,
icon: UniconsLine.cog,
),
ApplicationSettingsThemeModeCard(
mode: ThemeMode.light,
icon: UniconsLine.sun,
),
ApplicationSettingsThemeModeCard(
mode: ThemeMode.dark,
icon: UniconsLine.moon,
)
],
),
],
),
const SizedBox(height: 16),
AppTitle(text: tr('settings_title_days_count')),
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Text('settings_label_statistics_recent_days_count').tr(),
ToggleButtons(
onPressed: (int index) {
setState(() {
ApplicationConfig.allowedDaysCountValues[index].value;
for (int i = 0; i < _selectedStatisticsRecentDaysCount.length; i++) {
_selectedStatisticsRecentDaysCount[i] = i == index;
BlocProvider.of<DataStatisticsRecentCubit>(context).refresh(context);
},
borderRadius: const BorderRadius.all(Radius.circular(8)),
constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0),
children: ApplicationConfig.allowedDaysCountValues
.map((ApplicationSettingsParameterItemValue parameterItemValue) =>
Text(parameterItemValue.toString()))
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Text('settings_label_timeline_days_count').tr(),
ToggleButtons(
onPressed: (int index) {
setState(() {
timelineDaysCount = ApplicationConfig.allowedDaysCountValues[index].value;
for (int i = 0; i < _selectedTimelineDaysCount.length; i++) {
_selectedTimelineDaysCount[i] = i == index;
BlocProvider.of<DataTimelineCubit>(context).refresh(context);
},
borderRadius: const BorderRadius.all(Radius.circular(8)),
constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0),
children: ApplicationConfig.allowedDaysCountValues
.map((ApplicationSettingsParameterItemValue parameterItemValue) =>
Text(parameterItemValue.toString()))
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Text('settings_label_top_artists_days_count').tr(),
ToggleButtons(
onPressed: (int index) {
setState(() {
topArtistsDaysCount = ApplicationConfig.allowedDaysCountValues[index].value;
for (int i = 0; i < _selectedTopArtistsDaysCount.length; i++) {
_selectedTopArtistsDaysCount[i] = i == index;
BlocProvider.of<DataTopArtistsCubit>(context).refresh(context);
},
borderRadius: const BorderRadius.all(Radius.circular(8)),
constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0),
children: ApplicationConfig.allowedDaysCountValues
.map((ApplicationSettingsParameterItemValue parameterItemValue) =>
Text(parameterItemValue.toString()))
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Text('settings_label_discoveries_days_count').tr(),
ToggleButtons(
onPressed: (int index) {
setState(() {
discoveriesDaysCount = ApplicationConfig.allowedDaysCountValues[index].value;
for (int i = 0; i < _selectedDiscoveriesDaysCount.length; i++) {
_selectedDiscoveriesDaysCount[i] = i == index;
BlocProvider.of<DataDiscoveriesCubit>(context).refresh(context);
},
borderRadius: const BorderRadius.all(Radius.circular(8)),
constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0),
children: ApplicationConfig.allowedDaysCountValues
.map((ApplicationSettingsParameterItemValue parameterItemValue) =>
Text(parameterItemValue.toString()))
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Text('settings_label_distribution_days_count').tr(),
ToggleButtons(
onPressed: (int index) {
setState(() {
distributionDaysCount =
ApplicationConfig.allowedDaysCountValues[index].value;
for (int i = 0; i < _selectedDistributionDaysCount.length; i++) {
_selectedDistributionDaysCount[i] = i == index;
BlocProvider.of<DataCountsByDayCubit>(context).refresh(context);
BlocProvider.of<DataCountsByHourCubit>(context).refresh(context);
BlocProvider.of<DataHeatmapCubit>(context).refresh(context);
},
borderRadius: const BorderRadius.all(Radius.circular(8)),
constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0),
children: ApplicationConfig.allowedDaysCountValues
.map((ApplicationSettingsParameterItemValue parameterItemValue) =>
Text(parameterItemValue.toString()))
.toList(),
),
],
),
const SizedBox(height: 8),
AppTitle(text: tr('settings_title_counts')),
// New artists count
Row(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Text('settings_label_new_artists_count').tr(),
ToggleButtons(
onPressed: (int index) {
setState(() {
newArtistsCount = ApplicationConfig.allowedCountValues[index].value;
for (int i = 0; i < _selectedNewArtistsCount.length; i++) {
_selectedNewArtistsCount[i] = i == index;
}
});
saveSettings();
BlocProvider.of<DataNewArtistsCubit>(context).refresh(context);
},
borderRadius: const BorderRadius.all(Radius.circular(8)),
constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0),
isSelected: _selectedNewArtistsCount,
children: ApplicationConfig.allowedCountValues
.map((ApplicationSettingsParameterItemValue parameterItemValue) =>
Text(parameterItemValue.toString()))
),
],
),
// New tracks count
Row(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Text('settings_label_new_tracks_count').tr(),
ToggleButtons(
onPressed: (int index) {
setState(() {
newTracksCount = ApplicationConfig.allowedCountValues[index].value;
for (int i = 0; i < _selectedNewTracksCount.length; i++) {
_selectedNewTracksCount[i] = i == index;
}
});
saveSettings();
BlocProvider.of<DataNewTracksCubit>(context).refresh(context);
},
borderRadius: const BorderRadius.all(Radius.circular(8)),
constraints: const BoxConstraints(minHeight: 30.0, minWidth: 30.0),
isSelected: _selectedNewTracksCount,
children: ApplicationConfig.allowedCountValues
.map((ApplicationSettingsParameterItemValue parameterItemValue) =>
Text(parameterItemValue.toString()))