Skip to content

Commit d8205e9

Browse files
authored
Merge pull request #3166 from acterglobal/ben-fix-gray-screen
Run our own locales for Jiffy to fix gray screens
2 parents a7c64ee + fec680b commit d8205e9

File tree

5 files changed

+138
-21
lines changed

5 files changed

+138
-21
lines changed

.changes/3166-gray-screens.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
- [Fix] gray screens appearing on some locales we didn't have full support for

app/lib/features/main/app_shell.dart

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import 'package:acter/common/providers/space_providers.dart';
55
import 'package:acter/common/tutorial_dialogs/bottom_navigation_tutorials/bottom_navigation_tutorials.dart';
66
import 'package:acter/config/constants.dart';
77
import 'package:acter/common/utils/device.dart';
8+
import 'package:acter/features/settings/providers/notifiers/locale_notifier.dart';
89
import 'package:acter/router/routes.dart';
910
import 'package:acter/config/notifications/init.dart';
1011
import 'package:acter/features/activities/providers/activities_providers.dart';
@@ -30,6 +31,7 @@ import 'package:acter/l10n/generated/l10n.dart';
3031
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
3132
import 'package:flutter_riverpod/flutter_riverpod.dart';
3233
import 'package:go_router/go_router.dart';
34+
import 'package:jiffy/jiffy.dart';
3335
import 'package:logging/logging.dart';
3436
import 'package:matomo_tracker/matomo_tracker.dart';
3537
import 'package:screenshot/screenshot.dart';
@@ -94,13 +96,24 @@ class AppShellState extends ConsumerState<AppShell> {
9496
_initDeepLinking();
9597
// initalize main providers
9698
_initProviders();
97-
9899
// these want to be sure to execute in order
99100
await _initNotifications();
100101
// calendar sync
101102
await _initCalendarSync();
102103
}
103104

105+
void _initLocale() async {
106+
final language = ref.watch(localeProvider);
107+
final lang = L10n.of(context);
108+
final localeRelativeDateTime = LocaleRelativeDateTime(lang);
109+
await Jiffy.setLocale(
110+
language,
111+
startOfWeek: localeRelativeDateTime.startOfWeek(),
112+
ordinals: localeRelativeDateTime.ordinals(),
113+
relativeDateTime: localeRelativeDateTime,
114+
);
115+
}
116+
104117
Future<void> _initTracking() async {
105118
// listen to matomo analytics provider for opt in or out
106119
ref.listenManual(matomoAnalyticsProvider, (previous, next) {
@@ -182,6 +195,7 @@ class AppShellState extends ConsumerState<AppShell> {
182195

183196
@override
184197
Widget build(BuildContext context) {
198+
_initLocale();
185199
// get platform of context.
186200
if (ref.watch(clientProvider).valueOrNull == null) {
187201
// at the very startup we might not yet have a client loaded
@@ -211,7 +225,10 @@ class AppShellState extends ConsumerState<AppShell> {
211225
body: Screenshot(
212226
controller: screenshotController,
213227
child: Column(
214-
children: [CrossSigning(), Expanded(child: buildBody(context))],
228+
children: [
229+
CrossSigning(),
230+
Expanded(child: buildBody(context)),
231+
],
215232
),
216233
),
217234
),
@@ -235,9 +252,8 @@ class AppShellState extends ConsumerState<AppShell> {
235252
config: <Breakpoint, SlotLayoutConfig?>{
236253
Breakpoints.mediumLargeAndUp: SlotLayout.from(
237254
key: const Key('primaryNavigation'),
238-
builder:
239-
(BuildContext context) =>
240-
SidebarWidget(navigationShell: widget.navigationShell),
255+
builder: (BuildContext context) =>
256+
SidebarWidget(navigationShell: widget.navigationShell),
241257
),
242258
},
243259
);
@@ -261,19 +277,15 @@ class AppShellState extends ConsumerState<AppShell> {
261277
key: Keys.mainNav,
262278
inAnimation: AdaptiveScaffold.bottomToTop,
263279
outAnimation: AdaptiveScaffold.topToBottom,
264-
builder:
265-
(context) => BottomNavigationWidget(
266-
navigationShell: widget.navigationShell,
267-
),
280+
builder: (context) =>
281+
BottomNavigationWidget(navigationShell: widget.navigationShell),
268282
),
269283
Breakpoints.medium: SlotLayout.from(
270284
key: Keys.mainNav,
271285
inAnimation: AdaptiveScaffold.bottomToTop,
272286
outAnimation: AdaptiveScaffold.topToBottom,
273-
builder:
274-
(context) => BottomNavigationWidget(
275-
navigationShell: widget.navigationShell,
276-
),
287+
builder: (context) =>
288+
BottomNavigationWidget(navigationShell: widget.navigationShell),
277289
),
278290
},
279291
);

app/lib/features/settings/providers/notifiers/locale_notifier.dart

Lines changed: 69 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,71 @@ import 'package:acter/features/settings/model/language_model.dart';
33
import 'package:acter_flutter_sdk/acter_flutter_sdk.dart';
44
import 'package:flutter/foundation.dart';
55
import 'package:intl/intl.dart';
6+
import 'package:jiffy/jiffy.dart';
7+
import 'package:acter/l10n/generated/l10n.dart';
8+
9+
class LocaleRelativeDateTime extends RelativeDateTime {
10+
final L10n locale;
11+
12+
LocaleRelativeDateTime(this.locale);
13+
14+
@override
15+
String prefixAgo() => locale.localePrefixAgo;
16+
17+
@override
18+
String prefixFromNow() => locale.localePrefixFromNow;
19+
20+
@override
21+
String suffixAgo() => locale.localeSuffixAgo;
22+
23+
@override
24+
String suffixFromNow() => locale.localeSuffixFromNow;
25+
26+
@override
27+
String lessThanOneMinute(int seconds) => locale.localeLessThanOneMinute;
28+
29+
@override
30+
String aboutAMinute(int minutes) => locale.localeAboutAMinute;
31+
32+
@override
33+
String minutes(int minutes) => locale.localeMinutes(minutes);
34+
35+
@override
36+
String aboutAnHour(int minutes) => locale.localeAboutAnHour;
37+
38+
@override
39+
String hours(int hours) => locale.localeHours(hours);
40+
41+
@override
42+
String aDay(int hours) => locale.localeADay;
43+
44+
@override
45+
String days(int days) => locale.localeDays(days);
46+
47+
@override
48+
String aboutAMonth(int days) => locale.localeAboutAMonth;
49+
50+
@override
51+
String months(int months) => locale.localeMonths(months);
52+
53+
@override
54+
String aboutAYear(int year) => locale.localeAboutAYear;
55+
56+
@override
57+
String years(int years) => locale.localeYears(years);
58+
59+
@override
60+
String wordSeparator() => locale.localeWordSeparator;
61+
62+
Ordinals ordinals() => Ordinals(
63+
first: locale.localeOrdinalFirst,
64+
second: locale.localeOrdinalSecond,
65+
third: locale.localeOrdinalThird,
66+
nth: locale.localeOrdinalNth,
67+
);
68+
69+
StartOfWeek startOfWeek() => StartOfWeek.monday;
70+
}
671

772
class LocaleNotifier extends StateNotifier<String> {
873
LocaleNotifier() : super('en');
@@ -13,11 +78,10 @@ class LocaleNotifier extends StateNotifier<String> {
1378
final prefInstance = await sharedPrefs();
1479
final prefLanguageCode = prefInstance.getString(languagePrefKey);
1580
final deviceLanguageCode = PlatformDispatcher.instance.locale.languageCode;
16-
final bool isLanguageContain =
17-
LanguageModel.allLanguagesList
18-
.where((element) => element.languageCode == deviceLanguageCode)
19-
.toList()
20-
.isNotEmpty;
81+
final bool isLanguageContain = LanguageModel.allLanguagesList
82+
.where((element) => element.languageCode == deviceLanguageCode)
83+
.toList()
84+
.isNotEmpty;
2185

2286
if (prefLanguageCode != null) {
2387
_localSet(prefLanguageCode);

app/lib/l10n/app_en.arb

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2964,6 +2964,47 @@
29642964
"@activism": {},
29652965
"localGroup": "Local Group",
29662966
"@localGroup": {},
2967+
2968+
"localePrefixAgo": "",
2969+
"@localePrefixAgo": {},
2970+
"localePrefixFromNow": "in",
2971+
"@localePrefixFromNow": {},
2972+
"localeSuffixAgo": "ago",
2973+
"@localeSuffixAgo": {},
2974+
"localeSuffixFromNow": "",
2975+
"@localeSuffixFromNow": {},
2976+
"localeLessThanOneMinute": "a few seconds",
2977+
"@localeLessThanOneMinute": {},
2978+
"localeAboutAMinute": "a minute",
2979+
"@localeAboutAMinute": {},
2980+
"localeMinutes": "{minutes} minutes",
2981+
"@localeMinutes": {},
2982+
"localeAboutAnHour": "an hour",
2983+
"@localeAboutAnHour": {},
2984+
"localeHours": "{hours} hours",
2985+
"@localeHours": {},
2986+
"localeADay": "a day",
2987+
"@localeADay": {},
2988+
"localeDays": "{days} days",
2989+
"localeAboutAMonth": "a month",
2990+
"@localeAboutAMonth": {},
2991+
"localeMonths": "{months} months",
2992+
"@localeMonths": {},
2993+
"localeAboutAYear": "a year",
2994+
"@localeAboutAYear": {},
2995+
"localeYears": "{years} years",
2996+
"@localeYears": {},
2997+
"localeWordSeparator": " ",
2998+
"@localeWordSeparator": {},
2999+
"localeOrdinalFirst": "st",
3000+
"@localeOrdinalFirst": {},
3001+
"localeOrdinalSecond": "nd",
3002+
"@localeOrdinalSecond": {},
3003+
"localeOrdinalThird": "rd",
3004+
"@localeOrdinalThird": {},
3005+
"localeOrdinalNth": "th",
3006+
3007+
29673008
"unionizing": "Unionizing",
29683009
"@unionizing": {},
29693010
"cooperation": "Cooperatives",

app/lib/main.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,8 @@ Future<void> _startAppInner(Widget app, bool withAnalytics) async {
107107

108108
// allows us to check whether the user has activated tracing
109109
// and prevent reporting otherwise.
110-
options.beforeSend =
111-
(SentryEvent evt, Hint hint) =>
112-
sentryBeforeSend(mainProviderContainer, evt, hint);
110+
options.beforeSend = (SentryEvent evt, Hint hint) =>
111+
sentryBeforeSend(mainProviderContainer, evt, hint);
113112
}, appRunner: () => runApp(wrappedApp));
114113
} else {
115114
runApp(wrappedApp);

0 commit comments

Comments
 (0)