Skip to content
Snippets Groups Projects
application_config.dart 7.9 KiB
Newer Older
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:scrobbles/ui/settings/settings_form.dart';
import 'package:scrobbles/ui/pages/discoveries.dart';
import 'package:scrobbles/ui/pages/home.dart';
import 'package:scrobbles/ui/pages/statistics.dart';

import 'package:scrobbles/cubit/activity/activity_cubit.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_global_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';
class ApplicationConfig {
  static const String parameterCodeDistributionDaysCount = 'distribution-days-count';
  static const String parameterCodeDiscoveriesDaysCount = 'discoveries-days-count';
  static const String parameterCodeNewArtistsCount = 'new-artists-count';
  static const String parameterCodeNewTracksCount = 'new-tracks-count';
  static const String parameterCodeTimelineDaysCount = 'timeline-days-count';
  static const String parameterCodeTopArtistsDaysCount = 'top-artists-days-count';
  static const String parameterCodeStatisticsRecentDaysCount = 'statistics-recent-days-count';

  static const List<ApplicationSettingsParameterItemValue> allowedDaysCountValues = [
    ApplicationSettingsParameterItemValue(
      value: '7',
    ),
    ApplicationSettingsParameterItemValue(
      value: '14',
      isDefault: true,
    ),
    ApplicationSettingsParameterItemValue(
      value: '21',
    ),
    ApplicationSettingsParameterItemValue(
      value: '30',
    ),
    ApplicationSettingsParameterItemValue(
      value: '60',
    ),
    ApplicationSettingsParameterItemValue(
      value: '90',
    ),
  ];

  static const List<ApplicationSettingsParameterItemValue> allowedCountValues = [
    ApplicationSettingsParameterItemValue(
      value: '5',
      isDefault: true,
    ),
    ApplicationSettingsParameterItemValue(
      value: '10',
    ),
    ApplicationSettingsParameterItemValue(
      value: '20',
    ),
  ];

  // activity pages
  static const int activityPageIndexHome = 0;
  static const int activityPageIndexDiscoveries = 1;
  static const int activityPageIndexStatistics = 2;

  static final ApplicationConfigDefinition config = ApplicationConfigDefinition(
    appTitle: 'Scrobbles',
    activitySettings: [
      // DistributionDaysCount
      ApplicationSettingsParameter(
        code: parameterCodeDistributionDaysCount,
        values: allowedDaysCountValues,
      ),

      // DiscoveriesDaysCount
      ApplicationSettingsParameter(
        code: parameterCodeDiscoveriesDaysCount,
        values: allowedDaysCountValues,
      ),

      // NewArtistsCount
      ApplicationSettingsParameter(
        code: parameterCodeNewArtistsCount,
        values: allowedCountValues,
      ),

      // NewTracksCount
      ApplicationSettingsParameter(
        code: parameterCodeNewTracksCount,
        values: allowedCountValues,
      ),

      // TimelineDaysCount
      ApplicationSettingsParameter(
        code: parameterCodeTimelineDaysCount,
        values: allowedDaysCountValues,
      ),

      // TopArtistsDaysCount
      ApplicationSettingsParameter(
        code: parameterCodeTopArtistsDaysCount,
        values: allowedDaysCountValues,
      ),

      // StatisticsRecentDaysCount
      ApplicationSettingsParameter(
        code: parameterCodeStatisticsRecentDaysCount,
        values: allowedDaysCountValues,
      ),
    ],
    autoStartActivity: true,
    startNewActivity: (BuildContext context) {
      BlocProvider.of<ActivityCubit>(context).startNewActivity(context);
      BlocProvider.of<NavCubitPage>(context).updateIndex(activityPageIndexHome);
    quitCurrentActivity: (BuildContext context) {},
    deleteCurrentActivity: (BuildContext context) {},
    resumeActivity: (BuildContext context) {},
    navigation: ApplicationNavigation(
      screenActivity: ScreenItem(
        code: 'screen_activity',
        icon: Icon(UniconsLine.home),
        screen: ({required ApplicationConfigDefinition appConfig}) =>
            ScreenActivity(appConfig: appConfig),
      ),
      screenSettings: ScreenItem(
        code: 'screen_settings',
        icon: Icon(UniconsLine.setting),
        screen: ({required ApplicationConfigDefinition appConfig}) => SettingsForm(),
      ),
      screenAbout: ScreenItem(
        code: 'screen_about',
        icon: Icon(UniconsLine.info_circle),
        screen: ({required ApplicationConfigDefinition appConfig}) => ScreenAbout(),
      ),
      appBarConfiguration: AppBarConfiguration(
        hideQuitActivityButton: true,
        topBarButtonsBuilder: (context) => [
          // Go to Settings page
          AppBarButton(
            onPressed: (BuildContext context) =>
                BlocProvider.of<NavCubitScreen>(context).goToScreenSettings(),
            icon: ApplicationConfig.config.navigation.screenSettings.icon,
          ),

          // Back to Home page
          AppBarButton(
            onPressed: (BuildContext context) =>
                BlocProvider.of<NavCubitScreen>(context).goToScreenActivity(),
            icon: ApplicationConfig.config.navigation.screenActivity.icon,
          ),

          // Refresh data
          AppBarButton(
            onPressed: (BuildContext context) {
              BlocProvider.of<DataCountsByDayCubit>(context).refresh(context);
              BlocProvider.of<DataCountsByHourCubit>(context).refresh(context);
              BlocProvider.of<DataDiscoveriesCubit>(context).refresh(context);
              BlocProvider.of<DataHeatmapCubit>(context).refresh(context);
              BlocProvider.of<DataNewArtistsCubit>(context).refresh(context);
              BlocProvider.of<DataNewTracksCubit>(context).refresh(context);
              BlocProvider.of<DataStatisticsGlobalCubit>(context).refresh(context);
              BlocProvider.of<DataStatisticsRecentCubit>(context).refresh(context);
              BlocProvider.of<DataTimelineCubit>(context).refresh(context);
              BlocProvider.of<DataTopArtistsCubit>(context).refresh(context);
            },
            icon: const Icon(UniconsSolid.refresh),
          ),
        ],
      ),
      displayBottomNavBar: true,
      activityPages: {
        activityPageIndexHome: ActivityPageItem(
          code: 'page_home',
          icon: Icon(UniconsLine.home),
          builder: ({required ApplicationConfigDefinition appConfig}) {
            return BlocBuilder<ActivityCubit, ActivityState>(
              builder: (BuildContext context, ActivityState activityState) {
                return PageHome();
              },
            );
          },
        ),
        activityPageIndexDiscoveries: ActivityPageItem(
          code: 'page_discoveries',
          icon: Icon(UniconsLine.star),
          builder: ({required ApplicationConfigDefinition appConfig}) {
            return BlocBuilder<ActivityCubit, ActivityState>(
              builder: (BuildContext context, ActivityState activityState) {
                return PageDiscoveries();
              },
            );
          },
        ),
        activityPageIndexStatistics: ActivityPageItem(
          code: 'page_statistics',
          icon: Icon(UniconsLine.star),
          builder: ({required ApplicationConfigDefinition appConfig}) {
            return BlocBuilder<ActivityCubit, ActivityState>(
              builder: (BuildContext context, ActivityState activityState) {
                return PageStatistics();
              },
            );
          },
        ),
      },
    ),