86 lines
2.6 KiB
Dart
86 lines
2.6 KiB
Dart
import 'package:equatable/equatable.dart';
|
|
|
|
/// فئة رحلة واحدة من الاستجابة (tariff/quote).
|
|
class QuoteClassModel extends Equatable {
|
|
final String vehicleClass;
|
|
final String name;
|
|
final int price;
|
|
final String currency;
|
|
final int capacity;
|
|
final String? description;
|
|
final String? imageUrl;
|
|
final int estimatedTime; // ثوانٍ تقريبية
|
|
|
|
const QuoteClassModel({
|
|
required this.vehicleClass,
|
|
required this.name,
|
|
required this.price,
|
|
required this.currency,
|
|
required this.capacity,
|
|
this.description,
|
|
this.imageUrl,
|
|
required this.estimatedTime,
|
|
});
|
|
|
|
factory QuoteClassModel.fromJson(Map<String, dynamic> j) => QuoteClassModel(
|
|
vehicleClass: j['vehicleClass'] as String,
|
|
name: (j['name'] ?? j['vehicleClass']) as String,
|
|
price: j['price'] as int,
|
|
currency: (j['currency'] ?? 'JOD') as String,
|
|
capacity: j['capacity'] as int? ?? 4,
|
|
description: j['description'] as String?,
|
|
imageUrl: j['imageUrl'] as String?,
|
|
estimatedTime: j['estimatedTime'] as int? ?? 0,
|
|
);
|
|
|
|
String get estimatedTimeText {
|
|
final min = estimatedTime ~/ 60;
|
|
return '$min min';
|
|
}
|
|
|
|
@override
|
|
List<Object?> get props => [vehicleClass, name, price, currency, capacity];
|
|
}
|
|
|
|
/// استجابة tariff/quote الكاملة.
|
|
class QuoteModel extends Equatable {
|
|
final String? pickupAddress;
|
|
final String? dropoffAddress;
|
|
final int distanceMeters;
|
|
final int durationSeconds;
|
|
final String? distanceText;
|
|
final String? durationText;
|
|
final String currency;
|
|
final List<QuoteClassModel> classes;
|
|
|
|
const QuoteModel({
|
|
this.pickupAddress,
|
|
this.dropoffAddress,
|
|
required this.distanceMeters,
|
|
required this.durationSeconds,
|
|
this.distanceText,
|
|
this.durationText,
|
|
required this.currency,
|
|
required this.classes,
|
|
});
|
|
|
|
factory QuoteModel.fromJson(Map<String, dynamic> j) {
|
|
final data = j['data'] ?? j;
|
|
return QuoteModel(
|
|
pickupAddress: data['pickupAddress'] as String?,
|
|
dropoffAddress: data['dropoffAddress'] as String?,
|
|
distanceMeters: (data['distanceMeters'] as num?)?.toInt() ?? 0,
|
|
durationSeconds: (data['durationSeconds'] as num?)?.toInt() ?? 0,
|
|
distanceText: data['distanceText'] as String?,
|
|
durationText: data['durationText'] as String?,
|
|
currency: (data['currency'] ?? 'JOD') as String,
|
|
classes: (data['classes'] as List? ?? [])
|
|
.map((c) => QuoteClassModel.fromJson(c as Map<String, dynamic>))
|
|
.toList(),
|
|
);
|
|
}
|
|
|
|
@override
|
|
List<Object?> get props => [distanceMeters, durationSeconds, currency, classes];
|
|
}
|