Skip to content

Commit

Permalink
fix: All DateFormats use the current locale
Browse files Browse the repository at this point in the history
  • Loading branch information
bdlukaa committed Sep 5, 2024
1 parent 56edb43 commit 710d335
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 14 deletions.
9 changes: 9 additions & 0 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_localized_locales/flutter_localized_locales.dart';
import 'package:intl/date_symbol_data_local.dart';
import 'package:intl/intl.dart';
import 'package:path/path.dart' as path;
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
Expand All @@ -82,6 +84,8 @@ Future<void> main(List<String> args) async {
runApp(const SplashScreen());
}

await initializeDateFormatting();

DevHttpOverrides.configureCertificates();
API.initialize();
await UnityVideoPlayerInterface.instance.initialize();
Expand Down Expand Up @@ -426,6 +430,11 @@ class _UnityAppState extends State<UnityApp>

return null;
},
builder: (context, child) {
Intl.defaultLocale = Localizations.localeOf(context).languageCode;

return child!;
},
);
}),
);
Expand Down
35 changes: 25 additions & 10 deletions lib/providers/settings_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,11 @@ class _SettingsOption<T> {
late final String Function(T value) saveAs;
late final T Function(String value) loadFrom;
final ValueChanged<T>? onChanged;
final T Function()? valueOverrider;
final T Function(T value)? valueOverrider;

late T _value;

T get value => valueOverrider?.call() ?? _value;
T get value => valueOverrider?.call(_value) ?? _value;
set value(T newValue) {
SettingsProvider.instance.updateProperty(() {
_value = newValue;
Expand Down Expand Up @@ -329,23 +329,38 @@ class SettingsProvider extends UnityProvider {
key: 'application.language_code',
);

final kDateFormat = _SettingsOption(
def: DateFormat('EEEE, dd MMMM yyyy'),
late final kDateFormat = _SettingsOption(
def: DateFormat(
'EEEE, dd MMMM yyyy',
kLanguageCode.value.toLanguageTag(),
),
key: 'application.date_format',
valueOverrider: (value) {
return DateFormat(value.pattern, kLanguageCode.value.toLanguageTag());
},
);

static const availableTimeFormats = ['HH:mm', 'hh:mm a'];
final kTimeFormat = _SettingsOption(
def: DateFormat('hh:mm a'),
late final kTimeFormat = _SettingsOption(
def: DateFormat('hh:mm a', kLanguageCode.value.toLanguageTag()),
key: 'application.time_format',
valueOverrider: (value) {
return DateFormat(value.pattern, kLanguageCode.value.toLanguageTag());
},
);

/// The extended time format adds the second to the time format.
DateFormat get extendedTimeFormat {
return switch (kTimeFormat.value.pattern!) {
'HH:mm' => DateFormat('HH:mm:ss'),
'hh:mm a' => DateFormat('hh:mm:ss a'),
_ => DateFormat(kTimeFormat.value.pattern),
'HH:mm' => DateFormat('HH:mm:ss', kLanguageCode.value.toLanguageTag()),
'hh:mm a' => DateFormat(
'hh:mm:ss a',
kLanguageCode.value.toLanguageTag(),
),
_ => DateFormat(
kTimeFormat.value.pattern,
kLanguageCode.value.toLanguageTag(),
),
};
}

Expand Down Expand Up @@ -445,7 +460,7 @@ class SettingsProvider extends UnityProvider {
..zoom.softwareZoom = value;
}
},
valueOverrider: isHardwareZoomSupported ? () => true : null,
valueOverrider: isHardwareZoomSupported ? (_) => true : null,
);
final kEventsMatrixedZoom = _SettingsOption(
def: true,
Expand Down
8 changes: 6 additions & 2 deletions lib/screens/events_timeline/desktop/timeline_sidebar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import 'package:bluecherry_client/widgets/misc.dart';
import 'package:bluecherry_client/widgets/search.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';

class TimelineSidebar extends StatefulWidget {
Expand Down Expand Up @@ -90,8 +91,11 @@ class _TimelineSidebarState extends State<TimelineSidebar> with Searchable {
loc.dateFilter,
style: const TextStyle(fontWeight: FontWeight.bold),
),
subtitle: AutoSizeText(
widget.date.formatDecoratedDate(context),
trailing: AutoSizeText(
widget.date.formatDecoratedDate(
context,
DateFormat('EEE, dd MMM yyyy'),
),
maxLines: 1,
),
onTap: () async {
Expand Down
5 changes: 3 additions & 2 deletions lib/utils/date.dart
Original file line number Diff line number Diff line change
Expand Up @@ -161,9 +161,10 @@ extension DateTimeExtension on DateTime? {
}

/// Formats the date string.
String formatDecoratedDate(BuildContext context) {
String formatDecoratedDate(BuildContext context, [DateFormat? format]) {
final loc = AppLocalizations.of(context);
final settings = context.read<SettingsProvider>();
format ??= settings.kDateFormat.value;

var date = this;
if (settings.kConvertTimeToLocalTimezone.value) date = date?.toLocal();
Expand All @@ -178,7 +179,7 @@ extension DateTimeExtension on DateTime? {
)) {
return loc.yesterday;
} else {
return settings.kDateFormat.value.format(date);
return format!.format(date);
}
}();

Expand Down

0 comments on commit 710d335

Please sign in to comment.