Final commit.
This commit is contained in:
@ -1,43 +1,20 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:hl_lieferservice/bloc/app_events.dart';
|
||||
import 'package:hl_lieferservice/bloc/app_states.dart';
|
||||
import 'package:hl_lieferservice/main.dart';
|
||||
import 'package:hl_lieferservice/repository/config.dart';
|
||||
|
||||
import '../services/erpframe.dart';
|
||||
|
||||
/// App-Bootstrap-Bloc.
|
||||
///
|
||||
/// Vor der Backend-Migration lud dieser Bloc eine `hl_server_config.json` aus
|
||||
/// assets, parste daraus eine `backendUrl` und persistierte sie ins Dateisystem.
|
||||
/// Mit dem Wechsel auf das Rust-Backend kommt die URL über `BackendConfig`
|
||||
/// (compile-time, siehe `data/network/backend_config.dart`); der App-Bloc
|
||||
/// emittiert jetzt nur noch sofort `AppConfigLoaded`, damit die UI ihre
|
||||
/// üblichen Phasen-Übergänge behält.
|
||||
class AppBloc extends Bloc<AppEvents, AppState> {
|
||||
AppBloc() : super(AppInitial()) {
|
||||
on<AppLoadConfig>(_loadConfig);
|
||||
}
|
||||
|
||||
Future<void> _loadConfig(AppLoadConfig event, Emitter<AppState> emit) async {
|
||||
emit(AppConfigLoading());
|
||||
try {
|
||||
final repository = ConfigurationRepository(path: event.path);
|
||||
final configuration = LocalDocuFrameConfiguration.fromJson(
|
||||
json.decode(await rootBundle.loadString("assets/${event.path}")),
|
||||
);
|
||||
|
||||
repository.setDocuFrameConfiguration(configuration);
|
||||
|
||||
var config = await repository.getDocuFrameConfiguration();
|
||||
locator.registerSingleton<LocalDocuFrameConfiguration>(config);
|
||||
|
||||
emit(AppConfigLoaded(config: config));
|
||||
} catch (e, st) {
|
||||
debugPrint(e.toString());
|
||||
debugPrint(st.toString());
|
||||
|
||||
emit(
|
||||
AppConfigLoadingFailed(
|
||||
message: "Fehler beim Laden der Konfigurationsdatei.",
|
||||
),
|
||||
);
|
||||
}
|
||||
AppBloc() : super(const AppInitial()) {
|
||||
on<AppLoadConfig>((event, emit) {
|
||||
emit(const AppConfigLoading());
|
||||
emit(const AppConfigLoaded());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,16 +1,27 @@
|
||||
import '../services/erpframe.dart';
|
||||
|
||||
abstract class AppState {}
|
||||
|
||||
class AppInitial extends AppState {}
|
||||
class AppConfigLoading extends AppState {}
|
||||
class AppConfigLoaded extends AppState {
|
||||
LocalDocuFrameConfiguration config;
|
||||
|
||||
AppConfigLoaded({required this.config});
|
||||
/// Lifecycle-States des App-Bootstraps.
|
||||
///
|
||||
/// Die alte `LocalDocuFrameConfiguration` mit `backendUrl` ist mit der
|
||||
/// Backend-Migration entfallen — die App-Konfiguration kommt jetzt aus
|
||||
/// `BackendConfig` (compile-time) und nicht mehr aus einer asset-JSON.
|
||||
/// Das `AppConfigLoaded`-Signal bleibt als Marker, dass der App-Bootstrap
|
||||
/// abgeschlossen ist (Networking ist registriert, Token-Provider steht).
|
||||
abstract class AppState {
|
||||
const AppState();
|
||||
}
|
||||
class AppConfigLoadingFailed extends AppState {
|
||||
String message;
|
||||
|
||||
AppConfigLoadingFailed({required this.message});
|
||||
}
|
||||
class AppInitial extends AppState {
|
||||
const AppInitial();
|
||||
}
|
||||
|
||||
class AppConfigLoading extends AppState {
|
||||
const AppConfigLoading();
|
||||
}
|
||||
|
||||
class AppConfigLoaded extends AppState {
|
||||
const AppConfigLoaded();
|
||||
}
|
||||
|
||||
class AppConfigLoadingFailed extends AppState {
|
||||
const AppConfigLoadingFailed({required this.message});
|
||||
final String message;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user