fetchConfig method

Future<void> fetchConfig()

Fetch the request configuration from the backend and advance to the welcome step once loaded.

Implementation

Future<void> fetchConfig() async {
  _loading = true;
  _progress = 0;
  notifyListeners();

  try {
    updateProgress(5);
    await _apiService.fetchToken();
    updateProgress(12);
    final config = await _apiService.fetchRequestConfig();
    updateProgress(72);
    _requestConfig = config;

    // Check if request returned an error (e.g. PROCESSED)
    if (config['error'] == true) {
      _configErrorMessage = config['message'] as String?;
      _loading = false;
      goToStep(DataleonFlowStep.alreadyProcessed);
      return;
    }

    final workspaceString =
        config['result']?['metadata']?['workspace'] as String?;
    if (workspaceString != null && workspaceString.isNotEmpty) {
      _workspace = jsonDecode(workspaceString) as Map<String, dynamic>;
    }
    final language =
        config['result']?['metadata']?['language'] as String? ??
        dashboardConfiguration['languageApp'] as String?;
    if (language != null && language.isNotEmpty) {
      _languageCode = language;
    }
    updateProgress(100);

    // Keep the loader visible after reaching 100%.
    await Future.delayed(const Duration(milliseconds: 2600));

    _loading = false;
    goToStep(DataleonFlowStep.welcome);
  } catch (e) {
    _configErrorMessage = e.toString();
    _loading = false;
    // 403 / PROCESSED → alreadyProcessed, other errors → error page
    if (e is DataleonApiException && e.statusCode == 403) {
      goToStep(DataleonFlowStep.alreadyProcessed);
    } else {
      goToStep(DataleonFlowStep.error);
    }
  }
}