Files
Holzleitner-Lieferservice-App/lib/bloc/app_states.dart
Dennis Nemec 200992262a feat(flags): Feature-Flags aus Config-Datei; Gutschriften-Abschnitt abschaltbar
- Schalter stehen in assets/feature_flags.json (Key -> enabled +
  Beschreibung) statt als Konstanten im Code
- Enum Feature buendelt die stabilen Keys; FeatureFlags liest die Datei,
  ignoriert unbekannte Keys und nutzt fuer fehlende den Default aus dem Enum
- Laden beim App-Start im AppBloc, bereitgestellt per RepositoryProvider;
  FeatureGate blendet Bereiche bei inaktivem Feature komplett aus
- articles.credit_section = false: Abschnitt "Gutschriften" im
  Artikel-Step ist ausgeblendet
- Bisheriges Stepper-Flag migriert (articles.credit_amount_stepper); die
  fuenf ungenutzten statischen Flags mit veralteten Kommentaren entfernt
- Tests: Asset enthaelt alle Keys, Parsing, Defaults, FeatureGate

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 15:07:40 +02:00

42 lines
1.1 KiB
Dart

import 'package:hl_lieferservice/data/network/backend_environment.dart';
import 'package:hl_lieferservice/feature/feature_flags/feature_flags.dart';
/// Lifecycle-States des App-Bootstraps.
///
/// `AppConfigLoaded` heißt: Server-Config ist gelesen, die aktive Umgebung
/// steht fest, das Networking dafür ist im Locator registriert und die
/// Feature-Schalter sind geladen.
abstract class AppState {
const AppState();
}
class AppInitial extends AppState {
const AppInitial();
}
class AppConfigLoading extends AppState {
const AppConfigLoading();
}
class AppConfigLoaded extends AppState {
const AppConfigLoaded({
required this.catalog,
required this.active,
required this.featureFlags,
});
/// Alle auswählbaren Umgebungen aus der Config-Datei.
final ServerCatalog catalog;
/// Die Umgebung, gegen die die App gerade spricht.
final BackendEnvironment active;
/// Feature-Schalter aus `assets/feature_flags.json`.
final FeatureFlags featureFlags;
}
class AppConfigLoadingFailed extends AppState {
const AppConfigLoadingFailed({required this.message});
final String message;
}