Added Streams to TourRepository

This commit is contained in:
Dennis Nemec
2026-01-03 01:29:21 +01:00
parent edb8676f5a
commit 9111dc92db
43 changed files with 1232 additions and 931 deletions

View File

@ -3,23 +3,19 @@ import 'dart:typed_data';
import 'package:easy_stepper/easy_stepper.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:hl_lieferservice/feature/delivery/detail/bloc/delivery_bloc.dart';
import 'package:hl_lieferservice/feature/delivery/detail/bloc/delivery_event.dart';
import 'package:hl_lieferservice/feature/delivery/detail/bloc/delivery_state.dart';
import 'package:hl_lieferservice/feature/delivery/detail/bloc/note_bloc.dart';
import 'package:hl_lieferservice/feature/delivery/detail/bloc/note_event.dart';
import 'package:hl_lieferservice/feature/delivery/detail/bloc/note_state.dart';
import 'package:hl_lieferservice/feature/delivery/detail/presentation/delivery_sign.dart';
import 'package:hl_lieferservice/feature/delivery/detail/presentation/steps/step.dart';
import 'package:hl_lieferservice/feature/delivery/overview/bloc/tour_bloc.dart';
import 'package:hl_lieferservice/feature/delivery/overview/bloc/tour_event.dart';
import 'package:hl_lieferservice/feature/delivery/overview/bloc/tour_state.dart';
import 'package:hl_lieferservice/model/delivery.dart' as model;
import 'package:hl_lieferservice/model/delivery.dart';
class DeliveryDetail extends StatefulWidget {
final model.Delivery delivery;
final String deliveryId;
const DeliveryDetail({super.key, required this.delivery});
const DeliveryDetail({super.key, required this.deliveryId});
@override
State<StatefulWidget> createState() => _DeliveryDetailState();
@ -33,11 +29,6 @@ class _DeliveryDetailState extends State<DeliveryDetail> {
void initState() {
super.initState();
// Initialize BLOC
context.read<DeliveryBloc>().add(
LoadDeliveryEvent(delivery: widget.delivery),
);
// Reset Note BLOC
// otherwise the notes of the previously
// opened delivery would be loaded
@ -124,28 +115,27 @@ class _DeliveryDetailState extends State<DeliveryDetail> {
}
}
void _openSignatureView() {
void _openSignatureView(Delivery delivery) {
Navigator.of(context).push(
MaterialPageRoute(
builder:
(context) =>
SignatureView(onSigned: _onSign, delivery: widget.delivery),
SignatureView(onSigned: _onSign, delivery: delivery),
),
);
}
void _onSign(Uint8List customer, Uint8List driver) async {
final currentState = context.read<DeliveryBloc>().state as DeliveryLoaded;
context.read<DeliveryBloc>().add(
context.read<TourBloc>().add(
FinishDeliveryEvent(
delivery: currentState.delivery,
deliveryId: widget.deliveryId,
customerSignature: customer,
driverSignature: driver,
),
);
}
Widget _stepsNavigation() {
Widget _stepsNavigation(Delivery delivery) {
return SizedBox(
width: double.infinity,
height: 90,
@ -160,9 +150,9 @@ class _DeliveryDetailState extends State<DeliveryDetail> {
padding: const EdgeInsets.only(left: 20),
child: FilledButton(
onPressed:
_step == _steps.length - 1
? _openSignatureView
: _clickForward,
() => _step == _steps.length - 1
? _openSignatureView(delivery)
: _clickForward,
child:
_step == _steps.length - 1
? const Text("Unterschreiben")
@ -178,48 +168,27 @@ class _DeliveryDetailState extends State<DeliveryDetail> {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Auslieferungsdetails")),
body: BlocConsumer<DeliveryBloc, DeliveryState>(
listener: (context, state) {
if (state is DeliveryFinished) {
final tourState = context.read<TourBloc>().state as TourLoaded;
final newTour = tourState.tour.copyWith(
deliveries:
tourState.tour.deliveries.map((delivery) {
if (delivery.id == state.delivery.id) {
return state.delivery;
}
body: BlocBuilder<TourBloc, TourState>(builder: (context, state) {
final currentState = state;
return delivery;
}).toList(),
);
if (currentState is TourLoaded) {
Delivery delivery = currentState.tour.deliveries.firstWhere((delivery) => delivery.id == widget.deliveryId);
return Column(
children: [
_stepInfo(),
const Divider(),
Expanded(
child:
StepFactory().make(_step, delivery) ??
_stepMissingWarning(),
),
_stepsNavigation(delivery),
],
);
}
context.read<TourBloc>().add(UpdateTour(tour: newTour));
Navigator.pop(context);
Navigator.pop(context);
}
},
builder: (context, state) {
final currentState = state;
if (currentState is DeliveryLoaded) {
return Column(
children: [
_stepInfo(),
const Divider(),
Expanded(
child:
StepFactory().make(_step, currentState.delivery) ??
_stepMissingWarning(),
),
_stepsNavigation(),
],
);
}
return Container();
},
),
return const Center(child: CircularProgressIndicator(),);
}),
);
}
}