check null safety

This commit is contained in:
tzw
2021-09-10 14:27:38 +06:30
parent a144c945b6
commit 7670779b03
57 changed files with 620 additions and 626 deletions

View File

@@ -1,9 +1,9 @@
import 'auth_status.dart';
class AuthResult {
AuthStatus authStatus;
String authErrorCode;
String authErrorMsg;
AuthStatus? authStatus;
String? authErrorCode;
String? authErrorMsg;
AuthResult({this.authStatus, this.authErrorCode, this.authErrorMsg});
}

View File

@@ -1,28 +1,28 @@
class CargoType {
String id;
String name;
String? id;
String? name;
double rate;
double weight;
bool isChecked;
int qty;
bool isCutomDuty;
bool? isCutomDuty;
double customDutyFee;
double get calAmount => (calRate ?? 0) * (calWeight ?? 0);
double calRate;
double calWeight;
double get calAmount => calRate * calWeight;
CargoType(
{this.id,
this.name,
this.rate,
this.weight,
this.calWeight,
this.calRate,
this.rate = 0,
this.weight = 0,
this.calWeight = 0,
this.calRate = 0,
this.isChecked = false,
this.qty = 0,
this.isCutomDuty,
this.customDutyFee});
this.customDutyFee = 0});
factory CargoType.fromMap(Map<String, dynamic> map, String id) {
return CargoType(
@@ -52,7 +52,7 @@ class CargoType {
}
CargoType clone() {
return CargoType.fromMap(toMap(), this.id);
return CargoType.fromMap(toMap(), this.id!);
}
@override
@@ -63,7 +63,7 @@ class CargoType {
@override
String toString() {
return name;
return name ?? "";
}
bool isChangedForEdit(CargoType cargoType) {

View File

@@ -9,61 +9,60 @@ import 'cargo_type.dart';
import 'package.dart';
class Carton {
String id;
String shipmentID;
String shipmentNumber;
String senderID;
String senderFCSID;
String senderName;
String? id;
String? shipmentID;
String? shipmentNumber;
String? senderID;
String? senderFCSID;
String? senderName;
String boxNumber;
String status;
String cargoDesc;
String desc;
String? boxNumber;
String? status;
String? cargoDesc;
String? desc;
double width;
double height;
double length;
int shipmentWeight;
bool isChecked;
bool isShipmentCarton;
String cartonType;
String fcsID;
String userName;
String userID;
String fcsShipmentID;
String fcsShipmentNumber;
String mixCartonID;
String mixCartonNumber;
String cartonSizeID;
String cartonSizeName;
double cartonWeight;
int? shipmentWeight;
bool? isChecked;
bool? isShipmentCarton;
String? cartonType;
String? fcsID;
String? userName;
String? userID;
String? fcsShipmentID;
String? fcsShipmentNumber;
String? mixCartonID;
String? mixCartonNumber;
String? cartonSizeID;
String? cartonSizeName;
double? cartonWeight;
int rate;
int weight;
String packageType;
String pickUpID;
List<String> photos;
String remark;
DateTime arrivedDate;
String cartonNumber;
String? packageType;
String? pickUpID;
List<String> photos = [];
String? remark;
DateTime? arrivedDate;
String? cartonNumber;
List<String> packageIDs;
List<Package> packages;
List<CargoType> cargoTypes;
List<CargoType> cargoTypes = [];
DeliveryAddress deliveryAddress;
Shipment shipment;
DeliveryAddress? deliveryAddress;
Shipment? shipment;
//for mix box
String mixBoxType;
String? mixBoxType;
List<Carton> mixCartons;
List<String> mixCartonIDs;
int get amount => rate != null && weight != null ? rate * weight : 0;
int get amount => rate != null && weight != null ? (rate * weight) : 0;
// String get packageNumber =>
// shipmentNumber + "-" + receiverNumber + " #" + boxNumber;
double get price => rate.toDouble() * weight;
double get actualWeight =>
cargoTypes == null ? 0 : cargoTypes.fold(0, (p, e) => e.weight + p);
@@ -84,15 +83,15 @@ class Carton {
/// getCargoTypeForCalWeight returns carton with shipment weight
List<CargoType> getCargoTypeForCalWeight(double volumetricRatio) {
// get shipment weight
double volume = (length ?? 0) * (width ?? 0) * (height ?? 0);
double sw = volume / volumetricRatio ?? 0;
double volume = length * width * height;
double sw = volume / volumetricRatio;
// get actual weight
double aw = cargoTypes.fold(0.0, (p, c) => p + c.weight);
if (aw == 0 || sw == 0) return [];
cargoTypes.forEach((e) {
double calWeight = aw > sw ? e.weight : e.weight / aw * sw;
double calWeight = aw > sw ? e.weight : (e.weight / aw) * sw;
e.calWeight = calWeight;
});
return cargoTypes;
@@ -116,7 +115,7 @@ class Carton {
double total = 0;
cargoTypes.forEach((e) {
double r =
e.rate - (discountByWeight != null ? discountByWeight.discount : 0);
e.rate - (discountByWeight != null ? (discountByWeight.discount) : 0);
double amount = e.weight * r;
total += amount;
});
@@ -134,9 +133,9 @@ class Carton {
this.senderName,
this.boxNumber,
this.desc,
this.width,
this.height,
this.length,
this.width = 0,
this.height = 0,
this.length = 0,
this.shipmentWeight,
this.isChecked = false,
this.cartonType,
@@ -151,13 +150,13 @@ class Carton {
this.status,
this.arrivedDate,
this.cargoDesc,
this.shipmentHistory,
this.packages,
this.cargoTypes,
this.shipmentHistory = const [],
this.packages = const [],
this.cargoTypes = const [],
this.cartonNumber,
this.fcsShipmentID,
this.fcsShipmentNumber,
this.packageIDs,
this.packageIDs = const [],
this.mixCartonID,
this.mixCartonNumber,
this.isShipmentCarton = false,
@@ -165,14 +164,14 @@ class Carton {
this.cartonSizeID,
this.cartonSizeName,
this.mixBoxType,
this.mixCartons,
this.mixCartonIDs,
this.mixCartons = const [],
this.mixCartonIDs = const [],
this.cartonWeight});
Map<String, dynamic> toMap() {
List _cargoTypes = cargoTypes?.map((c) => c.toMap())?.toList() ?? [];
List _packages = packages?.map((c) => c.toJson())?.toList();
List _mixCartons = mixCartons?.map((c) => c.toJson())?.toList();
List _cargoTypes = cargoTypes.map((c) => c.toMap()).toList();
List _packages = packages.map((c) => c.toJson()).toList();
List _mixCartons = mixCartons.map((c) => c.toJson()).toList();
return {
'id': id,
'fcs_shipment_id': fcsShipmentID,
@@ -213,9 +212,9 @@ class Carton {
shipmentNumber: map['shipment_number'],
// receiverNumber: map['receiver_number'],
boxNumber: map['box_number'],
length: double.tryParse(map['length']?.toString()),
width: double.tryParse(map['width']?.toString()),
height: double.tryParse(map['height']?.toString()),
length: double.tryParse(map['length'].toString()) ?? 0,
width: double.tryParse(map['width'].toString()) ?? 0,
height: double.tryParse(map['height'].toString()) ?? 0,
userName: map['user_name'],
fcsID: map['fcs_id'],
cartonType: map['carton_type'],
@@ -242,8 +241,8 @@ class Carton {
Map<String, dynamic> toJson() {
List _cargoTypes = cargoTypes.map((c) => c.toMap()).toList();
List _packages = packages?.map((c) => c.toJson())?.toList();
List _mixCartons = mixCartons?.map((c) => c.toJson())?.toList();
List _packages = packages.map((c) => c.toJson()).toList();
List _mixCartons = mixCartons.map((c) => c.toJson()).toList();
return {
'id': id,
'fcs_shipment_id': fcsShipmentID,

View File

@@ -1,10 +1,11 @@
class CartonSize {
String id;
String name;
String? id;
String? name;
double length;
double width;
double height;
CartonSize({this.id, this.name, this.length, this.width, this.height});
CartonSize(
{this.id, this.name, this.length = 0, this.width = 0, this.height = 0});
Map<String, dynamic> toMap() {
return {
@@ -27,19 +28,10 @@ class CartonSize {
}
@override
bool operator ==(other) {
if (identical(this, other)) {
return true;
}
return other.id == this.id;
}
bool operator ==(Object other) => other is CartonSize && other.id == id;
@override
int get hashCode {
int result = 17;
result = 37 * result + id.hashCode;
return result;
}
int get hashCode => id.hashCode;
bool isChangedForEdit(CartonSize cartonSize) {
return cartonSize.name != this.name ||

View File

@@ -1,11 +1,15 @@
class CustomDuty {
String id;
String productType;
String desc;
String? id;
String? productType;
String? desc;
double fee;
double shipmentRate;
CustomDuty(
{this.id, this.productType, this.desc, this.fee, this.shipmentRate});
{this.id,
this.productType,
this.desc,
this.fee = 0,
this.shipmentRate = 0});
factory CustomDuty.fromMap(Map<String, dynamic> map, String id) {
return CustomDuty(

View File

@@ -1,10 +1,8 @@
class Customer {
String id;
String name;
String phoneNumber;
String status;
String? id;
String? name;
String? phoneNumber;
String? status;
Customer({
this.id,

View File

@@ -1,9 +1,9 @@
class Discount {
String id;
String code;
String customerId;
String customerName;
String status;
String? id;
String? code;
String? customerId;
String? customerName;
String? status;
double amount;
Discount({
@@ -11,7 +11,7 @@ class Discount {
this.code,
this.customerId,
this.customerName,
this.amount,
this.amount = 0,
this.status,
});

View File

@@ -1,9 +1,9 @@
class DiscountByWeight {
String id;
String? id;
double weight;
double discount;
DiscountByWeight({this.id, this.weight, this.discount});
DiscountByWeight({this.id, this.weight = 0, this.discount = 0});
factory DiscountByWeight.fromMap(Map<String, dynamic> map, String id) {
return DiscountByWeight(

View File

@@ -1,16 +1,17 @@
class FAQ {
String id;
int sn;
String questionEng;
String questionMm;
String answerEng;
String answerMm;
String pageLinkLabelEng;
String pageLinkLabelMm;
String pageLink;
String? id;
int? sn;
String? questionEng;
String? questionMm;
String? answerEng;
String? answerMm;
String? pageLinkLabelEng;
String? pageLinkLabelMm;
String? pageLink;
String question(bool isEng) => isEng ? questionEng : questionMm;
String answer(bool isEng) => isEng ? answerEng : answerMm;
String question(bool isEng) =>
isEng ? (questionEng ?? "") : (questionMm ?? "");
String answer(bool isEng) => isEng ? (answerEng ?? "") : (answerMm ?? "");
FAQ(
{this.id,

View File

@@ -3,17 +3,18 @@ import 'package:cloud_firestore/cloud_firestore.dart';
import '../constants.dart';
class FcsShipment {
String id;
String shipmentNumber;
DateTime cutoffDate;
String shipType;
DateTime arrivalDate;
DateTime departureDate;
String consignee;
String port;
String destination;
String status;
String reportName;
String? id;
String? shipmentNumber;
DateTime? cutoffDate;
String? shipType;
DateTime? arrivalDate;
DateTime? departureDate;
String? consignee;
String? port;
String? destination;
String? status;
String? reportName;
FcsShipment({
this.id,
this.shipmentNumber,
@@ -51,10 +52,10 @@ class FcsShipment {
return {
"id": id,
'shipment_number': shipmentNumber,
'cutoff_date': cutoffDate?.toUtc()?.toIso8601String(),
'cutoff_date': cutoffDate?.toUtc().toIso8601String(),
'shipment_type': shipType,
'arrival_date': arrivalDate?.toUtc()?.toIso8601String(),
'departure_date': departureDate?.toUtc()?.toIso8601String(),
'arrival_date': arrivalDate?.toUtc().toIso8601String(),
'departure_date': departureDate?.toUtc().toIso8601String(),
'consignee': consignee,
'port': port,
'destination': destination,

View File

@@ -10,15 +10,15 @@ import 'package:fcs/domain/entities/rate.dart';
import 'package:fcs/domain/entities/shipment.dart';
class Invoice {
String id;
String invoiceNumber;
DateTime invoiceDate;
String fcsShipmentID;
String userID;
String fcsID;
String userName;
String phoneNumber;
String status;
String? id;
String? invoiceNumber;
DateTime? invoiceDate;
String? fcsShipmentID;
String? userID;
String? fcsID;
String? userName;
String? phoneNumber;
String? status;
double handlingFee;
double deliveryFee;
@@ -30,9 +30,9 @@ class Invoice {
List<CargoType> cargoTypes;
List<Shipment> shipments;
List<Payment> payments;
Discount discount;
PaymentMethod paymentMethod;
String invoiceURL;
Discount? discount;
PaymentMethod? paymentMethod;
String? invoiceURL;
List<CargoType> getCargoTypes(Rate rate) {
if (cargoTypes != null) return cargoTypes;
@@ -40,7 +40,7 @@ class Invoice {
List<CargoType> _cargoTypes = [];
double totalCalWeight = 0;
cartons.forEach((carton) {
if (carton.isChecked) {
if (carton.isChecked ?? false) {
var _cartonsTypes =
carton.getCargoTypeForCalWeight(rate.volumetricRatio);
_cartonsTypes.forEach((ct) {
@@ -68,15 +68,15 @@ class Invoice {
double getTotal(Rate rate) {
List<CargoType> cargoTypes = getCargoTypes(rate);
var total = cargoTypes.fold(0.0, (p, c) => c.calAmount + p);
double total = cargoTypes.fold(0.0, (p, c) => c.calAmount + p);
return total;
}
double get balance => (amount ?? 0) - (paidAmount ?? 0);
double get balance => amount - paidAmount;
double getNetAmount(Rate rate) {
List<CargoType> cargoTypes = getCargoTypes(rate);
var total = cargoTypes.fold(0.0, (p, c) => c.calAmount + p);
double total = cargoTypes.fold(0.0, (p, c) => c.calAmount + p);
total += getCustomFee();
total += getDeliveryFee();
total += getHandlingFee();
@@ -85,13 +85,13 @@ class Invoice {
}
double getHandlingFee() {
return shipments?.where((sh) => sh.isSelected ?? false)?.fold(0, (p, s) {
return p + (s?.handlingFee ?? 0) - (s?.paidHandlingFee ?? 0);
});
return shipments
.where((sh) => sh.isSelected)
.fold(0, (p, s) => p + (s.handlingFee - s.paidHandlingFee));
}
double getTotalBalance(Rate rate) {
return getNetAmount(rate) - (paidAmount ?? 0);
return getNetAmount(rate) - paidAmount;
}
double getCustomFee() {
@@ -102,7 +102,7 @@ class Invoice {
return deliveryFee == null ? 0 : deliveryFee;
}
double getDiscount() => discount == null ? 0 : discount.amount;
double getDiscount() => discount == null ? 0 : discount!.amount;
Invoice(
{this.id,
@@ -111,19 +111,19 @@ class Invoice {
this.fcsID,
this.userName,
this.phoneNumber,
this.amount,
this.paidAmount,
this.amount = 0,
this.paidAmount = 0,
this.discount,
this.status,
this.customDuties,
this.cartons,
this.cargoTypes,
this.handlingFee,
this.deliveryFee,
this.customDuties = const [],
this.cartons = const [],
this.cargoTypes = const [],
this.handlingFee = 0,
this.deliveryFee = 0,
this.fcsShipmentID,
this.shipments,
this.shipments = const [],
this.invoiceURL,
this.payments,
this.payments = const [],
this.paymentMethod});
factory Invoice.fromMap(Map<String, dynamic> map, String docID) {
@@ -153,7 +153,7 @@ class Invoice {
return Invoice(
id: docID,
invoiceNumber: map['invoice_number'],
invoiceDate: invd?.toDate(),
invoiceDate: invd.toDate(),
userName: map['user_name'],
fcsID: map['fcs_id'],
phoneNumber: map['phone_number'],
@@ -174,12 +174,12 @@ class Invoice {
Map<String, dynamic> toMap() {
List _cargoTypes = cargoTypes.map((c) => c.toMap()).toList();
List _customDuties = customDuties?.map((c) => c.toMap())?.toList();
List _cartons = cartons?.map((c) => c.toMap())?.toList() ?? [];
List _shipments = shipments?.map((s) => s.toMap())?.toList() ?? [];
List _customDuties = customDuties.map((c) => c.toMap()).toList();
List _cartons = cartons.map((c) => c.toMap()).toList();
List _shipments = shipments.map((s) => s.toMap()).toList();
return {
"id": id,
"invoice_date": invoiceDate?.toUtc()?.toIso8601String(),
"invoice_date": invoiceDate?.toUtc().toIso8601String(),
"user_id": userID,
"user_name": userName,
"invoice_number": invoiceNumber,

View File

@@ -1,11 +1,8 @@
class Market {
String id;
String name;
String? id;
String? name;
Market({
this.id,
this.name,
});
Market({this.id, this.name});
Map<String, dynamic> toMap() {
return {

View File

@@ -5,35 +5,35 @@ import 'package:fcs/domain/vo/delivery_address.dart';
import 'package:fcs/domain/vo/shipment_status.dart';
class Package {
String id;
String trackingID;
String userID;
String fcsID;
String userName;
String phoneNumber;
DateTime currentStatusDate;
String? id;
String? trackingID;
String? userID;
String? fcsID;
String? userName;
String? phoneNumber;
DateTime? currentStatusDate;
List<String> photoUrls;
List<ShipmentStatus> shipmentHistory;
String desc;
String? desc;
String status;
String shipmentNumber;
String senderFCSID;
String senderName;
String senderPhoneNumber;
String boxNumber;
String cargoDesc;
String market;
String? status;
String? shipmentNumber;
String? senderFCSID;
String? senderName;
String? senderPhoneNumber;
String? boxNumber;
String? cargoDesc;
String? market;
bool isChecked;
int rate;
int weight;
String packageType;
String pickUpID;
List<String> photos;
String remark;
DateTime arrivedDate;
DeliveryAddress deliveryAddress;
String? packageType;
String? pickUpID;
// List<String> photos;
String? remark;
DateTime? arrivedDate;
DeliveryAddress? deliveryAddress;
//for packages in processing
List<File> photoFiles;
@@ -42,35 +42,34 @@ class Package {
double get price => rate.toDouble() * weight;
Package({
this.id,
this.trackingID,
this.userID,
this.userName,
this.fcsID,
this.phoneNumber,
this.shipmentNumber,
this.senderFCSID,
this.senderName,
this.boxNumber,
this.rate,
this.weight,
this.packageType,
this.pickUpID,
this.remark,
this.status,
this.arrivedDate,
this.cargoDesc,
this.market,
this.shipmentHistory,
this.currentStatusDate,
this.photoUrls,
this.desc,
this.deliveryAddress,
this.isChecked = false,
this.photoFiles,
this.senderPhoneNumber
});
Package(
{this.id,
this.trackingID,
this.userID,
this.userName,
this.fcsID,
this.phoneNumber,
this.shipmentNumber,
this.senderFCSID,
this.senderName,
this.boxNumber,
this.rate = 0,
this.weight = 0,
this.packageType,
this.pickUpID,
this.remark,
this.status,
this.arrivedDate,
this.cargoDesc,
this.market,
this.shipmentHistory = const [],
this.currentStatusDate,
this.photoUrls = const [],
this.desc,
this.deliveryAddress,
this.isChecked = false,
this.photoFiles = const [],
this.senderPhoneNumber});
factory Package.fromMap(Map<String, dynamic> map, String docID) {
var _currentStatusDate = (map['status_date'] as Timestamp);
@@ -98,9 +97,7 @@ class Package {
senderName: map['sender_name'],
senderPhoneNumber: map['sender_phone_number'],
deliveryAddress: _da,
currentStatusDate: _currentStatusDate != null
? _currentStatusDate.toDate().toLocal()
: null,
currentStatusDate: _currentStatusDate.toDate().toLocal(),
photoUrls: _photoUrls,
shipmentHistory: _shipmentStatus);
}

View File

@@ -1,11 +1,11 @@
import 'package:cloud_firestore/cloud_firestore.dart';
class Payment {
String id;
String invoiceID;
DateTime paymentDate;
String paymentReceiptURL;
String status;
String? id;
String? invoiceID;
DateTime? paymentDate;
String? paymentReceiptURL;
String? status;
double amount;
Payment(
@@ -14,13 +14,13 @@ class Payment {
this.paymentDate,
this.paymentReceiptURL,
this.status,
this.amount});
this.amount = 0});
factory Payment.fromMap(Map<String, dynamic> map, String id) {
var _paymentDate = (map['payment_date'] as Timestamp);
return Payment(
id: id,
paymentDate: _paymentDate?.toDate(),
paymentDate: _paymentDate.toDate(),
paymentReceiptURL: map['payment_receipt_url'],
status: map['status'],
amount: map['amount']?.toDouble() ?? 0,
@@ -31,7 +31,7 @@ class Payment {
return {
"id": id,
"invoice_id": invoiceID,
'payment_date': paymentDate?.toUtc()?.toIso8601String(),
'payment_date': paymentDate?.toUtc().toIso8601String(),
'payment_receipt_url': paymentReceiptURL,
'status': status,
'amount': amount,
@@ -39,7 +39,7 @@ class Payment {
}
Payment clone() {
return Payment.fromMap(toMap(), this.id);
return Payment.fromMap(toMap(), this.id!);
}
@override

View File

@@ -1,11 +1,11 @@
class PaymentMethod {
String id;
String name;
String accountName;
String account;
String phone;
String email;
String link;
String? id;
String? name;
String? accountName;
String? account;
String? phone;
String? email;
String? link;
PaymentMethod(
{this.id,

View File

@@ -1,15 +1,15 @@
import 'package:fcs/domain/entities/package.dart';
class Processing {
String id;
String? id;
//for consignee
String userID;
String userName;
String userPhoneNumber;
String? userID;
String? userName;
String? userPhoneNumber;
//for shipper
String fcsID;
String shipperName;
String shipperPhoneNumber;
String? fcsID;
String? shipperName;
String? shipperPhoneNumber;
List<Package> packages;
@@ -21,7 +21,7 @@ class Processing {
this.fcsID,
this.shipperName,
this.shipperPhoneNumber,
this.packages});
this.packages = const []});
@override
bool operator ==(Object other) => other is Processing && other.id == id;

View File

@@ -1,4 +1,3 @@
import 'package:fcs/domain/entities/discount_by_weight.dart';
import 'cargo_type.dart';
@@ -11,26 +10,25 @@ class Rate {
double diffDiscountWeight;
double diffWeightRate;
List<CargoType> cargoTypes;
List<CargoType> customDuties;
List<DiscountByWeight> discountByWeights;
List<CargoType> cargoTypes = [];
List<CargoType> customDuties = [];
List<DiscountByWeight> discountByWeights = [];
DiscountByWeight getDiscountByWeight(double weight) {
discountByWeights.sort((d1, d2) => d2.weight.compareTo(d1.weight));
return discountByWeights.firstWhere((e) => e.weight < weight,
orElse: () => null);
return discountByWeights.firstWhere((e) => e.weight < weight);
}
CargoType get defaultCargoType => cargoTypes == null
CargoType? get defaultCargoType => cargoTypes == null
? null
: cargoTypes.firstWhere((e) => e.name == "General");
Rate(
{this.deliveryFee,
this.freeDeliveryWeight,
this.volumetricRatio,
this.diffDiscountWeight,
this.diffWeightRate});
{this.deliveryFee = 0,
this.freeDeliveryWeight = 0,
this.volumetricRatio = 0,
this.diffDiscountWeight = 0,
this.diffWeightRate = 0});
factory Rate.fromMap(Map<String, dynamic> map) {
return Rate(

View File

@@ -1,9 +1,9 @@
class Receipt {
String id;
int amount;
String date;
String status;
String fileUrl;
String? id;
int? amount = 0;
String? date;
String? status;
String? fileUrl;
Receipt({this.id, this.amount, this.date, this.status, this.fileUrl});
}

View File

@@ -9,21 +9,20 @@ List<Day> dayLists = [
];
class Setting {
final int supportBuildNum;
final int? supportBuildNum;
// contact page
String usaAddress;
String mmAddress;
String usaContactNumber;
String mmContactNumber;
String emailAddress;
String facebookLink;
bool inviteRequired;
String appUrl;
final String termsEng;
final String termsMm;
String about;
String courierWebsite;
String? usaAddress;
String? mmAddress;
String? usaContactNumber;
String? mmContactNumber;
String? emailAddress;
String? facebookLink;
bool? inviteRequired;
String? appUrl;
final String? termsEng;
final String? termsMm;
String? about;
String? courierWebsite;
List<String> shipmentTypes;
@@ -40,7 +39,7 @@ class Setting {
this.termsEng,
this.termsMm,
this.about,
this.shipmentTypes,
this.shipmentTypes = const [],
this.courierWebsite});
factory Setting.fromMap(Map<String, dynamic> map) {
@@ -76,9 +75,9 @@ class Setting {
}
class Day {
int id;
String name;
bool isChecked = false;
int? id;
String? name;
bool? isChecked = false;
Day({this.id, this.name, this.isChecked});
@override

View File

@@ -4,35 +4,35 @@ import 'package:fcs/domain/entities/carton.dart';
import 'package:fcs/domain/vo/delivery_address.dart';
class Shipment {
String id;
String shipmentNumber;
String shipmentType;
DeliveryAddress pickupAddress;
DateTime pickupDate;
String pickupTimeStart;
String pickupTimeEnd;
String? id;
String? shipmentNumber;
String? shipmentType;
DeliveryAddress? pickupAddress;
DateTime? pickupDate;
String? pickupTimeStart;
String? pickupTimeEnd;
String userName;
String userID;
String phoneNumber;
int numberOfPackage;
int weight;
double handlingFee;
double paidHandlingFee;
String address;
String status;
String? userName;
String? userID;
String? phoneNumber;
int numberOfPackage = 0;
int weight = 0;
double handlingFee = 0;
double paidHandlingFee = 0;
String? address;
String? status;
bool isCourier;
int radioIndex;
List<Carton> boxes;
String pickupUserID;
String pickupUserName;
String pickupUserPhoneNumber;
String? pickupUserID;
String? pickupUserName;
String? pickupUserPhoneNumber;
String fcsShipmentID;
String fcsShipmentNumber;
String shipmentLabelUrl;
bool isSelected;
String? fcsShipmentID;
String? fcsShipmentNumber;
String? shipmentLabelUrl;
bool isSelected = false;
Shipment(
{this.id,
@@ -43,28 +43,28 @@ class Shipment {
this.phoneNumber,
this.pickupTimeStart,
this.pickupTimeEnd,
this.numberOfPackage,
this.weight,
this.handlingFee,
this.paidHandlingFee,
this.numberOfPackage = 0,
this.weight = 0,
this.handlingFee = 0,
this.paidHandlingFee = 0,
this.address,
this.status,
this.pickupDate,
this.isCourier = false,
this.radioIndex = 1,
this.pickupAddress,
required this.pickupAddress,
this.pickupUserID,
this.pickupUserName,
this.pickupUserPhoneNumber,
this.fcsShipmentID,
this.fcsShipmentNumber,
this.shipmentLabelUrl,
this.boxes});
this.boxes = const []});
int get last => DateTime.now().difference(pickupDate).inDays;
// int get last => DateTime.now().difference(pickupDate).inDays;
double get totalWeight => boxes?.fold(0, (p, e) => p + e.actualWeight);
int get totalCount => boxes?.length;
double get totalWeight => boxes.fold(0, (p, e) => p + e.actualWeight);
int get totalCount => boxes.length;
bool get isPending => status == shipment_pending_status;
bool get isAssigned => status == shipment_assigned_status;
@@ -100,15 +100,15 @@ class Shipment {
}
Map<String, dynamic> toMap() {
List _boxes = boxes?.map((l) => l.toMap())?.toList() ?? [];
List _boxes = boxes.map((l) => l.toMap()).toList();
return {
"id": id,
'user_id': userID,
'cartons': _boxes,
'shipment_type': shipmentType,
'pickup_address': pickupAddress.toMap(),
"pickup_date": pickupDate?.toUtc()?.toIso8601String(),
'pickup_address': pickupAddress?.toMap(),
"pickup_date": pickupDate?.toUtc().toIso8601String(),
'pickup_time_start': pickupTimeStart,
'pickup_time_end': pickupTimeEnd,
'pickup_user_id': pickupUserID,

View File

@@ -9,18 +9,19 @@ DateFormat timeFormat = DateFormat("HH:mm");
final DateFormat dateFormat = DateFormat("d MMM yyyy");
class User {
String id;
String name;
String phoneNumber;
String status;
String fcsID;
DateTime lastMessageTime;
String lastMessage;
int userUnseenCount;
int fcsUnseenCount;
String preferCurrency;
String? id;
String? name;
String? phoneNumber;
String? status;
String? fcsID;
DateTime? lastMessageTime;
String? lastMessage;
int? userUnseenCount;
int? fcsUnseenCount;
String? preferCurrency;
String get initial => name != null && name != "" ? name.substring(0, 1) : "?";
String get initial =>
name != null && name != "" ? name!.substring(0, 1) : "?";
String get getLastMessage {
var msg = lastMessage ?? "Say hi to $name";
@@ -31,27 +32,31 @@ class User {
String get getLastMessageTime {
if (lastMessageTime == null) return "";
DateTime today = DateTime.now();
if (lastMessageTime.year == today.year &&
lastMessageTime.month == today.month &&
lastMessageTime.day == today.day) {
return timeFormat.format(lastMessageTime);
if (lastMessageTime!.year == today.year &&
lastMessageTime!.month == today.month &&
lastMessageTime!.day == today.day) {
return timeFormat.format(lastMessageTime!);
} else {
return dateFormat.format(lastMessageTime);
return dateFormat.format(lastMessageTime!);
}
}
String get getUserUnseenCount => userUnseenCount != null
? userUnseenCount > 100 ? "99+" : userUnseenCount.toString()
? userUnseenCount! > 100
? "99+"
: userUnseenCount.toString()
: "0";
String get getFcsUnseenCount => fcsUnseenCount != null
? fcsUnseenCount > 100 ? "99+" : fcsUnseenCount.toString()
? fcsUnseenCount! > 100
? "99+"
: fcsUnseenCount.toString()
: "0";
List<String> privileges = [];
String get phone => phoneNumber != null && phoneNumber.startsWith("959")
? "0${phoneNumber.substring(2)}"
: phoneNumber;
String get phone => phoneNumber != null && phoneNumber!.startsWith("959")
? "0${phoneNumber!.substring(2)}"
: phoneNumber!;
bool get joined => status != null && status == user_joined_status;
bool get invited => status != null && status == user_invited_status;
bool get requested => status != null && status == user_requested_status;
@@ -64,7 +69,7 @@ class User {
this.phoneNumber,
this.fcsID,
this.status,
this.privileges,
this.privileges = const [],
this.lastMessage,
this.lastMessageTime,
this.userUnseenCount,

View File

@@ -1,12 +1,12 @@
class ServerException {
@override
List<Object> get props => null;
List<Object>? get props => null;
call() {
return null;
}
@override
bool get stringify => null;
bool? get stringify => null;
}

View File

@@ -1,12 +1,12 @@
import 'package:fcs/domain/entities/setting.dart';
class Contact {
String usaAddress;
String mmAddress;
String usaContactNumber;
String mmContactNumber;
String emailAddress;
String facebookLink;
String? usaAddress;
String? mmAddress;
String? usaContactNumber;
String? mmContactNumber;
String? emailAddress;
String? facebookLink;
Contact({
this.usaAddress,

View File

@@ -1,13 +1,14 @@
class DeliveryAddress {
String id;
String fullName;
String addressLine1;
String addressLine2;
String city;
String state;
String phoneNumber;
String? id;
String? fullName;
String? addressLine1;
String? addressLine2;
String? city;
String? state;
String? phoneNumber;
bool isDefault;
String userID;
String? userID;
DeliveryAddress(
{this.id,
this.fullName,

View File

@@ -1,15 +1,15 @@
import 'package:cloud_firestore/cloud_firestore.dart';
class Message {
String id;
String message;
DateTime date;
String receiverID;
String receiverName;
String senderID;
String senderName;
String messageType;
String messageID;
String? id;
String? message;
DateTime? date;
String? receiverID;
String? receiverName;
String? senderID;
String? senderName;
String? messageType;
String? messageID;
Message(
{this.id,
@@ -21,11 +21,13 @@ class Message {
this.senderName,
this.messageType,
this.messageID});
bool fromToday() {
if (date == null) return false;
var now = DateTime.now();
return date.day == now.day &&
date.month == now.month &&
date.year == now.year;
return date!.day == now.day &&
date!.month == now.month &&
date!.year == now.year;
}
Map<String, dynamic> toMap() {
@@ -36,9 +38,10 @@ class Message {
}
bool sameDay(Message another) {
return date.year == another.date.year &&
date.month == another.date.month &&
date.day == another.date.day;
if (date == null) return false;
return date!.year == another.date!.year &&
date!.month == another.date!.month &&
date!.day == another.date!.day;
}
factory Message.fromMap(Map<String, dynamic> map, String id) {
@@ -52,7 +55,7 @@ class Message {
receiverName: map['receiver_name'],
messageType: map['msg_type'],
messageID: map['msg_id'],
date: date != null ? date.toDate() : null,
date: date.toDate(),
);
}
}

View File

@@ -1,20 +1,24 @@
import 'package:fcs/domain/constants.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:flutter_icons_null_safety/flutter_icons_null_safety.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
class Privilege {
String id;
String name;
String desc;
bool sysAdminOnly = true;
bool isChecked = false;
String? name;
String? desc;
bool? sysAdminOnly = true;
bool? isChecked = false;
IconData iconData;
IconData? iconData;
Privilege(
{this.id, this.name, this.desc, this.isChecked, this.sysAdminOnly}) {
{required this.id,
this.name,
this.desc,
this.isChecked,
this.sysAdminOnly}) {
if (this.id == privilege_admin) {
iconData = MaterialCommunityIcons.account_tie;
} else if (this.id == privilege_support) {

View File

@@ -1,5 +0,0 @@
class RadioGroup {
String text;
int index;
RadioGroup({this.text, this.index});
}

View File

@@ -3,17 +3,21 @@ import 'package:cloud_firestore/cloud_firestore.dart';
class ShipmentStatus {
String status;
DateTime date;
bool done;
String staffId;
String staffName;
bool? done;
String? staffId;
String? staffName;
ShipmentStatus(
{this.status, this.date, this.done, this.staffId, this.staffName});
{required this.status,
required this.date,
this.done,
this.staffId,
this.staffName});
factory ShipmentStatus.fromMap(Map<String, dynamic> map) {
var _date = (map['date'] as Timestamp);
return ShipmentStatus(
status: map['status'],
date: _date == null ? null : _date.toDate(),
date: _date.toDate(),
done: map['done'],
staffId: map['staff_id'],
staffName: map['staff_name']);

View File

@@ -1,8 +1,7 @@
class Status {
String status;
String message;
String errorCode;
String? status;
String? message;
String? errorCode;
Status(this.status, this.message);
Status.fromJson(Map<String, dynamic> json) {
@@ -10,4 +9,4 @@ class Status {
message = json['message'];
errorCode = json['error_code'];
}
}
}

View File

@@ -1,8 +1,8 @@
import 'package:fcs/domain/entities/setting.dart';
class Term {
String termEng;
String termMm;
String? termEng;
String? termMm;
Term({this.termEng, this.termMm});