From 382d7bd6a27a5bc853ac82b07fec352e2c606dc1 Mon Sep 17 00:00:00 2001 From: fulleni Date: Mon, 21 Jul 2025 17:20:47 +0100 Subject: [PATCH 01/11] chore: remove shared ui files --- lib/shared/constants/app_spacing.dart | 40 ---- lib/shared/constants/constants.dart | 2 +- .../localization/ar_timeago_messages.dart | 43 ---- .../localization/en_timeago_messages.dart | 43 ---- lib/shared/shared.dart | 3 - lib/shared/theme/app_theme.dart | 211 ------------------ lib/shared/theme/theme.dart | 5 - lib/shared/utils/date_formatter.dart | 29 --- lib/shared/utils/utils.dart | 4 - lib/shared/widgets/failure_state_widget.dart | 59 ----- lib/shared/widgets/initial_state_widget.dart | 29 --- lib/shared/widgets/loading_state_widget.dart | 33 --- .../widgets/placeholder_create_page.dart | 24 -- lib/shared/widgets/widgets.dart | 7 - pubspec.lock | 6 +- 15 files changed, 4 insertions(+), 534 deletions(-) delete mode 100644 lib/shared/constants/app_spacing.dart delete mode 100644 lib/shared/localization/ar_timeago_messages.dart delete mode 100644 lib/shared/localization/en_timeago_messages.dart delete mode 100644 lib/shared/theme/app_theme.dart delete mode 100644 lib/shared/theme/theme.dart delete mode 100644 lib/shared/utils/date_formatter.dart delete mode 100644 lib/shared/utils/utils.dart delete mode 100644 lib/shared/widgets/failure_state_widget.dart delete mode 100644 lib/shared/widgets/initial_state_widget.dart delete mode 100644 lib/shared/widgets/loading_state_widget.dart delete mode 100644 lib/shared/widgets/placeholder_create_page.dart delete mode 100644 lib/shared/widgets/widgets.dart diff --git a/lib/shared/constants/app_spacing.dart b/lib/shared/constants/app_spacing.dart deleted file mode 100644 index ddc23d98..00000000 --- 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 index e92c41a1..a34d6333 100644 --- a/lib/shared/constants/constants.dart +++ b/lib/shared/constants/constants.dart @@ -2,4 +2,4 @@ /// Exports application-wide constant definitions. library; -export 'app_spacing.dart'; +export 'pagination_constants.dart'; diff --git a/lib/shared/localization/ar_timeago_messages.dart b/lib/shared/localization/ar_timeago_messages.dart deleted file mode 100644 index a4de4608..00000000 --- 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 f3f284aa..00000000 --- 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 e7c04f2a..d7b67ef6 100644 --- a/lib/shared/shared.dart +++ b/lib/shared/shared.dart @@ -6,6 +6,3 @@ 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 96a701af..00000000 --- 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 5d889ee2..00000000 --- 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 36d85d29..00000000 --- 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 46a14dda..00000000 --- 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 95d157a6..00000000 --- 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 223b485d..00000000 --- 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 a4648740..00000000 --- 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 333e2cbe..00000000 --- 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 08c4d251..00000000 --- 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 e621731b..296d295c 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" From 658d2305a641a3b59a9271035dfbb41f5f6c5259 Mon Sep 17 00:00:00 2001 From: fulleni Date: Mon, 21 Jul 2025 17:22:32 +0100 Subject: [PATCH 02/11] refactor(bootstrap): update imports and remove timeago localization - Remove unused imports for timeago localization - Add import for ht_ui_kit package - Remove unused kIsWeb constant from HtHttpClient --- lib/bootstrap.dart | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/bootstrap.dart b/lib/bootstrap.dart index 71747338..64de387e 100644 --- a/lib/bootstrap.dart +++ b/lib/bootstrap.dart @@ -8,8 +8,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 +15,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 +47,6 @@ Future bootstrap( httpClient = HtHttpClient( baseUrl: appConfig.baseUrl, tokenProvider: () => authenticationRepository.getAuthToken(), - isWeb: kIsWeb, ); authClient = HtAuthApi( httpClient: httpClient, From 7cbc04515a29982caefe935b3f9de2915382e60c Mon Sep 17 00:00:00 2001 From: fulleni Date: Mon, 21 Jul 2025 17:30:58 +0100 Subject: [PATCH 03/11] refactor(bootstrap): remove unused import - Removed unused import of 'package:flutter/foundation.dart' show kIsWeb; --- lib/bootstrap.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/bootstrap.dart b/lib/bootstrap.dart index 64de387e..f9de1ad5 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'; From 90feb1221cc15e5629a34630fe0ebb8931661b56 Mon Sep 17 00:00:00 2001 From: fulleni Date: Mon, 21 Jul 2025 17:31:17 +0100 Subject: [PATCH 04/11] refactor(dashboard): migrate to ht_ui_kit and remove app_theme import - Replace app_spacing import with ht_ui_kit in app_shell.dart - Remove app_theme import from app.dart - Update AppShell build method to use AppLocalizationsX for l10n --- lib/app/view/app.dart | 1 - lib/app/view/app_shell.dart | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/app/view/app.dart b/lib/app/view/app.dart index ab32bb57..9c86a5f0 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 da6d8e2e..59450474 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), From 8f0438cce57869451387af7ffff7a41805cb8261 Mon Sep 17 00:00:00 2001 From: fulleni Date: Mon, 21 Jul 2025 17:31:35 +0100 Subject: [PATCH 05/11] refactor(app_configuration): use AppLocalizationsX for localization - Replace context.l10n with AppLocalizationsX(context).l10n for consistent localization - Remove unused imports - Simplify some widget code --- .../view/app_configuration_page.dart | 126 +++++++++--------- 1 file changed, 61 insertions(+), 65 deletions(-) diff --git a/lib/app_configuration/view/app_configuration_page.dart b/lib/app_configuration/view/app_configuration_page.dart index 6c3bb2bd..0b11f3c7 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,17 @@ 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 +277,7 @@ class _AppConfigurationPageState extends State dialogContext, ).colorScheme.onError, ), - child: Text(context.l10n.confirmSaveButton), + child: Text(AppLocalizationsX(context).l10n.confirmSaveButton), ), ], ); @@ -292,7 +290,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 +369,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 +448,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 +507,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 +521,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 +531,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 +551,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 +565,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 +576,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 +592,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 +609,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 +626,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 +832,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 +1099,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 +1306,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) { From f95f7aac0dce78282cf16cf0c25f6bbb00d00765 Mon Sep 17 00:00:00 2001 From: fulleni Date: Mon, 21 Jul 2025 17:31:49 +0100 Subject: [PATCH 06/11] refactor(authentication): use AppLocalizationsX for localization - Replace context.l10n with AppLocalizationsX(context).l10n in multiple files - Remove unused import of app_spacing.dart --- lib/authentication/view/authentication_page.dart | 3 +-- lib/authentication/view/email_code_verification_page.dart | 5 ++--- lib/authentication/view/request_code_page.dart | 5 ++--- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/lib/authentication/view/authentication_page.dart b/lib/authentication/view/authentication_page.dart index badc86e8..da4762cf 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 33a3ec4c..950f52f3 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 25b67577..97771697 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; From 098c4748b73f545bca23c0ddaba1c98e1b3a562e Mon Sep 17 00:00:00 2001 From: fulleni Date: Mon, 21 Jul 2025 17:32:11 +0100 Subject: [PATCH 07/11] refactor(content_management): update imports and localization - Update imports to use ht_ui_kit package - Replace context.l10n with AppLocalizationsX(context).l10n for localization - Remove unused imports related to spacing and pagination constants - Remove duplicate widgets provided by ht_ui_kit package --- lib/content_management/view/content_management_page.dart | 4 ++-- lib/content_management/view/create_headline_page.dart | 3 +-- lib/content_management/view/create_source_page.dart | 3 +-- lib/content_management/view/create_topic_page.dart | 3 +-- lib/content_management/view/edit_headline_page.dart | 2 +- lib/content_management/view/edit_source_page.dart | 2 +- lib/content_management/view/edit_topic_page.dart | 2 +- lib/content_management/view/headlines_page.dart | 7 ++----- lib/content_management/view/sources_page.dart | 7 ++----- lib/content_management/view/topics_page.dart | 4 ++-- 10 files changed, 14 insertions(+), 23 deletions(-) diff --git a/lib/content_management/view/content_management_page.dart b/lib/content_management/view/content_management_page.dart index cfbc6a99..2e023654 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 b751f80e..bf44367f 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 a11f2af7..d09fef49 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 4b617c0f..55bbaa23 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 6505d56b..f27badba 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 73ee884e..90c6d4d0 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 e2df650f..625daee4 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 41f89c6c..634a6cd1 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 d06451d8..9474a3eb 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 a6540b1e..dc6f189e 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( From 809c48d68362778615b9783a169f83c6051828ae Mon Sep 17 00:00:00 2001 From: fulleni Date: Mon, 21 Jul 2025 17:32:19 +0100 Subject: [PATCH 08/11] refactor(dashboard): update localization and UI imports - Replace shared package import with ht_ui_kit package - Use AppLocalizationsX for localization in multiple widgets - Remove unused import of ht_shared --- lib/dashboard/view/dashboard_page.dart | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/dashboard/view/dashboard_page.dart b/lib/dashboard/view/dashboard_page.dart index 6988ca2c..26420815 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( From 8ef91c139b0678e034cab9f4a327a21feabe0b00 Mon Sep 17 00:00:00 2001 From: fulleni Date: Mon, 21 Jul 2025 17:32:33 +0100 Subject: [PATCH 09/11] refactor(settings): optimize imports and localization - Remove unused imports - Replace context.l10n with AppLocalizationsX(context).l10n for consistency - Remove unnecessary comments --- lib/settings/view/settings_page.dart | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/settings/view/settings_page.dart b/lib/settings/view/settings_page.dart index 9a1ce91b..42856c80 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), From 83bcb30d23da02825c19d1c59f9f7bca5937962b Mon Sep 17 00:00:00 2001 From: fulleni Date: Mon, 21 Jul 2025 17:32:50 +0100 Subject: [PATCH 10/11] refactor(shared): remove unused constants and update localization - Remove constants file and pagination constants - Update ContentStatusL10n extension to use AppLocalizationsX - Remove constants export from shared.dart --- lib/shared/constants/constants.dart | 5 ----- lib/shared/constants/pagination_constants.dart | 2 -- lib/shared/extensions/content_status_l10n.dart | 2 +- lib/shared/shared.dart | 1 - 4 files changed, 1 insertion(+), 9 deletions(-) delete mode 100644 lib/shared/constants/constants.dart delete mode 100644 lib/shared/constants/pagination_constants.dart diff --git a/lib/shared/constants/constants.dart b/lib/shared/constants/constants.dart deleted file mode 100644 index a34d6333..00000000 --- a/lib/shared/constants/constants.dart +++ /dev/null @@ -1,5 +0,0 @@ -/// Barrel file for shared constants. -/// Exports application-wide constant definitions. -library; - -export 'pagination_constants.dart'; diff --git a/lib/shared/constants/pagination_constants.dart b/lib/shared/constants/pagination_constants.dart deleted file mode 100644 index 5f6b2a9b..00000000 --- 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 3e52c83a..5a723d1e 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/shared.dart b/lib/shared/shared.dart index d7b67ef6..93385306 100644 --- a/lib/shared/shared.dart +++ b/lib/shared/shared.dart @@ -4,5 +4,4 @@ /// the application to promote consistency and maintainability. library; -export 'constants/constants.dart'; export 'extensions/extensions.dart'; From fd7677f4a5f6c60ac58149d14b565e23e1dfc631 Mon Sep 17 00:00:00 2001 From: fulleni Date: Mon, 21 Jul 2025 17:33:10 +0100 Subject: [PATCH 11/11] format: style --- lib/app_configuration/bloc/app_configuration_bloc.dart | 6 ++++-- lib/app_configuration/view/app_configuration_page.dart | 8 ++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/app_configuration/bloc/app_configuration_bloc.dart b/lib/app_configuration/bloc/app_configuration_bloc.dart index 08b26a47..5a70521d 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 0b11f3c7..488d7c18 100644 --- a/lib/app_configuration/view/app_configuration_page.dart +++ b/lib/app_configuration/view/app_configuration_page.dart @@ -261,7 +261,9 @@ class _AppConfigurationPageState extends State style: Theme.of(dialogContext).textTheme.titleLarge, ), content: Text( - AppLocalizationsX(context).l10n.confirmConfigUpdateDialogContent, + AppLocalizationsX( + context, + ).l10n.confirmConfigUpdateDialogContent, style: Theme.of(dialogContext).textTheme.bodyMedium, ), actions: [ @@ -277,7 +279,9 @@ class _AppConfigurationPageState extends State dialogContext, ).colorScheme.onError, ), - child: Text(AppLocalizationsX(context).l10n.confirmSaveButton), + child: Text( + AppLocalizationsX(context).l10n.confirmSaveButton, + ), ), ], );