Skip to content

Commit ef503f6

Browse files
committed
fix: edge case, when apiKey is null, show the cram screen instead of an
error
1 parent 14f6753 commit ef503f6

File tree

3 files changed

+17
-21
lines changed

3 files changed

+17
-21
lines changed

packages/dart/npt_flutter/lib/constants.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'dart:async' show FutureOr;
12
import 'dart:developer' show log;
23

34
import 'package:flutter/material.dart';
@@ -14,7 +15,7 @@ typedef RootDomainMap = Map<String, RootDomainMetadata>;
1415
typedef ResolvedRootDomainMetadata = ({
1516
String description,
1617
String? registrarUrl,
17-
String? apiKey,
18+
FutureOr<String?> apiKey,
1819
});
1920
typedef ResolvedRootDomainMap = Map<String, ResolvedRootDomainMetadata>;
2021

@@ -39,7 +40,7 @@ class Constants {
3940
return dotenv.env["APP_API_KEY"];
4041
}
4142

42-
static Future<String?> getApiKey(String? registrarUrl) async {
43+
static Future<String?> _getApiKey(String? registrarUrl) async {
4344
if (registrarUrl == null) return null;
4445
await loadDotenv();
4546
String key = "API_KEY_${registrarUrl.toUpperCase().replaceAll(".", "_")}";
@@ -76,7 +77,7 @@ class Constants {
7677
return _rootDomainMap.map((k, v) {
7778
late String desc;
7879
var reg = v.registrarUrl;
79-
var api = v.apiKey ?? getApiKey(reg);
80+
var api = v.apiKey ?? _getApiKey(reg);
8081
if (v.description is String Function(BuildContext)) {
8182
desc = v.description.call(context);
8283
} else {

packages/dart/npt_flutter/lib/features/onboarding/widgets/onboarding_button.dart

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,9 @@ class _OnboardingButtonState extends State<OnboardingButton> {
129129
bool isFromInitState = false}) async {
130130
var atSigns =
131131
await KeyChainManager.getInstance().getAtSignListFromKeychain();
132-
final regUrl =
133-
Constants.getRootDomains(App.navState.currentContext!)[rootDomain]
134-
?.registrarUrl;
135-
var apiKey = await Constants.getApiKey(regUrl);
132+
final roots =
133+
Constants.getRootDomains(App.navState.currentContext!)[rootDomain];
134+
var apiKey = await roots?.apiKey;
136135
var config = AtOnboardingConfig(
137136
atClientPreference:
138137
await AtClientMethods.loadAtClientPreference(rootDomain),
@@ -228,18 +227,14 @@ class _OnboardingButtonState extends State<OnboardingButton> {
228227
final rootDomain = context
229228
.read<OnboardingCubit>()
230229
.getRootDomain(); // Or get from your state/cubit if needed
231-
final regUrl =
230+
final root =
232231
// ignore: use_build_context_synchronously
233-
Constants.getRootDomains(context)[rootDomain]?.registrarUrl;
234-
final apiKey = await Constants.getApiKey(regUrl);
232+
Constants.getRootDomains(context)[rootDomain];
235233

236-
if (apiKey == null) {
237-
result = AtOnboardingResult.error(
238-
message: strings.errorAtSignNotExist,
239-
);
240-
break;
234+
final apiKey = await root?.apiKey;
235+
if (apiKey != null) {
236+
AtOnboardingConstants.setApiKey(apiKey!);
241237
}
242-
AtOnboardingConstants.setApiKey(apiKey);
243238
AtOnboardingConstants.rootDomain =
244239
util.config.atClientPreference.rootDomain;
245240

@@ -252,7 +247,7 @@ class _OnboardingButtonState extends State<OnboardingButton> {
252247
// ignore: use_build_context_synchronously
253248
context: context,
254249
barrierDismissible: false,
255-
builder: (context) => (regUrl == null)
250+
builder: (context) => (root?.registrarUrl == null || apiKey == null)
256251
? ActivateCramDialog(
257252
atSign: atsign,
258253
config: util.config,
@@ -262,7 +257,7 @@ class _OnboardingButtonState extends State<OnboardingButton> {
262257
atSign: atsign,
263258
apiKey: apiKey,
264259
config: util.config,
265-
registrarUrl: regUrl,
260+
registrarUrl: root!.registrarUrl!,
266261
onboardingUtil: util,
267262
waitForTeapot: initialStatus != AtSignStatus.teapot,
268263
),

packages/dart/npt_flutter/lib/widgets/switch_atsign_button.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,8 @@ class SwitchAtsignButton extends StatelessWidget {
103103
await AtOnboarding.changePrimaryAtsign(atsign: selectedAtSign);
104104

105105
if (!currentContext.mounted) return;
106-
final regUrl = Constants.getRootDomains(currentContext)[rootDomain]
107-
?.registrarUrl;
106+
final root = Constants.getRootDomains(currentContext)[rootDomain];
107+
108108
if (result) {
109109
final onboardingResult = await AtOnboarding.onboard(
110110
atsign: selectedAtSign,
@@ -114,7 +114,7 @@ class SwitchAtsignButton extends StatelessWidget {
114114
atClientPreference: atClientPreference,
115115
domain: rootDomain,
116116
rootEnvironment: RootEnvironment.Production,
117-
appAPIKey: await Constants.getApiKey(regUrl),
117+
appAPIKey: await root?.apiKey,
118118
),
119119
);
120120
log("onboarding result: $onboardingResult");

0 commit comments

Comments
 (0)