Add initial project files and configurations for bus_running_record app
This commit is contained in:
@@ -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"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user