- 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>
42 lines
1.1 KiB
Dart
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;
|
|
}
|