Add initial project files and configurations for bus_running_record app

This commit is contained in:
ImBenji
2026-03-25 17:19:53 +00:00
parent f5da563c29
commit e41e14e252
151 changed files with 9829 additions and 0 deletions
+44
View File
@@ -0,0 +1,44 @@
import "dart:typed_data";
import "../models/trip.dart";
import "../models/brr_metadata.dart";
import "../exporters/brr_exporter.dart";
import "../exporters/arriva_brr_exporter.dart";
import "../exporters/stagecoach_brr_exporter.dart";
enum BRROperator { arriva, stagecoach }
class ExportResult {
final Uint8List? bytes;
final List<String> errors;
bool get isSuccess => errors.isEmpty;
ExportResult.success(this.bytes) : errors = [];
ExportResult.error(this.errors) : bytes = null;
}
class BRRExportService {
final BRROperator operator;
BRRExportService({this.operator = BRROperator.arriva});
BRRExporter get _exporter {
switch (operator) {
case BRROperator.arriva:
return ArrivaBRRExporter();
case BRROperator.stagecoach:
return StagecoachBRRExporter();
}
}
Future<ExportResult> exportBRR(
List<Trip> trips,
BRRMetadata metadata,
) async {
try {
final bytes = await _exporter.export(trips, metadata);
return ExportResult.success(bytes);
} catch (e) {
return ExportResult.error(["Export failed: $e"]);
}
}
}
+33
View File
@@ -0,0 +1,33 @@
import "dart:convert";
import "package:hive_flutter/hive_flutter.dart";
import "../models/brr_state.dart";
class StorageService {
static const _boxName = "brr_box";
static const _stateKey = "brr_state";
Future<Box<String>> _openBox() => Hive.openBox<String>(_boxName);
Future<void> saveState(BRRState state) async {
final box = await _openBox();
await box.put(_stateKey, jsonEncode(state.toJson()));
}
Future<BRRState?> loadState() async {
final box = await _openBox();
final jsonString = box.get(_stateKey);
if (jsonString == null) return null;
try {
return BRRState.fromJson(jsonDecode(jsonString) as Map<String, dynamic>);
} catch (e) {
return null;
}
}
Future<void> clearState() async {
final box = await _openBox();
await box.delete(_stateKey);
}
}