diff --git a/lib/app/view/app.dart b/lib/app/view/app.dart index ab32bb5..9c86a5f 100644 --- a/lib/app/view/app.dart +++ b/lib/app/view/app.dart @@ -15,7 +15,6 @@ import 'package:ht_dashboard/dashboard/bloc/dashboard_bloc.dart'; import 'package:ht_dashboard/l10n/app_localizations.dart'; import 'package:ht_dashboard/router/router.dart'; // Import for app_theme.dart -import 'package:ht_dashboard/shared/theme/app_theme.dart'; import 'package:ht_data_repository/ht_data_repository.dart'; import 'package:ht_kv_storage_service/ht_kv_storage_service.dart'; import 'package:ht_shared/ht_shared.dart' hide AppStatus; diff --git a/lib/app/view/app_shell.dart b/lib/app/view/app_shell.dart index da6d8e2..5945047 100644 --- a/lib/app/view/app_shell.dart +++ b/lib/app/view/app_shell.dart @@ -5,7 +5,7 @@ import 'package:go_router/go_router.dart'; import 'package:ht_dashboard/app/bloc/app_bloc.dart'; import 'package:ht_dashboard/l10n/l10n.dart'; import 'package:ht_dashboard/router/routes.dart'; -import 'package:ht_dashboard/shared/constants/app_spacing.dart'; +import 'package:ht_ui_kit/ht_ui_kit.dart'; /// A responsive scaffold shell for the main application sections. /// @@ -24,7 +24,7 @@ class AppShell extends StatelessWidget { @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Scaffold( appBar: AppBar( title: Text(l10n.dashboard), diff --git a/lib/app_configuration/bloc/app_configuration_bloc.dart b/lib/app_configuration/bloc/app_configuration_bloc.dart index 08b26a4..5a70521 100644 --- a/lib/app_configuration/bloc/app_configuration_bloc.dart +++ b/lib/app_configuration/bloc/app_configuration_bloc.dart @@ -1,7 +1,7 @@ import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:ht_data_repository/ht_data_repository.dart'; -import 'package:ht_shared/ht_shared.dart'; +import 'package:ht_shared/ht_shared.dart'; part 'app_configuration_event.dart'; part 'app_configuration_state.dart'; @@ -28,7 +28,9 @@ class AppConfigurationBloc ) async { emit(state.copyWith(status: AppConfigurationStatus.loading)); try { - final remoteConfig = await _remoteConfigRepository.read(id: kRemoteConfigId); + final remoteConfig = await _remoteConfigRepository.read( + id: kRemoteConfigId, + ); emit( state.copyWith( status: AppConfigurationStatus.success, diff --git a/lib/app_configuration/view/app_configuration_page.dart b/lib/app_configuration/view/app_configuration_page.dart index 6c3bb2b..488d7c1 100644 --- a/lib/app_configuration/view/app_configuration_page.dart +++ b/lib/app_configuration/view/app_configuration_page.dart @@ -3,10 +3,8 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:ht_dashboard/app_configuration/bloc/app_configuration_bloc.dart'; import 'package:ht_dashboard/l10n/app_localizations.dart'; import 'package:ht_dashboard/l10n/l10n.dart'; -import 'package:ht_dashboard/shared/constants/app_spacing.dart'; -import 'package:ht_dashboard/shared/widgets/widgets.dart'; import 'package:ht_shared/ht_shared.dart'; -import 'package:ht_ui_kit/ht_ui_kit.dart'; // Import for toFriendlyMessage +import 'package:ht_ui_kit/ht_ui_kit.dart'; /// {@template app_configuration_page} /// A page for managing the application's remote configuration. @@ -42,7 +40,7 @@ class _AppConfigurationPageState extends State @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Scaffold( appBar: AppBar( title: Text( @@ -65,8 +63,8 @@ class _AppConfigurationPageState extends State child: Text( l10n.appConfigurationPageDescription, style: Theme.of(context).textTheme.bodyMedium?.copyWith( - color: Theme.of(context).colorScheme.onSurfaceVariant, - ), + color: Theme.of(context).colorScheme.onSurfaceVariant, + ), ), ), TabBar( @@ -94,8 +92,8 @@ class _AppConfigurationPageState extends State content: Text( l10n.appConfigSaveSuccessMessage, style: Theme.of(context).textTheme.bodyMedium?.copyWith( - color: Theme.of(context).colorScheme.onPrimary, - ), + color: Theme.of(context).colorScheme.onPrimary, + ), ), backgroundColor: Theme.of(context).colorScheme.primary, ), @@ -113,8 +111,8 @@ class _AppConfigurationPageState extends State content: Text( state.exception!.toFriendlyMessage(context), style: Theme.of(context).textTheme.bodyMedium?.copyWith( - color: Theme.of(context).colorScheme.onError, - ), + color: Theme.of(context).colorScheme.onError, + ), ), backgroundColor: Theme.of(context).colorScheme.error, ), @@ -229,7 +227,7 @@ class _AppConfigurationPageState extends State ); } : null, - child: Text(context.l10n.discardChangesButton), + child: Text(AppLocalizationsX(context).l10n.discardChangesButton), ), const SizedBox(width: AppSpacing.md), ElevatedButton( @@ -245,7 +243,7 @@ class _AppConfigurationPageState extends State } } : null, - child: Text(context.l10n.saveChangesButton), + child: Text(AppLocalizationsX(context).l10n.saveChangesButton), ), ], ), @@ -259,17 +257,19 @@ class _AppConfigurationPageState extends State builder: (BuildContext dialogContext) { return AlertDialog( title: Text( - context.l10n.confirmConfigUpdateDialogTitle, + AppLocalizationsX(context).l10n.confirmConfigUpdateDialogTitle, style: Theme.of(dialogContext).textTheme.titleLarge, ), content: Text( - context.l10n.confirmConfigUpdateDialogContent, + AppLocalizationsX( + context, + ).l10n.confirmConfigUpdateDialogContent, style: Theme.of(dialogContext).textTheme.bodyMedium, ), actions: [ TextButton( onPressed: () => Navigator.of(dialogContext).pop(false), - child: Text(context.l10n.cancelButton), + child: Text(AppLocalizationsX(context).l10n.cancelButton), ), ElevatedButton( onPressed: () => Navigator.of(dialogContext).pop(true), @@ -279,7 +279,9 @@ class _AppConfigurationPageState extends State dialogContext, ).colorScheme.onError, ), - child: Text(context.l10n.confirmSaveButton), + child: Text( + AppLocalizationsX(context).l10n.confirmSaveButton, + ), ), ], ); @@ -292,7 +294,7 @@ class _AppConfigurationPageState extends State BuildContext context, RemoteConfig remoteConfig, ) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -371,7 +373,7 @@ class _AppConfigurationPageState extends State BuildContext context, RemoteConfig remoteConfig, ) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -450,7 +452,7 @@ class _AppConfigurationPageState extends State BuildContext context, RemoteConfig remoteConfig, ) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -509,7 +511,7 @@ class _AppConfigurationPageState extends State BuildContext context, RemoteConfig remoteConfig, ) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return ExpansionTile( title: Text(l10n.maintenanceModeTitle), childrenPadding: const EdgeInsets.symmetric( @@ -523,9 +525,8 @@ class _AppConfigurationPageState extends State Text( l10n.maintenanceModeDescription, style: Theme.of(context).textTheme.bodySmall?.copyWith( - color: - Theme.of(context).colorScheme.onSurface.withOpacity(0.7), - ), + color: Theme.of(context).colorScheme.onSurface.withOpacity(0.7), + ), ), const SizedBox(height: AppSpacing.lg), SwitchListTile( @@ -534,14 +535,14 @@ class _AppConfigurationPageState extends State value: remoteConfig.appStatus.isUnderMaintenance, onChanged: (value) { context.read().add( - AppConfigurationFieldChanged( - remoteConfig: remoteConfig.copyWith( - appStatus: remoteConfig.appStatus.copyWith( - isUnderMaintenance: value, - ), - ), + AppConfigurationFieldChanged( + remoteConfig: remoteConfig.copyWith( + appStatus: remoteConfig.appStatus.copyWith( + isUnderMaintenance: value, ), - ); + ), + ), + ); }, ), ], @@ -554,7 +555,7 @@ class _AppConfigurationPageState extends State BuildContext context, RemoteConfig remoteConfig, ) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return ExpansionTile( title: Text(l10n.forceUpdateTitle), childrenPadding: const EdgeInsets.symmetric( @@ -568,9 +569,8 @@ class _AppConfigurationPageState extends State Text( l10n.forceUpdateDescription, style: Theme.of(context).textTheme.bodySmall?.copyWith( - color: - Theme.of(context).colorScheme.onSurface.withOpacity(0.7), - ), + color: Theme.of(context).colorScheme.onSurface.withOpacity(0.7), + ), ), const SizedBox(height: AppSpacing.lg), _buildTextField( @@ -580,14 +580,14 @@ class _AppConfigurationPageState extends State value: remoteConfig.appStatus.latestAppVersion, onChanged: (value) { context.read().add( - AppConfigurationFieldChanged( - remoteConfig: remoteConfig.copyWith( - appStatus: remoteConfig.appStatus.copyWith( - latestAppVersion: value, - ), - ), + AppConfigurationFieldChanged( + remoteConfig: remoteConfig.copyWith( + appStatus: remoteConfig.appStatus.copyWith( + latestAppVersion: value, ), - ); + ), + ), + ); }, ), SwitchListTile( @@ -596,14 +596,14 @@ class _AppConfigurationPageState extends State value: remoteConfig.appStatus.isLatestVersionOnly, onChanged: (value) { context.read().add( - AppConfigurationFieldChanged( - remoteConfig: remoteConfig.copyWith( - appStatus: remoteConfig.appStatus.copyWith( - isLatestVersionOnly: value, - ), - ), + AppConfigurationFieldChanged( + remoteConfig: remoteConfig.copyWith( + appStatus: remoteConfig.appStatus.copyWith( + isLatestVersionOnly: value, ), - ); + ), + ), + ); }, ), _buildTextField( @@ -613,14 +613,14 @@ class _AppConfigurationPageState extends State value: remoteConfig.appStatus.iosUpdateUrl, onChanged: (value) { context.read().add( - AppConfigurationFieldChanged( - remoteConfig: remoteConfig.copyWith( - appStatus: remoteConfig.appStatus.copyWith( - iosUpdateUrl: value, - ), - ), + AppConfigurationFieldChanged( + remoteConfig: remoteConfig.copyWith( + appStatus: remoteConfig.appStatus.copyWith( + iosUpdateUrl: value, ), - ); + ), + ), + ); }, ), _buildTextField( @@ -630,14 +630,14 @@ class _AppConfigurationPageState extends State value: remoteConfig.appStatus.androidUpdateUrl, onChanged: (value) { context.read().add( - AppConfigurationFieldChanged( - remoteConfig: remoteConfig.copyWith( - appStatus: remoteConfig.appStatus.copyWith( - androidUpdateUrl: value, - ), - ), + AppConfigurationFieldChanged( + remoteConfig: remoteConfig.copyWith( + appStatus: remoteConfig.appStatus.copyWith( + androidUpdateUrl: value, ), - ); + ), + ), + ); }, ), ], @@ -836,7 +836,7 @@ class _UserPreferenceLimitsFormState extends State<_UserPreferenceLimitsForm> { @override Widget build(BuildContext context) { final userPreferenceConfig = widget.remoteConfig.userPreferenceConfig; - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Column( children: [ @@ -1103,7 +1103,7 @@ class _AdConfigFormState extends State<_AdConfigForm> { @override Widget build(BuildContext context) { final adConfig = widget.remoteConfig.adConfig; - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Column( children: [ @@ -1310,7 +1310,7 @@ class _AccountActionConfigFormState extends State<_AccountActionConfigForm> { Widget build(BuildContext context) { final accountActionConfig = widget.remoteConfig.accountActionConfig; final relevantActionTypes = _getDaysMap(accountActionConfig).keys.toList(); - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Column( children: relevantActionTypes.map((actionType) { diff --git a/lib/authentication/view/authentication_page.dart b/lib/authentication/view/authentication_page.dart index badc86e..da4762c 100644 --- a/lib/authentication/view/authentication_page.dart +++ b/lib/authentication/view/authentication_page.dart @@ -4,7 +4,6 @@ import 'package:go_router/go_router.dart'; import 'package:ht_dashboard/authentication/bloc/authentication_bloc.dart'; import 'package:ht_dashboard/l10n/l10n.dart'; import 'package:ht_dashboard/router/routes.dart'; -import 'package:ht_dashboard/shared/constants/app_spacing.dart'; import 'package:ht_ui_kit/ht_ui_kit.dart'; /// {@template authentication_page} @@ -19,7 +18,7 @@ class AuthenticationPage extends StatelessWidget { @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; final textTheme = Theme.of(context).textTheme; final colorScheme = Theme.of(context).colorScheme; diff --git a/lib/authentication/view/email_code_verification_page.dart b/lib/authentication/view/email_code_verification_page.dart index 33a3ec4..950f52f 100644 --- a/lib/authentication/view/email_code_verification_page.dart +++ b/lib/authentication/view/email_code_verification_page.dart @@ -5,7 +5,6 @@ import 'package:ht_dashboard/app/bloc/app_bloc.dart'; import 'package:ht_dashboard/app/config/config.dart'; import 'package:ht_dashboard/authentication/bloc/authentication_bloc.dart'; import 'package:ht_dashboard/l10n/l10n.dart'; -import 'package:ht_dashboard/shared/constants/app_spacing.dart'; import 'package:ht_ui_kit/ht_ui_kit.dart'; /// {@template email_code_verification_page} @@ -21,7 +20,7 @@ class EmailCodeVerificationPage extends StatelessWidget { @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; final textTheme = Theme.of(context).textTheme; final colorScheme = Theme.of(context).colorScheme; @@ -152,7 +151,7 @@ class _EmailCodeVerificationFormState @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; final textTheme = Theme.of(context).textTheme; return Form( diff --git a/lib/authentication/view/request_code_page.dart b/lib/authentication/view/request_code_page.dart index 25b6757..9777169 100644 --- a/lib/authentication/view/request_code_page.dart +++ b/lib/authentication/view/request_code_page.dart @@ -9,7 +9,6 @@ import 'package:ht_dashboard/app/config/config.dart'; import 'package:ht_dashboard/authentication/bloc/authentication_bloc.dart'; import 'package:ht_dashboard/l10n/l10n.dart'; import 'package:ht_dashboard/router/routes.dart'; -import 'package:ht_dashboard/shared/constants/app_spacing.dart'; import 'package:ht_ui_kit/ht_ui_kit.dart'; /// {@template request_code_page} @@ -40,7 +39,7 @@ class _RequestCodeView extends StatelessWidget { @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; final colorScheme = Theme.of(context).colorScheme; final textTheme = Theme.of(context).textTheme; @@ -203,7 +202,7 @@ class _EmailLinkFormState extends State<_EmailLinkForm> { @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; final textTheme = Theme.of(context).textTheme; final colorScheme = Theme.of(context).colorScheme; diff --git a/lib/bootstrap.dart b/lib/bootstrap.dart index 7174733..f9de1ad 100644 --- a/lib/bootstrap.dart +++ b/lib/bootstrap.dart @@ -1,4 +1,3 @@ -import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:ht_auth_api/ht_auth_api.dart'; @@ -8,8 +7,6 @@ import 'package:ht_auth_repository/ht_auth_repository.dart'; import 'package:ht_dashboard/app/app.dart'; import 'package:ht_dashboard/app/config/config.dart' as app_config; import 'package:ht_dashboard/bloc_observer.dart'; -import 'package:ht_dashboard/shared/localization/ar_timeago_messages.dart'; -import 'package:ht_dashboard/shared/localization/en_timeago_messages.dart'; import 'package:ht_data_api/ht_data_api.dart'; import 'package:ht_data_client/ht_data_client.dart'; import 'package:ht_data_inmemory/ht_data_inmemory.dart'; @@ -17,6 +14,7 @@ import 'package:ht_data_repository/ht_data_repository.dart'; import 'package:ht_http_client/ht_http_client.dart'; import 'package:ht_kv_storage_shared_preferences/ht_kv_storage_shared_preferences.dart'; import 'package:ht_shared/ht_shared.dart'; +import 'package:ht_ui_kit/ht_ui_kit.dart'; import 'package:logging/logging.dart'; import 'package:timeago/timeago.dart' as timeago; @@ -48,7 +46,6 @@ Future bootstrap( httpClient = HtHttpClient( baseUrl: appConfig.baseUrl, tokenProvider: () => authenticationRepository.getAuthToken(), - isWeb: kIsWeb, ); authClient = HtAuthApi( httpClient: httpClient, diff --git a/lib/content_management/view/content_management_page.dart b/lib/content_management/view/content_management_page.dart index cfbc6a9..2e02365 100644 --- a/lib/content_management/view/content_management_page.dart +++ b/lib/content_management/view/content_management_page.dart @@ -7,7 +7,7 @@ import 'package:ht_dashboard/content_management/view/sources_page.dart'; import 'package:ht_dashboard/content_management/view/topics_page.dart'; import 'package:ht_dashboard/l10n/l10n.dart'; import 'package:ht_dashboard/router/routes.dart'; -import 'package:ht_dashboard/shared/constants/app_spacing.dart'; +import 'package:ht_ui_kit/ht_ui_kit.dart'; /// {@template content_management_page} /// A page for Content Management with tabbed navigation for sub-sections. @@ -50,7 +50,7 @@ class _ContentManagementPageState extends State @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return BlocListener( listener: (context, state) { // Optionally handle state changes, e.g., show snackbar for errors diff --git a/lib/content_management/view/create_headline_page.dart b/lib/content_management/view/create_headline_page.dart index b751f80..bf44367 100644 --- a/lib/content_management/view/create_headline_page.dart +++ b/lib/content_management/view/create_headline_page.dart @@ -4,7 +4,6 @@ import 'package:go_router/go_router.dart'; import 'package:ht_dashboard/content_management/bloc/content_management_bloc.dart'; import 'package:ht_dashboard/content_management/bloc/create_headline/create_headline_bloc.dart'; import 'package:ht_dashboard/l10n/l10n.dart'; -import 'package:ht_dashboard/shared/constants/pagination_constants.dart'; import 'package:ht_dashboard/shared/shared.dart'; import 'package:ht_data_repository/ht_data_repository.dart'; import 'package:ht_shared/ht_shared.dart'; @@ -44,7 +43,7 @@ class _CreateHeadlineViewState extends State<_CreateHeadlineView> { @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Scaffold( appBar: AppBar( title: Text(l10n.createHeadline), diff --git a/lib/content_management/view/create_source_page.dart b/lib/content_management/view/create_source_page.dart index a11f2af..d09fef4 100644 --- a/lib/content_management/view/create_source_page.dart +++ b/lib/content_management/view/create_source_page.dart @@ -5,7 +5,6 @@ import 'package:ht_dashboard/content_management/bloc/content_management_bloc.dar import 'package:ht_dashboard/content_management/bloc/create_source/create_source_bloc.dart'; import 'package:ht_dashboard/content_management/bloc/edit_source/edit_source_bloc.dart'; import 'package:ht_dashboard/l10n/l10n.dart'; -import 'package:ht_dashboard/shared/constants/pagination_constants.dart'; import 'package:ht_dashboard/shared/shared.dart'; import 'package:ht_data_repository/ht_data_repository.dart'; import 'package:ht_shared/ht_shared.dart'; @@ -43,7 +42,7 @@ class _CreateSourceViewState extends State<_CreateSourceView> { @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Scaffold( appBar: AppBar( title: Text(l10n.createSource), diff --git a/lib/content_management/view/create_topic_page.dart b/lib/content_management/view/create_topic_page.dart index 4b617c0..55bbaa2 100644 --- a/lib/content_management/view/create_topic_page.dart +++ b/lib/content_management/view/create_topic_page.dart @@ -4,7 +4,6 @@ import 'package:go_router/go_router.dart'; import 'package:ht_dashboard/content_management/bloc/content_management_bloc.dart'; import 'package:ht_dashboard/content_management/bloc/create_topic/create_topic_bloc.dart'; import 'package:ht_dashboard/l10n/l10n.dart'; -import 'package:ht_dashboard/shared/constants/pagination_constants.dart'; import 'package:ht_dashboard/shared/shared.dart'; import 'package:ht_data_repository/ht_data_repository.dart'; import 'package:ht_shared/ht_shared.dart'; @@ -41,7 +40,7 @@ class _CreateTopicViewState extends State<_CreateTopicView> { @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Scaffold( appBar: AppBar( title: Text(l10n.createTopic), diff --git a/lib/content_management/view/edit_headline_page.dart b/lib/content_management/view/edit_headline_page.dart index 6505d56..f27badb 100644 --- a/lib/content_management/view/edit_headline_page.dart +++ b/lib/content_management/view/edit_headline_page.dart @@ -70,7 +70,7 @@ class _EditHeadlineViewState extends State<_EditHeadlineView> { @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Scaffold( appBar: AppBar( title: Text(l10n.editHeadline), diff --git a/lib/content_management/view/edit_source_page.dart b/lib/content_management/view/edit_source_page.dart index 73ee884..90c6d4d 100644 --- a/lib/content_management/view/edit_source_page.dart +++ b/lib/content_management/view/edit_source_page.dart @@ -68,7 +68,7 @@ class _EditSourceViewState extends State<_EditSourceView> { @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Scaffold( appBar: AppBar( title: Text(l10n.editSource), diff --git a/lib/content_management/view/edit_topic_page.dart b/lib/content_management/view/edit_topic_page.dart index e2df650..625daee 100644 --- a/lib/content_management/view/edit_topic_page.dart +++ b/lib/content_management/view/edit_topic_page.dart @@ -64,7 +64,7 @@ class _EditTopicViewState extends State<_EditTopicView> { @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Scaffold( appBar: AppBar( title: Text(l10n.editTopic), diff --git a/lib/content_management/view/headlines_page.dart b/lib/content_management/view/headlines_page.dart index 41f89c6..634a6cd 100644 --- a/lib/content_management/view/headlines_page.dart +++ b/lib/content_management/view/headlines_page.dart @@ -6,12 +6,9 @@ import 'package:ht_dashboard/content_management/bloc/content_management_bloc.dar import 'package:ht_dashboard/l10n/app_localizations.dart'; // Corrected import import 'package:ht_dashboard/l10n/l10n.dart'; import 'package:ht_dashboard/router/routes.dart'; -import 'package:ht_dashboard/shared/constants/app_spacing.dart'; -import 'package:ht_dashboard/shared/constants/pagination_constants.dart'; import 'package:ht_dashboard/shared/extensions/content_status_l10n.dart'; -import 'package:ht_dashboard/shared/widgets/failure_state_widget.dart'; -import 'package:ht_dashboard/shared/widgets/loading_state_widget.dart'; import 'package:ht_shared/ht_shared.dart'; +import 'package:ht_ui_kit/ht_ui_kit.dart'; import 'package:intl/intl.dart'; /// {@template headlines_page} @@ -36,7 +33,7 @@ class _HeadlinesPageState extends State { @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Padding( padding: const EdgeInsets.all(AppSpacing.lg), child: BlocBuilder( diff --git a/lib/content_management/view/sources_page.dart b/lib/content_management/view/sources_page.dart index d06451d..9474a3e 100644 --- a/lib/content_management/view/sources_page.dart +++ b/lib/content_management/view/sources_page.dart @@ -7,12 +7,9 @@ import 'package:ht_dashboard/content_management/bloc/edit_source/edit_source_blo import 'package:ht_dashboard/l10n/app_localizations.dart'; import 'package:ht_dashboard/l10n/l10n.dart'; import 'package:ht_dashboard/router/routes.dart'; -import 'package:ht_dashboard/shared/constants/app_spacing.dart'; -import 'package:ht_dashboard/shared/constants/pagination_constants.dart'; import 'package:ht_dashboard/shared/extensions/content_status_l10n.dart'; -import 'package:ht_dashboard/shared/widgets/failure_state_widget.dart'; -import 'package:ht_dashboard/shared/widgets/loading_state_widget.dart'; import 'package:ht_shared/ht_shared.dart'; +import 'package:ht_ui_kit/ht_ui_kit.dart'; import 'package:intl/intl.dart'; /// {@template sources_page} @@ -37,7 +34,7 @@ class _SourcesPageState extends State { @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Padding( padding: const EdgeInsets.all(AppSpacing.lg), child: BlocBuilder( diff --git a/lib/content_management/view/topics_page.dart b/lib/content_management/view/topics_page.dart index a6540b1..dc6f189 100644 --- a/lib/content_management/view/topics_page.dart +++ b/lib/content_management/view/topics_page.dart @@ -6,9 +6,9 @@ import 'package:ht_dashboard/content_management/bloc/content_management_bloc.dar import 'package:ht_dashboard/l10n/app_localizations.dart'; import 'package:ht_dashboard/l10n/l10n.dart'; import 'package:ht_dashboard/router/routes.dart'; -import 'package:ht_dashboard/shared/constants/pagination_constants.dart'; import 'package:ht_dashboard/shared/shared.dart'; import 'package:ht_shared/ht_shared.dart'; +import 'package:ht_ui_kit/ht_ui_kit.dart'; import 'package:intl/intl.dart'; /// {@template topics_page} @@ -33,7 +33,7 @@ class _TopicPageState extends State { @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Padding( padding: const EdgeInsets.all(AppSpacing.lg), child: BlocBuilder( diff --git a/lib/dashboard/view/dashboard_page.dart b/lib/dashboard/view/dashboard_page.dart index 6988ca2..2642081 100644 --- a/lib/dashboard/view/dashboard_page.dart +++ b/lib/dashboard/view/dashboard_page.dart @@ -4,8 +4,8 @@ import 'package:go_router/go_router.dart'; import 'package:ht_dashboard/dashboard/bloc/dashboard_bloc.dart'; import 'package:ht_dashboard/l10n/l10n.dart'; import 'package:ht_dashboard/router/routes.dart'; -import 'package:ht_dashboard/shared/shared.dart'; import 'package:ht_shared/ht_shared.dart'; +import 'package:ht_ui_kit/ht_ui_kit.dart'; /// {@template dashboard_page} /// The main dashboard page, displaying key statistics and quick actions. @@ -28,7 +28,7 @@ class _DashboardPageState extends State { @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Scaffold( body: BlocBuilder( builder: (context, state) { @@ -150,7 +150,7 @@ class _QuickActionsCard extends StatelessWidget { @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; final theme = Theme.of(context); return Card( @@ -193,7 +193,7 @@ class _RecentHeadlinesCard extends StatelessWidget { @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; final theme = Theme.of(context); return Card( diff --git a/lib/settings/view/settings_page.dart b/lib/settings/view/settings_page.dart index 9a1ce91..42856c8 100644 --- a/lib/settings/view/settings_page.dart +++ b/lib/settings/view/settings_page.dart @@ -4,11 +4,9 @@ import 'package:ht_dashboard/app/bloc/app_bloc.dart'; import 'package:ht_dashboard/l10n/app_localizations.dart'; import 'package:ht_dashboard/l10n/l10n.dart'; import 'package:ht_dashboard/settings/bloc/settings_bloc.dart'; -import 'package:ht_dashboard/shared/constants/app_spacing.dart'; -import 'package:ht_dashboard/shared/widgets/widgets.dart'; import 'package:ht_data_repository/ht_data_repository.dart'; import 'package:ht_shared/ht_shared.dart'; -import 'package:ht_ui_kit/ht_ui_kit.dart'; // Import for toFriendlyMessage +import 'package:ht_ui_kit/ht_ui_kit.dart'; /// {@template settings_page} /// A page for user settings, allowing customization of theme and language. @@ -34,7 +32,7 @@ class _SettingsView extends StatelessWidget { @override Widget build(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; return Scaffold( appBar: AppBar( title: Text(l10n.settings), diff --git a/lib/shared/constants/app_spacing.dart b/lib/shared/constants/app_spacing.dart deleted file mode 100644 index ddc23d9..0000000 --- a/lib/shared/constants/app_spacing.dart +++ /dev/null @@ -1,40 +0,0 @@ -/// Defines standard spacing constants used throughout the application. -/// -/// Consistent spacing is crucial for a clean and professional UI. -/// Using these constants ensures uniformity and makes global -/// adjustments easier. -abstract final class AppSpacing { - /// Extra small spacing value (e.g., 4.0). - static const double xs = 4; - - /// Small spacing value (e.g., 8.0). - static const double sm = 8; - - /// Medium spacing value (e.g., 12.0). - static const double md = 12; - - /// Large spacing value (e.g., 16.0). - static const double lg = 16; - - /// Extra large spacing value (e.g., 24.0). - static const double xl = 24; - - /// Extra extra large spacing value (e.g., 32.0). - static const double xxl = 32; - - // --- Padding Specific --- - // While the above can be used for padding, specific names can - // improve clarity. - - /// Small padding value (equivalent to sm). - static const double paddingSmall = sm; - - /// Medium padding value (equivalent to md). - static const double paddingMedium = md; - - /// Large padding value (equivalent to lg). - static const double paddingLarge = lg; - - /// Extra large padding value (equivalent to xl). - static const double paddingExtraLarge = xl; -} diff --git a/lib/shared/constants/constants.dart b/lib/shared/constants/constants.dart deleted file mode 100644 index e92c41a..0000000 --- a/lib/shared/constants/constants.dart +++ /dev/null @@ -1,5 +0,0 @@ -/// Barrel file for shared constants. -/// Exports application-wide constant definitions. -library; - -export 'app_spacing.dart'; diff --git a/lib/shared/constants/pagination_constants.dart b/lib/shared/constants/pagination_constants.dart deleted file mode 100644 index 5f6b2a9..0000000 --- a/lib/shared/constants/pagination_constants.dart +++ /dev/null @@ -1,2 +0,0 @@ -/// Default number of rows to display per page in paginated data tables. -const int kDefaultRowsPerPage = 10; diff --git a/lib/shared/extensions/content_status_l10n.dart b/lib/shared/extensions/content_status_l10n.dart index 3e52c83..5a723d1 100644 --- a/lib/shared/extensions/content_status_l10n.dart +++ b/lib/shared/extensions/content_status_l10n.dart @@ -6,7 +6,7 @@ import 'package:ht_shared/ht_shared.dart'; extension ContentStatusL10n on ContentStatus { /// Returns the localized string for the status. String l10n(BuildContext context) { - final l10n = context.l10n; + final l10n = AppLocalizationsX(context).l10n; switch (this) { case ContentStatus.active: return l10n.contentStatusActive; diff --git a/lib/shared/localization/ar_timeago_messages.dart b/lib/shared/localization/ar_timeago_messages.dart deleted file mode 100644 index a4de460..0000000 --- a/lib/shared/localization/ar_timeago_messages.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:timeago/timeago.dart' as timeago; - -/// Custom Arabic lookup messages for the timeago package. -class ArTimeagoMessages implements timeago.LookupMessages { - @override - String prefixAgo() => ''; - @override - String prefixFromNow() => 'بعد '; - @override - String suffixAgo() => ''; - @override - String suffixFromNow() => ''; - - @override - String lessThanOneMinute(int seconds) => 'الآن'; - @override - String aboutAMinute(int minutes) => 'منذ 1د'; - @override - String minutes(int minutes) => 'منذ $minutesد'; - - @override - String aboutAnHour(int minutes) => 'منذ 1س'; - @override - String hours(int hours) => 'منذ $hoursس'; - - @override - String aDay(int hours) => 'منذ 1ي'; - @override - String days(int days) => 'منذ $daysي'; - - @override - String aboutAMonth(int days) => 'منذ 1ش'; - @override - String months(int months) => 'منذ $monthsش'; - - @override - String aboutAYear(int year) => 'منذ 1سنة'; - @override - String years(int years) => 'منذ $yearsسنوات'; - - @override - String wordSeparator() => ' '; -} diff --git a/lib/shared/localization/en_timeago_messages.dart b/lib/shared/localization/en_timeago_messages.dart deleted file mode 100644 index f3f284a..0000000 --- a/lib/shared/localization/en_timeago_messages.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:timeago/timeago.dart' as timeago; - -/// Custom English lookup messages for the timeago package (concise). -class EnTimeagoMessages implements timeago.LookupMessages { - @override - String prefixAgo() => ''; - @override - String prefixFromNow() => ''; - @override - String suffixAgo() => ' ago'; - @override - String suffixFromNow() => ' from now'; - - @override - String lessThanOneMinute(int seconds) => 'now'; - @override - String aboutAMinute(int minutes) => '1m'; - @override - String minutes(int minutes) => '${minutes}m'; - - @override - String aboutAnHour(int minutes) => '1h'; - @override - String hours(int hours) => '${hours}h'; - - @override - String aDay(int hours) => '1d'; - @override - String days(int days) => '${days}d'; - - @override - String aboutAMonth(int days) => '1mo'; - @override - String months(int months) => '${months}mo'; - - @override - String aboutAYear(int year) => '1y'; - @override - String years(int years) => '${years}y'; - - @override - String wordSeparator() => ' '; -} diff --git a/lib/shared/shared.dart b/lib/shared/shared.dart index e7c04f2..9338530 100644 --- a/lib/shared/shared.dart +++ b/lib/shared/shared.dart @@ -4,8 +4,4 @@ /// the application to promote consistency and maintainability. library; -export 'constants/constants.dart'; export 'extensions/extensions.dart'; -export 'theme/theme.dart'; -export 'utils/utils.dart'; -export 'widgets/widgets.dart'; diff --git a/lib/shared/theme/app_theme.dart b/lib/shared/theme/app_theme.dart deleted file mode 100644 index 96a701a..0000000 --- a/lib/shared/theme/app_theme.dart +++ /dev/null @@ -1,211 +0,0 @@ -// -// ignore_for_file: lines_longer_than_80_chars - -import 'package:flex_color_scheme/flex_color_scheme.dart'; -import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; -import 'package:ht_shared/ht_shared.dart'; - -// --- Common Sub-theme Settings --- -// Defines customizations for various components, shared between light/dark themes. -const FlexSubThemesData _commonSubThemesData = FlexSubThemesData( - // --- Card Theme --- - // Slightly rounded corners for cards (headline items) - cardRadius: 8, - // Use default elevation or specify if needed: cardElevation: 2.0, - - // --- AppBar Theme --- - // Example: Use scheme surface color for app bar (often less distracting) - appBarBackgroundSchemeColor: SchemeColor.surface, - // Or keep default: appBarBackgroundSchemeColor: SchemeColor.primary, - // Example: Center title? appBarCenterTitle: true, - - // --- Input Decorator (for Search TextField) --- - // Example: Add a border radius - inputDecoratorRadius: 8, - // Example: Use outline border (common modern style) - inputDecoratorIsFilled: false, - inputDecoratorBorderType: FlexInputBorderType.outline, - - // Add other component themes as needed (Buttons, Dialogs, etc.) -); - -// Helper function to apply common text theme customizations -TextTheme _customizeTextTheme( - TextTheme baseTextTheme, { - required AppTextScaleFactor appTextScaleFactor, - required AppFontWeight appFontWeight, -}) { - print( - '[_customizeTextTheme] Received appFontWeight: $appFontWeight, appTextScaleFactor: $appTextScaleFactor', - ); - // Define font size factors - double factor; - switch (appTextScaleFactor) { - case AppTextScaleFactor.small: - factor = 0.85; - case AppTextScaleFactor.large: - factor = 1.15; - case AppTextScaleFactor.medium: - factor = 1.0; - case AppTextScaleFactor.extraLarge: - factor = 1.3; - } - - // Helper to apply factor safely - double? applyFactor(double? baseSize) => - baseSize != null ? (baseSize * factor).roundToDouble() : null; - - // Map AppFontWeight to FontWeight - FontWeight selectedFontWeight; - switch (appFontWeight) { - case AppFontWeight.light: - selectedFontWeight = FontWeight.w300; - case AppFontWeight.regular: - selectedFontWeight = FontWeight.w400; - case AppFontWeight.bold: - selectedFontWeight = FontWeight.w700; - } - print( - '[_customizeTextTheme] Mapped to selectedFontWeight: $selectedFontWeight', - ); - - return baseTextTheme.copyWith( - // --- Headline/Title Styles --- - // Headlines and titles often have their own explicit weights, - // but we can make them configurable if needed. For now, let's assume - // body text is the primary target for user-defined weight. - headlineLarge: baseTextTheme.headlineLarge?.copyWith( - fontSize: applyFactor(28), - fontWeight: FontWeight.bold, - ), - headlineMedium: baseTextTheme.headlineMedium?.copyWith( - fontSize: applyFactor(24), - fontWeight: FontWeight.bold, - ), - titleLarge: baseTextTheme.titleLarge?.copyWith( - fontSize: applyFactor(18), - fontWeight: FontWeight.w600, - ), - titleMedium: baseTextTheme.titleMedium?.copyWith( - fontSize: applyFactor(16), - fontWeight: FontWeight.w600, - ), - - // --- Body/Content Styles --- - // Apply user-selected font weight to body text - bodyLarge: baseTextTheme.bodyLarge?.copyWith( - fontSize: applyFactor(16), - height: 1.5, - fontWeight: selectedFontWeight, - ), - bodyMedium: baseTextTheme.bodyMedium?.copyWith( - fontSize: applyFactor(14), - height: 1.4, - fontWeight: selectedFontWeight, - ), - - // --- Metadata/Caption Styles --- - // Captions might also benefit from user-defined weight or stay regular. - labelSmall: baseTextTheme.labelSmall?.copyWith( - fontSize: applyFactor(12), - fontWeight: selectedFontWeight, - ), - - // --- Button Style (Usually default is fine) --- - // labelLarge: baseTextTheme.labelLarge?.copyWith(fontSize: 14, fontWeight: FontWeight.bold), - ); -} - -// Helper function to get the appropriate GoogleFonts text theme function -// based on the provided font family name. -// Corrected return type to match GoogleFonts functions (positional optional) -TextTheme Function([TextTheme?]) _getGoogleFontTextTheme(String? fontFamily) { - print('[_getGoogleFontTextTheme] Received fontFamily: $fontFamily'); - switch (fontFamily) { - case 'Roboto': - print('[_getGoogleFontTextTheme] Returning GoogleFonts.robotoTextTheme'); - return GoogleFonts.robotoTextTheme; - case 'OpenSans': - print( - '[_getGoogleFontTextTheme] Returning GoogleFonts.openSansTextTheme', - ); - return GoogleFonts.openSansTextTheme; - case 'Lato': - print('[_getGoogleFontTextTheme] Returning GoogleFonts.latoTextTheme'); - return GoogleFonts.latoTextTheme; - case 'Montserrat': - print( - '[_getGoogleFontTextTheme] Returning GoogleFonts.montserratTextTheme', - ); - return GoogleFonts.montserratTextTheme; - case 'Merriweather': - print( - '[_getGoogleFontTextTheme] Returning GoogleFonts.merriweatherTextTheme', - ); - return GoogleFonts.merriweatherTextTheme; - case 'SystemDefault': - case null: - default: - print( - '[_getGoogleFontTextTheme] Defaulting to GoogleFonts.notoSansTextTheme for input: $fontFamily', - ); - return GoogleFonts.notoSansTextTheme; - } -} - -/// Defines the application's light theme using FlexColorScheme. -/// -/// Takes the active [scheme], [appTextScaleFactor], [appFontWeight], and optional [fontFamily]. -ThemeData lightTheme({ - required FlexScheme scheme, - required AppTextScaleFactor appTextScaleFactor, - required AppFontWeight appFontWeight, - String? fontFamily, -}) { - print( - '[AppTheme.lightTheme] Received scheme: $scheme, appTextScaleFactor: $appTextScaleFactor, appFontWeight: $appFontWeight, fontFamily: $fontFamily', - ); - final textThemeGetter = _getGoogleFontTextTheme(fontFamily); - final baseTextTheme = textThemeGetter(); - - return FlexThemeData.light( - scheme: scheme, - fontFamily: fontFamily, - textTheme: _customizeTextTheme( - baseTextTheme, - appTextScaleFactor: appTextScaleFactor, - appFontWeight: appFontWeight, - ), - subThemesData: _commonSubThemesData, - ); -} - -/// Defines the application's dark theme using FlexColorScheme. -/// -/// Takes the active [scheme], [appTextScaleFactor], [appFontWeight], and optional [fontFamily]. -ThemeData darkTheme({ - required FlexScheme scheme, - required AppTextScaleFactor appTextScaleFactor, - required AppFontWeight appFontWeight, - String? fontFamily, -}) { - print( - '[AppTheme.darkTheme] Received scheme: $scheme, appTextScaleFactor: $appTextScaleFactor, appFontWeight: $appFontWeight, fontFamily: $fontFamily', - ); - final textThemeGetter = _getGoogleFontTextTheme(fontFamily); - final baseTextTheme = textThemeGetter( - ThemeData(brightness: Brightness.dark).textTheme, - ); - - return FlexThemeData.dark( - scheme: scheme, - fontFamily: fontFamily, - textTheme: _customizeTextTheme( - baseTextTheme, - appTextScaleFactor: appTextScaleFactor, - appFontWeight: appFontWeight, - ), - subThemesData: _commonSubThemesData, - ); -} diff --git a/lib/shared/theme/theme.dart b/lib/shared/theme/theme.dart deleted file mode 100644 index 5d889ee..0000000 --- a/lib/shared/theme/theme.dart +++ /dev/null @@ -1,5 +0,0 @@ -/// Barrel file for shared theme elements. -/// Exports application-wide theme definitions like colors and theme data. -library; - -export 'app_theme.dart'; diff --git a/lib/shared/utils/date_formatter.dart b/lib/shared/utils/date_formatter.dart deleted file mode 100644 index 36d85d2..0000000 --- a/lib/shared/utils/date_formatter.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; -import 'package:timeago/timeago.dart' as timeago; - -/// A utility class for formatting dates and times. -abstract final class DateFormatter { - /// Formats the given [dateTime] into a relative time string - /// (e.g., "5m ago", "Yesterday", "now"). - /// - /// Uses the current locale from [context] to format appropriately. - /// Returns an empty string if [dateTime] is null. - static String formatRelativeTime(BuildContext context, DateTime? dateTime) { - if (dateTime == null) { - return ''; - } - final locale = Localizations.localeOf(context).languageCode; - return timeago.format(dateTime, locale: locale); - } - - /// Formats the given [dateTime] into a short date string (e.g., "Jul 1, 2025"). - /// - /// Returns an empty string if [dateTime] is null. - static String formatDate(DateTime? dateTime) { - if (dateTime == null) { - return ''; - } - return DateFormat.yMMMd().format(dateTime); - } -} diff --git a/lib/shared/utils/utils.dart b/lib/shared/utils/utils.dart deleted file mode 100644 index 46a14dd..0000000 --- a/lib/shared/utils/utils.dart +++ /dev/null @@ -1,4 +0,0 @@ -/// Barrel file for shared utility functions. -library; - -export 'date_formatter.dart'; diff --git a/lib/shared/widgets/failure_state_widget.dart b/lib/shared/widgets/failure_state_widget.dart deleted file mode 100644 index 95d157a..0000000 --- a/lib/shared/widgets/failure_state_widget.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:ht_shared/ht_shared.dart'; -import 'package:ht_ui_kit/ht_ui_kit.dart'; -import 'package:ht_dashboard/l10n/l10n.dart'; // Import l10n - -/// A widget to display an error message and an optional retry button. -class FailureStateWidget extends StatelessWidget { - /// Creates a [FailureStateWidget]. - /// - /// This widget accepts an [exception] of type [HtHttpException] - /// and uses the `toFriendlyMessage` extension from `ht_ui_kit` - /// to display a localized, user-friendly error message. - /// - /// The [onRetry] is an optional callback to be called - /// when the retry button is pressed. - const FailureStateWidget({ - required this.exception, - super.key, - this.onRetry, - this.retryButtonText, - }); - - /// The error exception to display. - /// This exception will be converted to a friendly, localized message. - final HtHttpException exception; - - /// An optional callback to be called when the retry button is pressed. - final VoidCallback? onRetry; - - /// Optional custom text for the retry button. Defaults to "Retry". - final String? retryButtonText; - - @override - Widget build(BuildContext context) { - final friendlyMessage = exception.toFriendlyMessage(context); - final l10n = context.l10n; // Get l10n instance - return Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - friendlyMessage, - style: Theme.of(context).textTheme.bodyMedium, - textAlign: TextAlign.center, - ), - // Show the retry button only if onRetry is provided - if (onRetry != null) - Padding( - padding: const EdgeInsets.only(top: 16), - child: ElevatedButton( - onPressed: onRetry, - child: Text(retryButtonText ?? l10n.retryButtonText), - ), - ), - ], - ), - ); - } -} diff --git a/lib/shared/widgets/initial_state_widget.dart b/lib/shared/widgets/initial_state_widget.dart deleted file mode 100644 index 223b485..0000000 --- a/lib/shared/widgets/initial_state_widget.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -class InitialStateWidget extends StatelessWidget { - const InitialStateWidget({ - required this.icon, - required this.headline, - required this.subheadline, - super.key, - }); - - final IconData icon; - final String headline; - final String subheadline; - - @override - Widget build(BuildContext context) { - return Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon(icon, size: 64), - const SizedBox(height: 16), - Text(headline, style: const TextStyle(fontSize: 24)), - Text(subheadline), - ], - ), - ); - } -} diff --git a/lib/shared/widgets/loading_state_widget.dart b/lib/shared/widgets/loading_state_widget.dart deleted file mode 100644 index a464874..0000000 --- a/lib/shared/widgets/loading_state_widget.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:flutter/material.dart'; - -class LoadingStateWidget extends StatelessWidget { - const LoadingStateWidget({ - required this.icon, - required this.headline, - required this.subheadline, - super.key, - }); - - final IconData icon; - final String headline; - final String subheadline; - - @override - Widget build(BuildContext context) { - return Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon(icon, size: 64), - const SizedBox(height: 16), - Text(headline, style: const TextStyle(fontSize: 24)), - Text(subheadline), - const SizedBox(height: 16), - CircularProgressIndicator( - color: Theme.of(context).colorScheme.secondary, - ), - ], - ), - ); - } -} diff --git a/lib/shared/widgets/placeholder_create_page.dart b/lib/shared/widgets/placeholder_create_page.dart deleted file mode 100644 index 333e2cb..0000000 --- a/lib/shared/widgets/placeholder_create_page.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; - -/// {@template placeholder_create_page} -/// A simple placeholder page for content creation forms. -/// {@endtemplate} -class PlaceholderCreatePage extends StatelessWidget { - /// {@macro placeholder_create_page} - const PlaceholderCreatePage({required this.title, super.key}); - - /// The title to display on the page. - final String title; - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(title), - ), - body: Center( - child: Text('Form for "$title" will go here.'), - ), - ); - } -} diff --git a/lib/shared/widgets/widgets.dart b/lib/shared/widgets/widgets.dart deleted file mode 100644 index 08c4d25..0000000 --- a/lib/shared/widgets/widgets.dart +++ /dev/null @@ -1,7 +0,0 @@ -/// Barrel file for shared widgets. -/// Exports common, reusable UI components. -library; - -export 'failure_state_widget.dart'; -export 'initial_state_widget.dart'; -export 'loading_state_widget.dart'; diff --git a/pubspec.lock b/pubspec.lock index e621731..296d295 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -277,7 +277,7 @@ packages: description: path: "." ref: HEAD - resolved-ref: "6484a5641c3d633d286ea5848c5b7cf1e723ebc1" + resolved-ref: "3c50cd082406d4cacafe60ad097ba6fa6ba891eb" url: "https://github.com/headlines-toolkit/ht-http-client.git" source: git version: "0.0.0" @@ -304,7 +304,7 @@ packages: description: path: "." ref: HEAD - resolved-ref: "83d73bdbc965b75425db346da8802be414b9ec0c" + resolved-ref: "2f78ac83c319242822250088c1edb11324404cb3" url: "https://github.com/headlines-toolkit/ht-shared.git" source: git version: "0.0.0" @@ -313,7 +313,7 @@ packages: description: path: "." ref: HEAD - resolved-ref: c33ec118041a9de02c96b177a88d646a08abd396 + resolved-ref: "1c13e5accfa5fad7d262fbc5693780eac6f03fd9" url: "https://github.com/headlines-toolkit/ht-ui-kit.git" source: git version: "0.0.0"