diff --git a/lib/pages/invoice/invoice_list_row.dart b/lib/pages/invoice/invoice_list_row.dart index 1ffc7b1..2022362 100644 --- a/lib/pages/invoice/invoice_list_row.dart +++ b/lib/pages/invoice/invoice_list_row.dart @@ -58,7 +58,9 @@ class InvoiceListRow extends StatelessWidget { fontSize: 13.0, color: primaryColor), ), new Text( - dateFormatter.format(invoice!.invoiceDate!), + invoice!.invoiceDate != null + ? dateFormatter.format(invoice!.invoiceDate!) + : '', style: new TextStyle( fontSize: 15.0, color: Colors.grey), ) diff --git a/lib/pages/invoice/invoice_shipment_list_row.dart b/lib/pages/invoice/invoice_shipment_list_row.dart index e77cc75..a08a362 100644 --- a/lib/pages/invoice/invoice_shipment_list_row.dart +++ b/lib/pages/invoice/invoice_shipment_list_row.dart @@ -86,7 +86,7 @@ class _InvoiceShipmentListRowState extends State { ), Padding( padding: const EdgeInsets.all(0), - child: getStatus(_fcsShipment.status!), + child: getStatus(_fcsShipment.status??"") ), ], ), diff --git a/lib/pages/package/model/package_model.dart b/lib/pages/package/model/package_model.dart index 1d2e439..9e979e1 100644 --- a/lib/pages/package/model/package_model.dart +++ b/lib/pages/package/model/package_model.dart @@ -16,9 +16,9 @@ import 'package:path/path.dart' as Path; class PackageModel extends BaseModel { final log = Logger('PackageModel'); - PaginatorListener? packages; - PaginatorListener? customerPackages; - PaginatorListener? activePackages; + late PaginatorListener packages; + late PaginatorListener customerPackages; + late PaginatorListener activePackages; bool isLoading = false; int _menuSelectedIndex = 1; @@ -63,15 +63,16 @@ class PackageModel extends BaseModel { @override logout() async { - if (customerPackages != null) customerPackages!.close(); - if (packages != null) packages!.close(); - if (activePackages != null) activePackages!.close(); + if (customerPackages != null) customerPackages.close(); + if (packages != null) packages.close(); + if (activePackages != null) activePackages.close(); } Future _loadPackages(bool isDelivered) async { if (user == null) return; - if (!((user!.hasPackages() || user!.hasReceiving() || user!.hasProcessing()))) - return; + if (!((user!.hasPackages() || + user!.hasReceiving() || + user!.hasProcessing()))) return; String path = "/$packages_collection"; try { @@ -83,7 +84,7 @@ class PackageModel extends BaseModel { .where("is_delivered", isEqualTo: isDelivered); pageQuery = pageQuery.orderBy("update_time", descending: true); - packages!.refresh(listeningQuery: listenerQuery, pageQuery: pageQuery); + packages.refresh(listeningQuery: listenerQuery, pageQuery: pageQuery); } catch (e) { log.warning("Error!! $e"); } @@ -104,7 +105,7 @@ class PackageModel extends BaseModel { .where("user_id", isEqualTo: user!.id) .orderBy("update_time", descending: true); - customerPackages!.refresh( + customerPackages.refresh( listeningQuery: listenerQuery, pageQuery: pageQuery); } catch (e) { log.warning("Error!! $e"); @@ -113,8 +114,9 @@ class PackageModel extends BaseModel { Future _loadActivePackages() async { if (user == null) return; - if (!((user!.hasPackages() || user!.hasReceiving() || user!.hasProcessing()))) - return; + if (!((user!.hasPackages() || + user!.hasReceiving() || + user!.hasProcessing()))) return; String path = "/$packages_collection"; try { @@ -126,7 +128,7 @@ class PackageModel extends BaseModel { .where("is_delivered", isEqualTo: false); pageQuery = pageQuery.orderBy("update_time", descending: true); - activePackages!.refresh( + activePackages.refresh( listeningQuery: listenerQuery, pageQuery: pageQuery); } catch (e) { log.warning("Error!! $e"); @@ -161,7 +163,8 @@ class PackageModel extends BaseModel { .get(const GetOptions(source: Source.server)); if (snaps.docs.length == 1) { var snap = snaps.docs[0]; - var package = Package.fromMap(snap.data as Map, snap.id); + var package = + Package.fromMap(snap.data as Map, snap.id); return package; } } catch (e) { @@ -184,7 +187,8 @@ class PackageModel extends BaseModel { if (qsnap.docs.length > 0) { var snap = qsnap.docs[0]; if (snap.exists) { - var package = Package.fromMap(snap.data as Map, snap.id); + var package = + Package.fromMap(snap.data as Map, snap.id); return package; } } @@ -198,7 +202,8 @@ class PackageModel extends BaseModel { if (qsnap.docs.length > 0) { var snap = qsnap.docs[0]; if (snap.exists) { - var package = Package.fromMap(snap.data as Map, snap.id); + var package = + Package.fromMap(snap.data as Map, snap.id); return package; } } @@ -218,8 +223,8 @@ class PackageModel extends BaseModel { .where("is_deleted", isEqualTo: false) .get(const GetOptions(source: Source.server)); packages = snaps.docs.map((documentSnapshot) { - var p = - Package.fromMap(documentSnapshot.data as Map, documentSnapshot.id); + var p = Package.fromMap( + documentSnapshot.data as Map, documentSnapshot.id); return p; }).toList(); } catch (e) { diff --git a/lib/pages/package/package_editor.dart b/lib/pages/package/package_editor.dart index 231e04a..9afa78b 100644 --- a/lib/pages/package/package_editor.dart +++ b/lib/pages/package/package_editor.dart @@ -38,8 +38,8 @@ class _PackageEditorPageState extends State { super.initState(); _package = widget.package!; selectedMarket = _package!.market; - _descCtl.text = _package!.desc; - _remarkCtl.text = _package!.remark; + _descCtl.text = _package!.desc!; + _remarkCtl.text = _package!.remark!; multiImgController.setImageUrls = _package!.photoUrls; } @@ -157,7 +157,7 @@ class _PackageEditorPageState extends State { String? selectedMarket; Widget marketDropdown() { List _markets = Provider.of(context).markets; - List markets = _markets.map((e) => e.name).toList(); + List markets = _markets.map((e) => e.name).toList(); markets.insert(0, MANAGE_MARKET); if (!markets.contains(selectedMarket)) { markets.insert(0, selectedMarket!); @@ -194,10 +194,10 @@ class _PackageEditorPageState extends State { }); }, isExpanded: true, - items: markets.map>((String value) { + items: markets.map>((String? value) { return DropdownMenuItem( value: value, - child: Text(value, + child: Text(value ?? "", overflow: TextOverflow.ellipsis, style: TextStyle( color: value == MANAGE_MARKET diff --git a/lib/pages/package/package_info.dart b/lib/pages/package/package_info.dart index 658059b..cb755e6 100644 --- a/lib/pages/package/package_info.dart +++ b/lib/pages/package/package_info.dart @@ -51,10 +51,10 @@ class _PackageInfoState extends State { initPackage(Package pkg) async { PackageModel packageModel = Provider.of(context, listen: false); - Package package = await packageModel.getPackageByTrackingID(pkg.trackingID); + Package? package = await packageModel.getPackageByTrackingID(pkg.trackingID!); setState(() { _package = package; - multiImgController.setImageUrls = package.photoUrls; + multiImgController.setImageUrls = package!.photoUrls; }); } @@ -65,7 +65,7 @@ class _PackageInfoState extends State { @override Widget build(BuildContext context) { - String id = Provider.of(context).user.id; + String? id = Provider.of(context).user!.id; bool owner = _package?.userID == id; bool canChangeDeliveryAddress = _package?.status == package_received_status || @@ -199,7 +199,7 @@ class _PackageInfoState extends State { try { await packageModel.changeDeliveryAddress(_package!, deliveryAddress); var da = - await deliveryAddressModel.getDeliveryAddress(deliveryAddress.id); + await deliveryAddressModel.getDeliveryAddress(deliveryAddress.id!); setState(() { _package!.deliveryAddress = da; }); diff --git a/lib/pages/package/package_list.dart b/lib/pages/package/package_list.dart index d98fbcc..e806ead 100644 --- a/lib/pages/package/package_list.dart +++ b/lib/pages/package/package_list.dart @@ -97,7 +97,7 @@ class _PackageListState extends State { _searchCallback(Package package) async { var packageModel = Provider.of(context, listen: false); - Package _package = await packageModel.getPackage(package.id); + Package? _package = await packageModel.getPackage(package.id!); if (_package == null) return; Navigator.push( context, diff --git a/lib/pages/package/package_list_row.dart b/lib/pages/package/package_list_row.dart index 067287c..a613c26 100644 --- a/lib/pages/package/package_list_row.dart +++ b/lib/pages/package/package_list_row.dart @@ -60,7 +60,9 @@ class PackageListRow extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 8.0), child: new Text( - package!.id == null ? '' : package!.trackingID, + package!.id == null + ? '' + : package!.trackingID!, style: new TextStyle( fontSize: 15.0, color: Colors.black), ), @@ -68,7 +70,9 @@ class PackageListRow extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 8.0), child: new Text( - package!.market == null ? '' : package!.market, + package!.market == null + ? '' + : package!.market!, style: new TextStyle( fontSize: 15.0, color: Colors.black), ), @@ -84,12 +88,14 @@ class PackageListRow extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.all(3.0), - child: getStatus(package!.status), + child: getStatus(package!.status??""), ), Padding( padding: const EdgeInsets.all(0), child: new Text( - dateFormat.format(package!.currentStatusDate), + package!.currentStatusDate != null + ? dateFormat.format(package!.currentStatusDate!) + : '', style: new TextStyle(fontSize: 15.0, color: Colors.grey), ), diff --git a/lib/pages/package/package_new.dart b/lib/pages/package/package_new.dart index 4fe53fd..1b33c1d 100644 --- a/lib/pages/package/package_new.dart +++ b/lib/pages/package/package_new.dart @@ -144,8 +144,8 @@ class _PackageNewState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(packages[index].market), - Text(packages[index].trackingID), + Text(packages[index].market!), + Text(packages[index].trackingID!), // DisplayText( // labelText: "Tracking ID", // text: packages[index].trackingID, diff --git a/lib/pages/package/tracking_id_page.dart b/lib/pages/package/tracking_id_page.dart index b4c6644..1856f7a 100644 --- a/lib/pages/package/tracking_id_page.dart +++ b/lib/pages/package/tracking_id_page.dart @@ -87,7 +87,7 @@ class _TrackingIDPageState extends State { String? selectedMarket; Widget dropDown() { List _markets = Provider.of(context).markets; - List markets = _markets.map((e) => e.name).toList(); + List markets = _markets.map((e) => e.name).toList(); markets.insert(0, MANAGE_MARKET); markets.insert(0, SELECT_MARKET); @@ -126,10 +126,10 @@ class _TrackingIDPageState extends State { }); }, isExpanded: true, - items: markets.map>((String value) { + items: markets.map>((String? value) { return DropdownMenuItem( value: value, - child: Text(value, + child: Text(value ?? "", overflow: TextOverflow.ellipsis, style: TextStyle( color: value == MANAGE_MARKET @@ -146,7 +146,7 @@ class _TrackingIDPageState extends State { _manageMarket() { Navigator.push( context, - CupertinoPageRoute(builder: (context) => MarketEditor()), + CupertinoPageRoute(builder: (context) => MarketEditor()), ); } diff --git a/lib/pages/payment_methods/model/payment_method_model.dart b/lib/pages/payment_methods/model/payment_method_model.dart index 25d9f11..229bd9f 100644 --- a/lib/pages/payment_methods/model/payment_method_model.dart +++ b/lib/pages/payment_methods/model/payment_method_model.dart @@ -12,21 +12,22 @@ class PaymentMethodModel extends BaseModel { List paymentMethods = []; PaymentMethod getPaymentMethod(String id) { - return paymentMethods.firstWhere((e) => e.id == id, orElse: () => null); + return paymentMethods.firstWhere((e) => e.id == id); } - StreamSubscription listener; + StreamSubscription? listener; PaymentMethodModel() { - if (listener != null) listener.cancel(); + if (listener != null) listener!.cancel(); try { - listener = Firestore.instance + listener = FirebaseFirestore.instance .collection("/payment_methods") .snapshots() .listen((snaps) { paymentMethods.clear(); - snaps.documents.forEach((d) { - paymentMethods.add(PaymentMethod.fromMap(d.data, d.documentID)); + snaps.docs.forEach((d) { + paymentMethods + .add(PaymentMethod.fromMap(d.data as Map, d.id)); }); notifyListeners(); }); diff --git a/lib/pages/payment_methods/payment_method_editor.dart b/lib/pages/payment_methods/payment_method_editor.dart index 77cf8cb..9699db7 100644 --- a/lib/pages/payment_methods/payment_method_editor.dart +++ b/lib/pages/payment_methods/payment_method_editor.dart @@ -38,12 +38,12 @@ class _PaymentMethodEditorState extends State { if (widget.paymentMethod != null) { _paymentMethod = widget.paymentMethod; - _nameController.text = _paymentMethod!.name; - _accountNameController.text = _paymentMethod!.accountName; - _accountNumberController.text = _paymentMethod!.account; - _mailController.text = _paymentMethod!.email; - _phoneController.text = _paymentMethod!.phone; - _linkController.text = _paymentMethod!.link; + _nameController.text = _paymentMethod!.name!; + _accountNameController.text = _paymentMethod!.accountName!; + _accountNumberController.text = _paymentMethod!.account!; + _mailController.text = _paymentMethod!.email!; + _phoneController.text = _paymentMethod!.phone!; + _linkController.text = _paymentMethod!.link!; } else { _paymentMethod = new PaymentMethod(); _nameController.text = ''; @@ -208,7 +208,7 @@ class _PaymentMethodEditorState extends State { }); try { await Provider.of(context, listen: false) - .deletePaymentMethod(_paymentMethod!.id); + .deletePaymentMethod(_paymentMethod!.id!); Navigator.pop(context); } catch (e) { showMsgDialog(context, "Error", e.toString()); diff --git a/lib/pages/payment_methods/payment_method_page.dart b/lib/pages/payment_methods/payment_method_page.dart index 4c91d3c..0fb95e2 100644 --- a/lib/pages/payment_methods/payment_method_page.dart +++ b/lib/pages/payment_methods/payment_method_page.dart @@ -84,13 +84,13 @@ class _PaymentMethodPageState extends State { } _item(PaymentMethod method, bool isEditable) { - final accountName = _itemRow(method.accountName, "pm.account.name", + final accountName = _itemRow(method.accountName!, "pm.account.name", iconData: MaterialCommunityIcons.bank); - final accountNumber = _itemRow(method.account, "pm.account.no", + final accountNumber = _itemRow(method.account!, "pm.account.no", iconData: MaterialCommunityIcons.checkbook); - final phone = _itemRow(method.phone, "pm.phone", iconData: Icons.phone); - final email = _itemRow(method.email, "pm.email", iconData: Icons.mail); - final link = _itemRow(method.link, "pm.link", iconData: Icons.link); + final phone = _itemRow(method.phone!, "pm.phone", iconData: Icons.phone); + final email = _itemRow(method.email!, "pm.email", iconData: Icons.mail); + final link = _itemRow(method.link!, "pm.link", iconData: Icons.link); return InkWell( onTap: isEditable @@ -110,7 +110,7 @@ class _PaymentMethodPageState extends State { Padding( padding: const EdgeInsets.all(8.0), child: Text( - method.name, + method.name!, style: TextStyle( color: primaryColor, fontWeight: FontWeight.bold, diff --git a/lib/pages/processing/model/processing_model.dart b/lib/pages/processing/model/processing_model.dart index e5782c8..0977245 100644 --- a/lib/pages/processing/model/processing_model.dart +++ b/lib/pages/processing/model/processing_model.dart @@ -11,7 +11,7 @@ class ProcessingModel extends BaseModel { List processings = []; final log = Logger('ProcessingModel'); - StreamSubscription listener; + StreamSubscription? listener; void initUser(user) { super.initUser(user); @@ -19,12 +19,12 @@ class ProcessingModel extends BaseModel { @override logout() async { - if (listener != null) await listener.cancel(); + if (listener != null) await listener!.cancel(); processings = []; } - Future createProcessing(Processing processing) {} + Future createProcessing(Processing processing) async {} - Future updateProcessing(Processing processing) {} + Future updateProcessing(Processing processing) async {} } diff --git a/lib/pages/processing/package_editor.dart b/lib/pages/processing/package_editor.dart index 86da544..458e3dc 100644 --- a/lib/pages/processing/package_editor.dart +++ b/lib/pages/processing/package_editor.dart @@ -44,14 +44,14 @@ class _PackageEditorState extends State { void initState() { super.initState(); _package = Package(); - _loadPackageData(widget.package!.id); + _loadPackageData(widget.package!.id!); } _loadPackageData(String id) async { if (id != null) { PackageModel packageModel = Provider.of(context, listen: false); - Package package = await packageModel.getPackage(id); + Package? package = await packageModel.getPackage(id); if (package != null) { if (package.status != package_received_status) { showMsgDialog(context, "Error", @@ -65,8 +65,8 @@ class _PackageEditorState extends State { } setState(() { selectedMarket = _package!.market ?? ""; - _descCtl.text = _package!.desc; - _remarkCtl.text = _package!.remark; + _descCtl.text = _package!.desc!; + _remarkCtl.text = _package!.remark!; multiImgController.setImageUrls = _package!.photoUrls; }); } @@ -84,7 +84,7 @@ class _PackageEditorState extends State { IconButton( icon: Icon(Icons.search, color: primaryColor), onPressed: () => searchPackage(context, callbackPackageSelect: (u) { - _loadPackageData(u.id); + _loadPackageData(u.id!); Navigator.pop(context); })), ], @@ -177,7 +177,7 @@ class _PackageEditorState extends State { String? selectedMarket; Widget marketDropdown() { List _markets = Provider.of(context).markets; - List markets = _markets.map((e) => e.name).toList(); + List markets = _markets.map((e) => e.name).toList(); markets.insert(0, MANAGE_MARKET); if (!markets.contains(selectedMarket)) { markets.insert(0, selectedMarket!); @@ -221,7 +221,7 @@ class _PackageEditorState extends State { }); }, isExpanded: true, - items: markets.map>((String value) { + items: markets.map>((String? value) { return DropdownMenuItem( value: value, child: Text(value ?? "", diff --git a/lib/pages/processing/processing_edit_editor.dart b/lib/pages/processing/processing_edit_editor.dart index c096f0b..4751134 100644 --- a/lib/pages/processing/processing_edit_editor.dart +++ b/lib/pages/processing/processing_edit_editor.dart @@ -42,8 +42,8 @@ class _ProcessingEditEditorState extends State { super.initState(); _package = widget.package; selectedMarket = _package!.market ?? ""; - _descCtl.text = _package!.desc; - _remarkCtl.text = _package!.remark; + _descCtl.text = _package!.desc!; + _remarkCtl.text = _package!.remark!; multiImgController.setImageUrls = _package!.photoUrls; _user = User( fcsID: _package!.fcsID ?? "", @@ -162,7 +162,7 @@ class _ProcessingEditEditorState extends State { String? selectedMarket; Widget marketDropdown() { List _markets = Provider.of(context).markets; - List markets = _markets.map((e) => e.name).toList(); + List markets = _markets.map((e) => e.name).toList(); markets.insert(0, MANAGE_MARKET); if (!markets.contains(selectedMarket)) { markets.insert(0, selectedMarket!); @@ -208,7 +208,7 @@ class _ProcessingEditEditorState extends State { }); }, isExpanded: true, - items: markets.map>((String value) { + items: markets.map>((String? value) { return DropdownMenuItem( value: value, child: Text(value ?? "", diff --git a/lib/pages/processing/processing_info.dart b/lib/pages/processing/processing_info.dart index 39e2014..d15d0c9 100644 --- a/lib/pages/processing/processing_info.dart +++ b/lib/pages/processing/processing_info.dart @@ -175,7 +175,7 @@ class _ProcessingInfoState extends State { _package!.photoUrls.length == 0 ? Container() : img, StatusTree( shipmentHistory: _package!.shipmentHistory, - currentStatus: _package!.status), + currentStatus: _package!.status??""), SizedBox( height: 20, ) @@ -222,8 +222,8 @@ class _ProcessingInfoState extends State { } else { PackageModel packageModel = Provider.of(context, listen: false); - Package p = await packageModel.getPackage(_package!.id); - initPackage(p); + Package? p = await packageModel.getPackage(_package!.id!); + initPackage(p!); } } } diff --git a/lib/pages/processing/processing_list.dart b/lib/pages/processing/processing_list.dart index 7f5855a..ec021b0 100644 --- a/lib/pages/processing/processing_list.dart +++ b/lib/pages/processing/processing_list.dart @@ -85,7 +85,7 @@ class _ProcessingListState extends State { _searchCallback(Package package) async { var packageModel = Provider.of(context, listen: false); - Package _package = await packageModel.getPackage(package.id); + Package? _package = await packageModel.getPackage(package.id!); if (_package == null) return; Navigator.push( context, diff --git a/lib/pages/processing/processing_list_row.dart b/lib/pages/processing/processing_list_row.dart index 527c621..d702d4f 100644 --- a/lib/pages/processing/processing_list_row.dart +++ b/lib/pages/processing/processing_list_row.dart @@ -57,7 +57,7 @@ class ProcessingListRow extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 8.0), child: new Text( - package!.id == null ? '' : package!.trackingID, + package!.id == null ? '' : package!.trackingID!, style: new TextStyle( fontSize: 15.0, color: Colors.black), ), @@ -65,7 +65,7 @@ class ProcessingListRow extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 8.0), child: new Text( - package!.market == null ? '' : package!.market, + package!.market == null ? '' : package!.market!, style: new TextStyle( fontSize: 15.0, color: Colors.black), ), @@ -81,12 +81,14 @@ class ProcessingListRow extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.all(3.0), - child: getStatus(package!.status), + child: getStatus(package!.status??""), ), Padding( padding: const EdgeInsets.all(0), child: new Text( - dateFormat.format(package!.currentStatusDate), + package!.currentStatusDate != null + ? dateFormat.format(package!.currentStatusDate!) + : '', style: new TextStyle(fontSize: 15.0, color: Colors.grey), ), ), diff --git a/lib/pages/processing_old/processing_editor.dart b/lib/pages/processing_old/processing_editor.dart index 634247d..62fb147 100644 --- a/lib/pages/processing_old/processing_editor.dart +++ b/lib/pages/processing_old/processing_editor.dart @@ -18,12 +18,12 @@ import 'package:fcs/pages/widgets/multi_img_file.dart'; import 'package:fcs/pages/widgets/progress.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:intl/intl.dart'; import 'package:provider/provider.dart'; class ProcessingEditor extends StatefulWidget { - final Package package; + final Package? package; ProcessingEditor({this.package}); @override @@ -34,22 +34,22 @@ class _ProcessingEditorState extends State { TextEditingController _remarkCtl = new TextEditingController(); TextEditingController _descCtl = new TextEditingController(); - Package _package; - User _user; + Package? _package; + User? _user; bool _isLoading = false; @override void initState() { super.initState(); _package = widget.package; - selectedMarket = _package.market ?? ""; - _descCtl.text = _package.desc; - _remarkCtl.text = _package.remark; - multiImgController.setImageUrls = _package.photoUrls; + selectedMarket = _package!.market ?? ""; + _descCtl.text = _package!.desc!; + _remarkCtl.text = _package!.remark!; + multiImgController.setImageUrls = _package!.photoUrls; _user = User( - fcsID: _package.fcsID ?? "", - name: _package.userName ?? "", - phoneNumber: _package.phoneNumber ?? ""); + fcsID: _package!.fcsID ?? "", + name: _package!.userName ?? "", + phoneNumber: _package!.phoneNumber ?? ""); } final DateFormat dateFormat = DateFormat("d MMM yyyy"); @@ -63,7 +63,7 @@ class _ProcessingEditorState extends State { children: [ Expanded( child: DisplayText( - text: _user.fcsID, + text: _user!.fcsID??"", labelTextKey: "processing.fcs.id", icon: FcsIDIcon(), )), @@ -77,18 +77,18 @@ class _ProcessingEditorState extends State { ], ); final namebox = DisplayText( - text: _user.name, + text: _user!.name??"", labelTextKey: "processing.name", iconData: Icons.person, ); final phoneNumberBox = DisplayText( - text: _user.phoneNumber, + text: _user!.phoneNumber??"", labelTextKey: "processing.phone", iconData: Icons.phone, ); final trackingIdBox = DisplayText( - text: _package.trackingID, + text: _package!.trackingID??"", labelTextKey: "processing.tracking.id", iconData: MaterialCommunityIcons.barcode_scan, ); @@ -152,13 +152,13 @@ class _ProcessingEditorState extends State { ); } - String selectedMarket; + String? selectedMarket; Widget marketDropdown() { List _markets = Provider.of(context).markets; - List markets = _markets.map((e) => e.name).toList(); + List markets = _markets.map((e) => e.name).toList(); markets.insert(0, MANAGE_MARKET); if (!markets.contains(selectedMarket)) { - markets.insert(0, selectedMarket); + markets.insert(0, selectedMarket!); } return Padding( @@ -190,7 +190,7 @@ class _ProcessingEditorState extends State { height: 1, color: Colors.grey, ), - onChanged: (String newValue) { + onChanged: (String? newValue) { setState(() { if (newValue == MANAGE_MARKET) { selectedMarket = null; @@ -201,7 +201,7 @@ class _ProcessingEditorState extends State { }); }, isExpanded: true, - items: markets.map>((String value) { + items: markets.map>((String? value) { return DropdownMenuItem( value: value, child: Text(value ?? "", diff --git a/lib/pages/processing_old/processing_info.dart b/lib/pages/processing_old/processing_info.dart index 0b6fe43..d48a433 100644 --- a/lib/pages/processing_old/processing_info.dart +++ b/lib/pages/processing_old/processing_info.dart @@ -12,7 +12,8 @@ import 'package:fcs/pages/widgets/progress.dart'; import 'package:fcs/pages/widgets/status_tree.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:intl/intl.dart'; import 'package:provider/provider.dart'; @@ -21,7 +22,7 @@ import 'processing_editor.dart'; final DateFormat dateFormat = DateFormat("d MMM yyyy"); class ProcessingInfo extends StatefulWidget { - final Package package; + final Package? package; ProcessingInfo({this.package}); @override @@ -30,14 +31,14 @@ class ProcessingInfo extends StatefulWidget { class _ProcessingInfoState extends State { var dateFormatter = new DateFormat('dd MMM yyyy'); - Package _package; + Package? _package; bool _isLoading = false; MultiImgController multiImgController = MultiImgController(); @override void initState() { super.initState(); - initPackage(widget.package); + initPackage(widget.package!); } initPackage(Package package) { @@ -55,37 +56,37 @@ class _ProcessingInfoState extends State { @override Widget build(BuildContext context) { final trackingIdBox = DisplayText( - text: _package.trackingID, + text: _package!.trackingID ?? "", labelTextKey: "processing.tracking.id", iconData: MaterialCommunityIcons.barcode_scan, ); var fcsIDBox = DisplayText( - text: _package.fcsID, + text: _package!.fcsID??"", labelTextKey: "processing.fcs.id", icon: FcsIDIcon(), ); final phoneNumberBox = DisplayText( - text: _package.phoneNumber, + text: _package!.phoneNumber??"", labelTextKey: "processing.phone", iconData: Icons.phone, ); final customerNameBox = DisplayText( - text: _package.userName, + text: _package!.userName??"", labelTextKey: "processing.name", iconData: Icons.perm_identity, ); final marketBox = DisplayText( - text: _package.market ?? "-", + text: _package!.market ?? "-", labelTextKey: "processing.market", iconData: Icons.store, ); final descBox = DisplayText( - text: _package.desc ?? "-", + text: _package!.desc ?? "-", labelTextKey: "processing.desc", iconData: MaterialCommunityIcons.message_text_outline, ); final remarkBox = DisplayText( - text: _package.remark ?? "-", + text: _package!.remark ?? "-", labelTextKey: "processing.remark", iconData: Entypo.new_message, ); @@ -137,10 +138,10 @@ class _ProcessingInfoState extends State { marketBox, descBox, remarkBox, - _package.photoUrls.length == 0 ? Container() : img, + _package!.photoUrls.length == 0 ? Container() : img, StatusTree( - shipmentHistory: _package.shipmentHistory, - currentStatus: _package.status), + shipmentHistory: _package!.shipmentHistory, + currentStatus: _package!.status??""), SizedBox( height: 20, ) @@ -164,7 +165,7 @@ class _ProcessingInfoState extends State { PackageModel packageModel = Provider.of(context, listen: false); try { - await packageModel.deleteProcessing(_package); + await packageModel.deleteProcessing(_package!); Navigator.pop(context, true); } catch (e) { showMsgDialog(context, "Error", e.toString()); @@ -176,19 +177,19 @@ class _ProcessingInfoState extends State { } _gotoEditor() async { - bool deleted = await Navigator.push( + bool? deleted = await Navigator.push( context, CupertinoPageRoute( builder: (context) => ProcessingEditor( - package: widget.package, + package: widget.package!, ))); if (deleted ?? false) { Navigator.pop(context); } else { PackageModel packageModel = Provider.of(context, listen: false); - Package p = await packageModel.getPackage(_package.id); - initPackage(p); + Package? p = await packageModel.getPackage(_package!.id!); + initPackage(p!); } } } diff --git a/lib/pages/processing_old/processing_list.dart b/lib/pages/processing_old/processing_list.dart index 6ab3497..38e5c0a 100644 --- a/lib/pages/processing_old/processing_list.dart +++ b/lib/pages/processing_old/processing_list.dart @@ -77,7 +77,7 @@ class _ProcessingListState extends State { _searchCallback(Package package) async { var packageModel = Provider.of(context, listen: false); - Package _package = await packageModel.getPackage(package.id); + Package? _package = await packageModel.getPackage(package.id!); if (_package == null) return; Navigator.push( context, diff --git a/lib/pages/processing_old/processing_list_row.dart b/lib/pages/processing_old/processing_list_row.dart index cc06c16..a287b2c 100644 --- a/lib/pages/processing_old/processing_list_row.dart +++ b/lib/pages/processing_old/processing_list_row.dart @@ -3,7 +3,7 @@ import 'package:fcs/helpers/theme.dart'; import 'package:fcs/pages/main/util.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_icons/flutter_icons.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:intl/intl.dart'; import 'processing_info.dart'; @@ -11,12 +11,12 @@ import 'processing_info.dart'; typedef CallbackPackageSelect(Package package); class ProcessingListRow extends StatelessWidget { - final Package package; - final CallbackPackageSelect callbackPackageSelect; + final Package? package; + final CallbackPackageSelect? callbackPackageSelect; final double dotSize = 15.0; final DateFormat dateFormat = new DateFormat("dd MMM yyyy"); - ProcessingListRow({Key key, this.package, this.callbackPackageSelect}) + ProcessingListRow({Key? key, this.package, this.callbackPackageSelect}) : super(key: key); @override @@ -24,7 +24,7 @@ class ProcessingListRow extends StatelessWidget { return InkWell( onTap: () { if (callbackPackageSelect != null) { - callbackPackageSelect(package); + callbackPackageSelect!(package!); return; } Navigator.push( @@ -45,7 +45,7 @@ class ProcessingListRow extends StatelessWidget { Container( padding: EdgeInsets.only(left: 5, right: 10), child: Icon( - FontAwesome.dropbox, + FontAwesomeIcons.dropbox, color: primaryColor, size: 30, ), @@ -57,7 +57,7 @@ class ProcessingListRow extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 8.0), child: new Text( - package.id == null ? '' : package.trackingID, + package!.id == null ? '' : package!.trackingID!, style: new TextStyle( fontSize: 15.0, color: Colors.black), ), @@ -65,7 +65,7 @@ class ProcessingListRow extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 8.0), child: new Text( - package.market == null ? '' : package.market, + package!.market == null ? '' : package!.market!, style: new TextStyle( fontSize: 15.0, color: Colors.black), ), @@ -81,12 +81,14 @@ class ProcessingListRow extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.all(3.0), - child: getStatus(package.status), + child: getStatus(package!.status ?? ""), ), Padding( padding: const EdgeInsets.all(0), child: new Text( - dateFormat.format(package.currentStatusDate), + package!.currentStatusDate != null + ? dateFormat.format(package!.currentStatusDate!) + : '', style: new TextStyle(fontSize: 15.0, color: Colors.grey), ), ), diff --git a/lib/pages/profile/profile_currency_edit.dart b/lib/pages/profile/profile_currency_edit.dart index f1d3b71..db76f8d 100644 --- a/lib/pages/profile/profile_currency_edit.dart +++ b/lib/pages/profile/profile_currency_edit.dart @@ -24,7 +24,7 @@ class _ProfileCurrencyEditState extends State { void initState() { super.initState(); MainModel mainModel = Provider.of(context, listen: false); - if (mainModel.user.preferCurrency == "MMK") { + if (mainModel.user!.preferCurrency == "MMK") { _currency = Currency.MMK; } else { _currency = Currency.USD; @@ -77,7 +77,7 @@ class _ProfileCurrencyEditState extends State { onChanged: (Currency? value) { if(value != null) setState(() { - _currency = value!; + _currency = value; }); }, ), @@ -96,7 +96,7 @@ class _ProfileCurrencyEditState extends State { onChanged: (Currency? value) { if(value != null) setState(() { - _currency = value!; + _currency = value; }); }, ), diff --git a/lib/pages/profile/profile_edit.dart b/lib/pages/profile/profile_edit.dart index db9a610..9880a87 100644 --- a/lib/pages/profile/profile_edit.dart +++ b/lib/pages/profile/profile_edit.dart @@ -24,7 +24,7 @@ class _ProfileEditState extends State { void initState() { super.initState(); MainModel mainModel = Provider.of(context, listen: false); - nameController.text = mainModel.user.name; + nameController.text = mainModel.user!.name ?? ""; } @override diff --git a/lib/pages/profile/profile_page.dart b/lib/pages/profile/profile_page.dart index 00668cb..a618c3a 100644 --- a/lib/pages/profile/profile_page.dart +++ b/lib/pages/profile/profile_page.dart @@ -18,6 +18,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; +import 'package:flutter_vector_icons/flutter_vector_icons.dart'; import '../../helpers/theme.dart'; @@ -31,7 +32,7 @@ class Profile extends StatefulWidget { class _ProfileState extends State { GlobalKey key = GlobalKey(); bool _isLoading = false; - String? selectedLanguage ; + String? selectedLanguage; TextEditingController bizNameController = new TextEditingController(); static final List languagesList = Translation().supportedLanguages; @@ -67,18 +68,19 @@ class _ProfileState extends State { Provider.of(context); final namebox = DisplayText( - text: mainModel.user.name + " (${mainModel.user.status})", + text: "${mainModel.user!.name ?? ''}" + + " (${mainModel.user!.status ?? ''})", labelTextKey: "profile.name", iconData: Icons.person, ); final currencyBox = DisplayText( - text: mainModel.user.preferCurrency, + text: mainModel.user!.preferCurrency ?? "", labelTextKey: "profile.currency", - iconData: FontAwesome5.money_bill_alt, + iconData: FontAwesome5Regular.money_bill_alt, ); final phonenumberbox = DisplayText( - text: mainModel.user.phone, + text: mainModel.user!.phone ?? "", labelTextKey: "profile.phone", iconData: Icons.phone, ); @@ -86,15 +88,15 @@ class _ProfileState extends State { children: [ Expanded( child: DisplayText( - text: mainModel.user.fcsID, + text: mainModel.user!.fcsID ?? "", labelTextKey: "customer.fcs.id", icon: FcsIDIcon(), ), ), IconButton( icon: Icon(Icons.content_copy, color: Colors.grey), - onPressed: () => _copy( - getLocalString(context, "customer.fcs.id"), mainModel.user.fcsID), + onPressed: () => _copy(getLocalString(context, "customer.fcs.id"), + mainModel.user!.fcsID ?? ""), ) ], ); @@ -103,7 +105,7 @@ class _ProfileState extends State { children: [ Expanded( child: DisplayText( - text: mainModel.setting.usaAddress, + text: mainModel.setting!.usaAddress ?? "", labelTextKey: "profile.usa.shipping.address", iconData: Icons.location_on, ), @@ -112,7 +114,7 @@ class _ProfileState extends State { icon: Icon(Icons.content_copy, color: Colors.grey), onPressed: () => _copy( getLocalString(context, "profile.usa.shipping.address"), - mainModel.setting.usaAddress), + mainModel.setting!.usaAddress ?? ""), ) ], ); @@ -195,14 +197,14 @@ class _ProfileState extends State { } Widget getPrivilegeBox(BuildContext context) { - User user = Provider.of(context, listen: false).user; + User? user = Provider.of(context, listen: false).user; List _privileges = Provider.of(context, listen: false).privileges; if (user == null || user.isCustomer()) return Container(); List privileges = []; user.privileges.forEach((e) { - var p = _privileges.firstWhere((p) => p.id == e, orElse: () => null); + var p = _privileges.firstWhere((p) => p.id == e); if (p != null) { privileges.add(p); } @@ -270,7 +272,7 @@ class _ProfileState extends State { } _showToast(String title) { - final ScaffoldState scaffold = key.currentState; + final ScaffoldState scaffold = key.currentState as ScaffoldState; scaffold.showSnackBar( SnackBar( content: Text('copied "$title" data to clipboard'), diff --git a/lib/pages/receiving/receiving_editor.dart b/lib/pages/receiving/receiving_editor.dart index 4b0b84a..e8ec46c 100644 --- a/lib/pages/receiving/receiving_editor.dart +++ b/lib/pages/receiving/receiving_editor.dart @@ -42,8 +42,8 @@ class _ReceivingEditorState extends State { _isNew = widget.package == null; if (!_isNew) { package = widget.package!; - _trackingIDCtl.text = package.trackingID; - _remarkCtl.text = package.remark; + _trackingIDCtl.text = package.trackingID!; + _remarkCtl.text = package.remark!; _multiImgController.setImageUrls = package.photoUrls; user = User( fcsID: package.fcsID, diff --git a/lib/pages/receiving/receiving_info.dart b/lib/pages/receiving/receiving_info.dart index 08938df..d029bf8 100644 --- a/lib/pages/receiving/receiving_info.dart +++ b/lib/pages/receiving/receiving_info.dart @@ -149,8 +149,8 @@ class _ReceivingInfoState extends State { ); PackageModel packageModel = Provider.of(context, listen: false); - var pkg = await packageModel.getPackage(widget.package!.id); - initPackage(pkg); + var pkg = await packageModel.getPackage(widget.package!.id!); + initPackage(pkg!); } _delete() { diff --git a/lib/pages/receiving/receiving_list.dart b/lib/pages/receiving/receiving_list.dart index d8e9777..8f23bbb 100644 --- a/lib/pages/receiving/receiving_list.dart +++ b/lib/pages/receiving/receiving_list.dart @@ -94,7 +94,7 @@ class _ReceivingListState extends State { _searchCallback(Package package) async { var packageModel = Provider.of(context, listen: false); - Package _package = await packageModel.getPackage(package.id); + Package? _package = await packageModel.getPackage(package.id!); if (_package == null) return; Navigator.push( context, diff --git a/lib/pages/receiving/receiving_list_row.dart b/lib/pages/receiving/receiving_list_row.dart index fd65134..95430de 100644 --- a/lib/pages/receiving/receiving_list_row.dart +++ b/lib/pages/receiving/receiving_list_row.dart @@ -55,7 +55,7 @@ class ReceivingListRow extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 8.0), child: new Text( - package!.id == null ? '' : package!.trackingID, + package!.id == null ? '' : package!.trackingID!, style: new TextStyle( fontSize: 15.0, color: Colors.black), ), @@ -63,7 +63,7 @@ class ReceivingListRow extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 8.0), child: new Text( - package!.market == null ? '' : package!.market, + package!.market == null ? '' : package!.market!, style: new TextStyle( fontSize: 15.0, color: Colors.black), ), @@ -79,12 +79,14 @@ class ReceivingListRow extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.all(3.0), - child: getStatus(package!.status), + child: getStatus(package!.status??""), ), Padding( padding: const EdgeInsets.all(0), child: new Text( - dateFormat.format(package!.currentStatusDate), + package!.currentStatusDate != null + ? dateFormat.format(package!.currentStatusDate!) + : '', style: new TextStyle(fontSize: 15.0, color: Colors.grey), ), ), diff --git a/lib/pages/shipment/box_row.dart b/lib/pages/shipment/box_row.dart index 5b41300..7e9d589 100644 --- a/lib/pages/shipment/box_row.dart +++ b/lib/pages/shipment/box_row.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; class BoxRow extends StatelessWidget { final Carton box; - const BoxRow({Key key, this.box}) : super(key: key); + const BoxRow({Key? key, required this.box}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/pages/shipment/model/shipment_model.dart b/lib/pages/shipment/model/shipment_model.dart index b78c4bb..0dd8c56 100644 --- a/lib/pages/shipment/model/shipment_model.dart +++ b/lib/pages/shipment/model/shipment_model.dart @@ -11,7 +11,7 @@ import 'package:logging/logging.dart'; class ShipmentModel extends BaseModel { final log = Logger('ShipmentModel'); - StreamSubscription listener; + StreamSubscription? listener; List get shipments => _menuSelectedIndex == 1 ? _shipments @@ -19,7 +19,7 @@ class ShipmentModel extends BaseModel { List _shipments = []; - Paginator _delivered; + late Paginator _delivered; bool isLoading = false; int _menuSelectedIndex = 1; @@ -28,7 +28,7 @@ class ShipmentModel extends BaseModel { notifyListeners(); } - get menuSelectedIndex => _menuSelectedIndex; + int get menuSelectedIndex => _menuSelectedIndex; initData(bool forCustomer, {bool myPickup = false}) { logout(); @@ -43,11 +43,11 @@ class ShipmentModel extends BaseModel { @override logout() async { if (_delivered != null) _delivered.close(); - if (listener != null) await listener.cancel(); + if (listener != null) await listener!.cancel(); _shipments = []; } - Future loadMore({bool isCustomer}) async { + Future loadMore({bool? isCustomer}) async { if (menuSelectedIndex == 1) return; // when delivered menu is not selected return if (_delivered.ended) return; @@ -59,7 +59,7 @@ class ShipmentModel extends BaseModel { }); } - Future refresh({bool isCustomer}) async { + Future refresh({bool? isCustomer}) async { if (menuSelectedIndex == 1) return; // when delivered menu is not selected return await _delivered.refresh(onFinished: () { @@ -70,16 +70,16 @@ class ShipmentModel extends BaseModel { Paginator _getDelivered(bool isCustomer) { if (!isCustomer) { if (user == null || - !((user.hasPackages() || - user.hasReceiving() || - user.hasProcessing()))) throw "No privilege"; + !((user!.hasPackages() || + user!.hasReceiving() || + user!.hasProcessing()))) throw "No privilege"; } - var pageQuery = Firestore.instance + var pageQuery = FirebaseFirestore.instance .collection("/$shipments_collection") .where("is_delivered", isEqualTo: true) .where("is_deleted", isEqualTo: false); if (isCustomer) { - pageQuery = pageQuery.where("user_id", isEqualTo: user.id); + pageQuery = pageQuery.where("user_id", isEqualTo: user!.id); } pageQuery = pageQuery.orderBy("status_date", descending: true); var paginator = new Paginator(pageQuery, rowPerLoad: 20, toObj: (data, id) { @@ -90,30 +90,31 @@ class ShipmentModel extends BaseModel { Future _loadShipments(bool forCustomer, bool myPickup) async { if (user == null) return; - if (!forCustomer && !user.hasShipment()) return; - if (listener != null) listener.cancel(); + if (!forCustomer && !user!.hasShipment()) return; + if (listener != null) listener!.cancel(); _shipments = []; try { - var q = Firestore.instance + var q = FirebaseFirestore.instance .collection("$shipments_collection") .where("is_delivered", isEqualTo: false) .where("is_canceled", isEqualTo: false) .where("is_deleted", isEqualTo: false); if (forCustomer) { - q = q.where("user_id", isEqualTo: user.id); + q = q.where("user_id", isEqualTo: user!.id); } if (myPickup) { - q = q.where("pickup_user_id", isEqualTo: user.id); + q = q.where("pickup_user_id", isEqualTo: user!.id); } q = q.orderBy("created_at", descending: true); listener = q.snapshots().listen((QuerySnapshot snapshot) { _shipments.clear(); - _shipments = snapshot.documents.map((documentSnapshot) { + _shipments = snapshot.docs.map((documentSnapshot) { var s = Shipment.fromMap( - documentSnapshot.data, documentSnapshot.documentID); + documentSnapshot.data as Map, + documentSnapshot.id); return s; }).toList(); notifyListeners(); @@ -130,18 +131,17 @@ class ShipmentModel extends BaseModel { shipment_courier_dropoff ]; - Shipment getActiveShipment(String shipmentID) { - return _shipments?.firstWhere((e) => e.id == shipmentID, - orElse: () => null); + Shipment? getActiveShipment(String shipmentID) { + return _shipments.firstWhere((e) => e.id == shipmentID); } - Future getShipment(String shipmentID) async { + Future getShipment(String shipmentID) async { String path = "/$shipments_collection"; try { - var ref = Firestore.instance.collection("$path").document(shipmentID); - var snap = await ref.get(source: Source.server); + var ref = FirebaseFirestore.instance.collection("$path").doc(shipmentID); + var snap = await ref.get(const GetOptions(source: Source.server)); if (snap.exists) { - var s = Shipment.fromMap(snap.data, snap.documentID); + var s = Shipment.fromMap(snap.data as Map, snap.id); return s; } } catch (e) { @@ -150,20 +150,20 @@ class ShipmentModel extends BaseModel { return null; } - Future> getShipmentWithHandlingFee( + Future?> getShipmentWithHandlingFee( String fcsShipmentID, String userID) async { String path = "/$shipments_collection"; try { - var q = Firestore.instance + var q = FirebaseFirestore.instance .collection("$path") .where("user_id", isEqualTo: userID) .where("is_deleted", isEqualTo: false) .where("handling_fee", isGreaterThan: 0) .where("fcs_shipment_id", isEqualTo: fcsShipmentID); - var snaps = await q.getDocuments(source: Source.server); - List shipments = snaps.documents.map((snap) { + var snaps = await q.get(const GetOptions(source: Source.server)); + List shipments = snaps.docs.map((snap) { if (snap.exists) { - var s = Shipment.fromMap(snap.data, snap.documentID); + var s = Shipment.fromMap(snap.data as Map, snap.id); return s; } }).toList(); diff --git a/lib/pages/shipment/shipment_assign.dart b/lib/pages/shipment/shipment_assign.dart index 5d160b2..7c37695 100644 --- a/lib/pages/shipment/shipment_assign.dart +++ b/lib/pages/shipment/shipment_assign.dart @@ -14,14 +14,14 @@ import 'package:fcs/pages/widgets/local_title.dart'; import 'package:fcs/pages/widgets/progress.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:intl/intl.dart'; import 'package:provider/provider.dart'; import 'widgets.dart'; class ShipmentAssign extends StatefulWidget { - final Shipment shipment; + final Shipment? shipment; ShipmentAssign({this.shipment}); @override @@ -38,13 +38,13 @@ class _ShipmentAssignState extends State { TextEditingController _pickupDate = new TextEditingController(); TextEditingController _handlingFee = new TextEditingController(); - Shipment _shipment; + Shipment? _shipment; bool _isLoading = false; var now = new DateTime.now(); - String _selectedShipmentType; - User _user; - List _users; + String? _selectedShipmentType; + User? _user; + List? _users; @override void initState() { @@ -53,18 +53,19 @@ class _ShipmentAssignState extends State { _shipment = widget.shipment; _loadUsers(); - _selectedShipmentType = _shipment.shipmentType; - _fromTimeEditingController.text = _shipment.pickupTimeStart; - _toTimeEditingController.text = _shipment.pickupTimeEnd; - _pickupDate.text = dateFormatter.format(_shipment.pickupDate ?? now); - _handlingFee.text = _shipment.handlingFee?.toString() ?? "0"; + _selectedShipmentType = _shipment!.shipmentType; + _fromTimeEditingController.text = _shipment!.pickupTimeStart!; + _toTimeEditingController.text = _shipment!.pickupTimeEnd!; + _pickupDate.text = dateFormatter.format(_shipment!.pickupDate! ?? now); + _handlingFee.text = _shipment!.handlingFee != null + ? _shipment!.handlingFee.toString() + : "0"; } _loadUsers() async { StaffModel staffModel = Provider.of(context, listen: false); var users = await staffModel.getPickupEmployees(); - var selectUser = users.firstWhere((e) => e.id == _shipment.pickupUserID, - orElse: () => null); + var selectUser = users.firstWhere((e) => e.id == _shipment!.pickupUserID); setState(() { _users = users; _user = selectUser; @@ -74,7 +75,7 @@ class _ShipmentAssignState extends State { @override Widget build(BuildContext context) { ShipmentModel pickupModel = Provider.of(context); - final shipmentNumberBox = getShipmentNumberStatus(context, _shipment); + final shipmentNumberBox = getShipmentNumberStatus(context, _shipment!); bool isLocalPickup = _selectedShipmentType == shipment_local_pickup; bool isCourierPickup = _selectedShipmentType == shipment_courier_pickup; bool isLocalDropoff = _selectedShipmentType == shipment_local_dropoff; @@ -146,15 +147,15 @@ class _ShipmentAssignState extends State { } _save() async { - _shipment.pickupUserID = this._user.id; - _shipment.handlingFee = double.tryParse(_handlingFee.text) ?? 0; + _shipment!.pickupUserID = this._user!.id; + _shipment!.handlingFee = double.tryParse(_handlingFee.text) ?? 0; setState(() { _isLoading = true; }); try { ShipmentModel shipmentModel = Provider.of(context, listen: false); - await shipmentModel.assignShipment(_shipment); + await shipmentModel.assignShipment(_shipment!); Navigator.pop(context, true); } catch (e) { showMsgDialog(context, "Error", e.toString()); diff --git a/lib/pages/shipment/shipment_box_editor.dart b/lib/pages/shipment/shipment_box_editor.dart index c04338d..1fd3778 100644 --- a/lib/pages/shipment/shipment_box_editor.dart +++ b/lib/pages/shipment/shipment_box_editor.dart @@ -17,11 +17,12 @@ import 'package:fcs/pages/widgets/my_data_table.dart'; import 'package:fcs/pages/widgets/progress.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:provider/provider.dart'; class ShipmentBoxEditor extends StatefulWidget { - final Carton box; + final Carton? box; ShipmentBoxEditor({this.box}); @override @@ -33,9 +34,9 @@ class _ShipmentBoxEditorState extends State { TextEditingController _widthCtl = new TextEditingController(); TextEditingController _heightCtl = new TextEditingController(); - Carton _box; + Carton? _box; bool _isLoading = false; - bool _isNew; + late bool _isNew; double volumetricRatio = 0; double shipmentWeight = 0; @@ -50,16 +51,16 @@ class _ShipmentBoxEditorState extends State { if (widget.box != null) { _box = widget.box; _isNew = false; - _lengthCtl.text = _box.length.toString(); - _widthCtl.text = _box.width.toString(); - _heightCtl.text = _box.height.toString(); + _lengthCtl.text = _box!.length != null ? _box!.length.toString() : ''; + _widthCtl.text = _box!.width != null ? _box!.width.toString() : ''; + _heightCtl.text = _box!.height != null ? _box!.height.toString() : ''; } else { var shipmentModel = Provider.of(context, listen: false); _isNew = true; _box = Carton(cargoTypes: []); - _box.deliveryAddress = shipmentModel.defalutAddress; + _box!.deliveryAddress = shipmentModel.defalutAddress; _lengthCtl.text = "12"; _widthCtl.text = "12"; @@ -151,10 +152,11 @@ class _ShipmentBoxEditorState extends State { color: primaryColor, ), onPressed: () async { - CargoType cargo = await Navigator.push( + CargoType? cargo = await Navigator.push( context, CupertinoPageRoute( builder: (context) => CargoTypeEditor())); + if (cargo == null) return; _addCargo(cargo); }), ), @@ -186,19 +188,19 @@ class _ShipmentBoxEditorState extends State { shipmentWeightBox, LocalTitle(textKey: "shipment.box.delivery"), DefaultDeliveryAddress( - deliveryAddress: _box.deliveryAddress, + deliveryAddress: _box!.deliveryAddress, labelKey: "shipment.box.delivery", onTap: () async { - DeliveryAddress d = await Navigator.push( + DeliveryAddress? d = await Navigator.push( context, CupertinoPageRoute( builder: (context) => DeliveryAddressSelection( - deliveryAddress: _box.deliveryAddress, + deliveryAddress: _box!.deliveryAddress, user: mainModel.user)), ); if (d == null) return; setState(() { - _box.deliveryAddress = d; + _box!.deliveryAddress = d; }); }), createBtn @@ -210,25 +212,26 @@ class _ShipmentBoxEditorState extends State { } List getCargoRows(BuildContext context) { - if (_box.cargoTypes == null) { + if (_box!.cargoTypes == null) { return []; } double total = 0; - var rows = _box.cargoTypes.map((c) { + var rows = _box!.cargoTypes.map((c) { total += c.weight; return MyDataRow( onSelectChanged: (bool selected) async { - CargoType cargo = await Navigator.push( + CargoType? cargo = await Navigator.push( context, CupertinoPageRoute( builder: (context) => CargoTypeEditor( cargo: c, ))); + if (cargo == null) return; _addCargo(cargo); }, cells: [ MyDataCell(new Text( - c.name == null ? "" : c.name, + c.name == null ? "" : c.name!, style: textStyle, )), MyDataCell( @@ -281,14 +284,14 @@ class _ShipmentBoxEditorState extends State { _addCargo(CargoType cargo) { if (cargo == null) return; setState(() { - _box.cargoTypes.remove(cargo); - _box.cargoTypes.add(cargo); + _box!.cargoTypes.remove(cargo); + _box!.cargoTypes.add(cargo); }); } _removeCargo(CargoType cargo) { setState(() { - _box.cargoTypes.remove(cargo); + _box!.cargoTypes.remove(cargo); }); } @@ -296,9 +299,9 @@ class _ShipmentBoxEditorState extends State { double l = double.parse(_lengthCtl.text, (s) => 0); double w = double.parse(_widthCtl.text, (s) => 0); double h = double.parse(_heightCtl.text, (s) => 0); - _box.length = l; - _box.width = w; - _box.height = h; + _box!.length = l; + _box!.width = w; + _box!.height = h; Navigator.pop(context, _box); } } diff --git a/lib/pages/shipment/shipment_confirm.dart b/lib/pages/shipment/shipment_confirm.dart index 5017eed..68daf42 100644 --- a/lib/pages/shipment/shipment_confirm.dart +++ b/lib/pages/shipment/shipment_confirm.dart @@ -8,14 +8,15 @@ import 'package:fcs/pages/widgets/local_text.dart'; import 'package:fcs/pages/widgets/progress.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'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; import 'widgets.dart'; class ShipmentConfirm extends StatefulWidget { - final Shipment shipment; + final Shipment? shipment; ShipmentConfirm({this.shipment}); @override @@ -27,7 +28,7 @@ class _ShipmentConfirmState extends State { var timeFormatter = new DateFormat('jm'); TextEditingController _handlingFee = new TextEditingController(); - Shipment _shipment; + Shipment? _shipment; bool _isLoading = false; var now = new DateTime.now(); @@ -36,17 +37,17 @@ class _ShipmentConfirmState extends State { super.initState(); _shipment = widget.shipment; - _handlingFee.text = _shipment.handlingFee?.toString() ?? "0"; + _handlingFee.text = _shipment!.handlingFee?.toString() ?? "0"; } @override Widget build(BuildContext context) { - final shipmentNumberBox = getShipmentNumberStatus(context, _shipment); + final shipmentNumberBox = getShipmentNumberStatus(context, _shipment!); final handlingFeeBox = InputText( labelTextKey: "shipment.handling.fee", controller: _handlingFee, - iconData: FontAwesome.truck, + iconData: FontAwesomeIcons.truck, ); final confirmbtn = LocalButton( textKey: "shipment.confirm.btn", @@ -94,14 +95,14 @@ class _ShipmentConfirmState extends State { } _save() async { - _shipment.handlingFee = double.tryParse(_handlingFee.text) ?? 0; + _shipment!.handlingFee = double.tryParse(_handlingFee.text) ?? 0; setState(() { _isLoading = true; }); try { ShipmentModel shipmentModel = Provider.of(context, listen: false); - await shipmentModel.confirmShipment(_shipment); + await shipmentModel.confirmShipment(_shipment!); Navigator.pop(context, true); } catch (e) { showMsgDialog(context, "Error", e.toString()); diff --git a/lib/pages/shipment/shipment_editor.dart b/lib/pages/shipment/shipment_editor.dart index 6ea4f81..8dda866 100644 --- a/lib/pages/shipment/shipment_editor.dart +++ b/lib/pages/shipment/shipment_editor.dart @@ -29,7 +29,7 @@ import 'shipment_box_editor.dart'; import 'widgets.dart'; class ShipmentEditor extends StatefulWidget { - final Shipment shipment; + final Shipment? shipment; ShipmentEditor({this.shipment}); @override @@ -45,12 +45,12 @@ class _ShipmentEditorState extends State { TextEditingController _toTimeEditingController = new TextEditingController(); TextEditingController _pickupDate = new TextEditingController(); - Shipment _shipment; + Shipment? _shipment; bool _isLoading = false; var now = new DateTime.now(); - bool _isNew; + late bool _isNew; - String _selectedShipmentType; + String? _selectedShipmentType; @override void initState() { @@ -59,20 +59,21 @@ class _ShipmentEditorState extends State { if (widget.shipment != null) { _isNew = false; _shipment = widget.shipment; - _selectedShipmentType = _shipment.shipmentType; - _fromTimeEditingController.text = _shipment.pickupTimeStart; - _toTimeEditingController.text = _shipment.pickupTimeEnd; - _pickupDate.text = dateFormatter.format(_shipment.pickupDate ?? now); + _selectedShipmentType = _shipment!.shipmentType; + _fromTimeEditingController.text = _shipment!.pickupTimeStart ?? ""; + _toTimeEditingController.text = _shipment!.pickupTimeEnd ?? ""; + _pickupDate.text = dateFormatter.format(_shipment!.pickupDate ?? now); } else { _isNew = true; _selectedShipmentType = shipment_local_pickup; _pickupDate.text = dateFormatter.format(now); _fromTimeEditingController.text = "${timeFormatter.format(now)}"; _toTimeEditingController.text = "${timeFormatter.format(now)}"; - _shipment = Shipment(boxes: []); + // _shipment = Shipment(boxes: []); var shipmentModel = Provider.of(context, listen: false); - _shipment.pickupAddress = shipmentModel.defalutAddress; + _shipment!.pickupAddress = shipmentModel.defalutAddress; + _shipment!.boxes = []; _pickupDate.text = dateFormatter.format(now); } } @@ -86,7 +87,7 @@ class _ShipmentEditorState extends State { Widget build(BuildContext context) { MainModel mainModel = Provider.of(context); ShipmentModel pickupModel = Provider.of(context); - final shipmentNumberBox = getShipmentNumberStatus(context, _shipment); + final shipmentNumberBox = getShipmentNumberStatus(context, _shipment!); bool isLocalPickup = _selectedShipmentType == shipment_local_pickup; bool isCourierPickup = _selectedShipmentType == shipment_courier_pickup; bool isLocalDropoff = _selectedShipmentType == shipment_local_dropoff; @@ -121,20 +122,20 @@ class _ShipmentEditorState extends State { backgroundColor: Colors.white, )); final pickupAddressBox = DefaultDeliveryAddress( - deliveryAddress: _shipment.pickupAddress, + deliveryAddress: _shipment!.pickupAddress, iconData: Icons.location_on, labelKey: "shipment.location", onTap: () async { - DeliveryAddress address = await Navigator.push( + DeliveryAddress? address = await Navigator.push( context, CupertinoPageRoute( builder: (context) => DeliveryAddressSelection( - deliveryAddress: _shipment.pickupAddress, + deliveryAddress: _shipment!.pickupAddress, user: mainModel.user)), ); if (address == null) return; setState(() { - _shipment.pickupAddress = address; + _shipment!.pickupAddress = address; }); }, ); @@ -142,7 +143,7 @@ class _ShipmentEditorState extends State { FcsIDIcon(), Expanded( child: DisplayText( - text: mainModel.setting.usaAddress, + text: mainModel.setting!.usaAddress, ), ) ]); @@ -194,7 +195,7 @@ class _ShipmentEditorState extends State { LocalRadioButtons( values: pickupModel.shipmentTypes, selectedValue: _selectedShipmentType, - callback: (v) { + callback: (String? v) { setState(() { _selectedShipmentType = v; }); @@ -239,7 +240,7 @@ class _ShipmentEditorState extends State { ), ), Column( - children: getBoxList(context, _shipment.boxes), + children: getBoxList(context, _shipment!.boxes), ), _isNew ? createBtn : updateBtn, ], @@ -276,7 +277,7 @@ class _ShipmentEditorState extends State { _addBox(Carton box) { if (box == null) return; box.cartonType = carton_from_shipments; - _shipment.boxes.add(box); + _shipment!.boxes.add(box); setState(() {}); } @@ -287,15 +288,15 @@ class _ShipmentEditorState extends State { _removeBox(Carton box) { if (box == null) return; - _shipment.boxes.remove(box); + _shipment!.boxes.remove(box); setState(() {}); } _save() async { - _shipment.shipmentType = this._selectedShipmentType; - _shipment.pickupDate = dateFormatter.parse(_pickupDate.text); - _shipment.pickupTimeStart = _fromTimeEditingController.text; - _shipment.pickupTimeEnd = _toTimeEditingController.text; + _shipment!.shipmentType = this._selectedShipmentType; + _shipment!.pickupDate = dateFormatter.parse(_pickupDate.text); + _shipment!.pickupTimeStart = _fromTimeEditingController.text; + _shipment!.pickupTimeEnd = _toTimeEditingController.text; setState(() { _isLoading = true; }); @@ -303,9 +304,9 @@ class _ShipmentEditorState extends State { ShipmentModel shipmentModel = Provider.of(context, listen: false); if (_isNew) { - await shipmentModel.createShipment(_shipment); + await shipmentModel.createShipment(_shipment!); } else { - await shipmentModel.updateShipment(_shipment); + await shipmentModel.updateShipment(_shipment!); } Navigator.pop(context, true); } catch (e) { @@ -319,10 +320,10 @@ class _ShipmentEditorState extends State { _openCourierWebsite() { MainModel mainModel = Provider.of(context, listen: false); - launch("${mainModel.setting.courierWebsite}"); + launch("${mainModel.setting!.courierWebsite}"); } isDataChanged() { - return _shipment.boxes.isNotEmpty; + return _shipment!.boxes.isNotEmpty; } } diff --git a/lib/pages/shipment/shipment_info.dart b/lib/pages/shipment/shipment_info.dart index 0b011bc..382d2af 100644 --- a/lib/pages/shipment/shipment_info.dart +++ b/lib/pages/shipment/shipment_info.dart @@ -20,7 +20,7 @@ import 'package:fcs/pages/widgets/multi_img_controller.dart'; import 'package:fcs/pages/widgets/progress.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:intl/intl.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; @@ -32,8 +32,8 @@ import 'shipment_editor.dart'; import 'widgets.dart'; class ShipmentInfo extends StatefulWidget { - final bool isCustomer; - final Shipment shipment; + final bool? isCustomer; + final Shipment? shipment; ShipmentInfo({this.shipment, this.isCustomer}); @override @@ -62,39 +62,42 @@ class _ShipmentInfoState extends State { TextEditingController _pickupDate = new TextEditingController(); TextEditingController _handlingFeeController = new TextEditingController(); - Shipment _shipment; + Shipment? _shipment; bool _isLoading = false; - bool _isCustomer; + late bool _isCustomer; var now = new DateTime.now(); @override void initState() { super.initState(); _shipment = widget.shipment; - _isCustomer = widget.isCustomer; - _loadCartons(_shipment.id); + _isCustomer = widget.isCustomer!; + _loadCartons(_shipment!.id!); - _addressEditingController.text = _shipment.address; - _fromTimeEditingController.text = _shipment.pickupTimeStart; - _toTimeEditingController.text = _shipment.pickupTimeEnd; - _noOfPackageEditingController.text = _shipment.numberOfPackage.toString(); - _weightEditingController.text = _shipment.weight.toString(); - _pickupDate.text = dateFormatter.format(_shipment.pickupDate ?? now); + _addressEditingController.text = _shipment!.address ?? ""; + _fromTimeEditingController.text = _shipment!.pickupTimeStart ?? ""; + _toTimeEditingController.text = _shipment!.pickupTimeEnd ?? ""; + _noOfPackageEditingController.text = _shipment!.numberOfPackage != null + ? _shipment!.numberOfPackage.toString() + : ""; + _weightEditingController.text = + _shipment!.weight != null ? _shipment!.weight.toString() : ""; + _pickupDate.text = dateFormatter.format(_shipment!.pickupDate ?? now); } _loadCartons(String shipmentID) async { CartonModel cartonModel = Provider.of(context, listen: false); var cartons = await cartonModel.getCartons(shipmentID); setState(() { - _shipment.boxes = cartons; + _shipment!.boxes = cartons; }); } _loadShipment(String id) async { ShipmentModel shipmentModel = Provider.of(context, listen: false); - Shipment s = await shipmentModel.getShipment(id); - s.boxes = _shipment.boxes; + Shipment? s = await shipmentModel.getShipment(id); + s!.boxes = _shipment!.boxes; setState(() { _shipment = s; }); @@ -109,31 +112,34 @@ class _ShipmentInfoState extends State { Widget build(BuildContext context) { MainModel mainModel = Provider.of(context); ShipmentModel pickupModel = Provider.of(context); - bool isLocalPickup = _shipment.shipmentType == shipment_local_pickup; - bool isCourierPickup = _shipment.shipmentType == shipment_courier_pickup; - bool isLocalDropoff = _shipment.shipmentType == shipment_local_dropoff; - bool isCourierDropoff = _shipment.shipmentType == shipment_courier_dropoff; - bool isEditable = widget.isCustomer - ? (_shipment.isPending || _shipment.isAssigned) - : (_shipment.isPending || _shipment.isAssigned || _shipment.isPickuped); + bool isLocalPickup = _shipment!.shipmentType == shipment_local_pickup; + bool isCourierPickup = _shipment!.shipmentType == shipment_courier_pickup; + bool isLocalDropoff = _shipment!.shipmentType == shipment_local_dropoff; + bool isCourierDropoff = _shipment!.shipmentType == shipment_courier_dropoff; + bool isEditable = widget.isCustomer! + ? (_shipment!.isPending || _shipment!.isAssigned) + : (_shipment!.isPending || + _shipment!.isAssigned || + _shipment!.isPickuped); bool canCancel = - _shipment.isPending || _shipment.isConfirmed || _shipment.isAssigned; + _shipment!.isPending || _shipment!.isConfirmed || _shipment!.isAssigned; final popupMenu = LocalPopupMenuButton( popmenus: [ LocalPopupMenu( - enabled: _shipment.isPending && isLocalPickup, + enabled: _shipment!.isPending && isLocalPickup, id: 1, textKey: "shipment.assign.for.pickup", ), LocalPopupMenu( enabled: - (_shipment.isPickuped && isLocalPickup) || _shipment.isReceived, + (_shipment!.isPickuped && isLocalPickup) || _shipment!.isReceived, id: 3, textKey: "shipment.pack.menuitem", ), LocalPopupMenu( - enabled: _shipment.isPending && (isCourierPickup || isCourierDropoff), + enabled: + _shipment!.isPending && (isCourierPickup || isCourierDropoff), id: 4, textKey: "shipment.confirm.menuitem", ), @@ -149,7 +155,11 @@ class _ShipmentInfoState extends State { ? _gotoAssign() : p.id == 2 ? _cancel() - : p.id == 3 ? _gotoPack() : p.id == 4 ? _gotoConfirm() : null, + : p.id == 3 + ? _gotoPack() + : p.id == 4 + ? _gotoConfirm() + : null, ); final popupMenuCustomer = LocalPopupMenuButton( popmenus: [ @@ -163,29 +173,31 @@ class _ShipmentInfoState extends State { buttonIcon: Icons.more_vert, popupMenuCallback: (p) => p.id == 2 ? _cancel() : null, ); - final shipmentNumberBox = getShipmentNumberStatus(context, _shipment); + final shipmentNumberBox = getShipmentNumberStatus(context, _shipment!); final fromTimeBox = DisplayText( labelTextKey: 'shipment.from', iconData: Icons.timer, - text: _shipment.pickupTimeStart, + text: _shipment!.pickupTimeStart ?? "", ); final toTimeBox = DisplayText( labelTextKey: 'shipment.to', iconData: Icons.timer_off, - text: _shipment.pickupTimeEnd, + text: _shipment!.pickupTimeEnd ?? "", ); final pickupDateBox = DisplayText( labelTextKey: "shipment.date", iconData: Icons.date_range, - text: dateFormatter.format(_shipment.pickupDate), + text: _shipment!.pickupDate != null + ? dateFormatter.format(_shipment!.pickupDate!) + : '', ); var localDropoffAddressBox = Row(children: [ FcsIDIcon(), Expanded( child: DisplayText( - text: mainModel.setting.usaAddress, + text: mainModel.setting!.usaAddress ?? "", ), ) ]); @@ -201,17 +213,17 @@ class _ShipmentInfoState extends State { backgroundColor: Colors.white, )); final pickupAddressBox = DefaultDeliveryAddress( - deliveryAddress: _shipment.pickupAddress, + deliveryAddress: _shipment!.pickupAddress, iconData: Icons.location_on, labelKey: "shipment.location", ); var usersBox = DisplayText( labelTextKey: "shipment.staff", - text: _shipment.pickupUserName, + text: _shipment!.pickupUserName ?? "", iconData: MaterialCommunityIcons.worker); var handlingFeeBox = DisplayText( labelTextKey: "shipment.handling.fee", - text: (_shipment.handlingFee ?? 0).toString(), + text: (_shipment!.handlingFee ?? 0).toString(), iconData: FontAwesome.truck); final assignCompleteBtn = LocalButton( @@ -232,7 +244,7 @@ class _ShipmentInfoState extends State { ); final fcsShipmentNumberBox = DisplayText( - text: _shipment.fcsShipmentNumber, + text: _shipment!.fcsShipmentNumber ?? "", labelTextKey: "FCSshipment.number", iconData: Ionicons.ios_airplane, ); @@ -267,7 +279,7 @@ class _ShipmentInfoState extends State { color: isEditable ? primaryColor : Colors.grey), onPressed: isEditable ? _edit : null, ), - widget.isCustomer ? popupMenuCustomer : popupMenu, + widget.isCustomer! ? popupMenuCustomer : popupMenu, ]), body: Padding( padding: const EdgeInsets.all(10.0), @@ -278,7 +290,7 @@ class _ShipmentInfoState extends State { LocalRadioButtons( readOnly: true, values: pickupModel.shipmentTypes, - selectedValue: _shipment.shipmentType, + selectedValue: _shipment!.shipmentType, ), ...(isLocalDropoff ? [ @@ -305,13 +317,13 @@ class _ShipmentInfoState extends State { LocalTitle( textKey: "boxes.name", trailing: Text( - "${_shipment.totalCount} Cartons - ${_shipment.totalWeight} lb"), + "${_shipment!.totalCount} Cartons - ${_shipment!.totalWeight} lb"), ), Column( - children: getBoxList(context, _shipment.boxes), + children: getBoxList(context, _shipment!.boxes), ), !_isCustomer ? fcsShipmentNumberBox : Container(), - ...(!_shipment.isPending + ...(!_shipment!.isPending ? [ handlingFeeBox, ] @@ -324,22 +336,22 @@ class _ShipmentInfoState extends State { : []), ...(isLocalPickup && !_isCustomer ? [ - _shipment.isPending ? assignCompleteBtn : Container(), - _shipment.isAssigned ? completePickupBtn : Container(), - _shipment.isPickuped ? completePackBtn : Container(), + _shipment!.isPending ? assignCompleteBtn : Container(), + _shipment!.isAssigned ? completePickupBtn : Container(), + _shipment!.isPickuped ? completePackBtn : Container(), ] : []), ...((isCourierPickup || isCourierDropoff) && !_isCustomer ? [ - _shipment.isPending ? confirmCompleteBtn : Container(), - _shipment.isConfirmed ? completeReceiveBtn : Container(), - _shipment.isReceived ? completePackBtn : Container(), + _shipment!.isPending ? confirmCompleteBtn : Container(), + _shipment!.isConfirmed ? completeReceiveBtn : Container(), + _shipment!.isReceived ? completePackBtn : Container(), ] : []), ...((isLocalDropoff) && !_isCustomer ? [ - _shipment.isPending ? completeReceiveBtn : Container(), - _shipment.isReceived ? completePackBtn : Container(), + _shipment!.isPending ? completeReceiveBtn : Container(), + _shipment!.isReceived ? completePackBtn : Container(), ] : []), ], @@ -361,7 +373,7 @@ class _ShipmentInfoState extends State { } _edit() async { - bool updated = await Navigator.push( + bool? updated = await Navigator.push( context, CupertinoPageRoute( builder: (context) => ShipmentEditor( @@ -369,8 +381,8 @@ class _ShipmentInfoState extends State { )), ); if (updated ?? false) { - await _loadShipment(_shipment.id); - await _loadCartons(_shipment.id); + await _loadShipment(_shipment!.id!); + await _loadCartons(_shipment!.id!); } } @@ -387,7 +399,7 @@ class _ShipmentInfoState extends State { try { ShipmentModel shipmentModel = Provider.of(context, listen: false); - await shipmentModel.cancelShipment(_shipment); + await shipmentModel.cancelShipment(_shipment!); Navigator.pop(context, true); } catch (e) { showMsgDialog(context, "Error", e.toString()); @@ -400,11 +412,11 @@ class _ShipmentInfoState extends State { _openCourierWebsite() { MainModel mainModel = Provider.of(context, listen: false); - launch("${mainModel.setting.courierWebsite}"); + launch("${mainModel.setting!.courierWebsite}"); } _gotoAssign() async { - bool assigned = await Navigator.push( + bool? assigned = await Navigator.push( context, CupertinoPageRoute( builder: (context) => ShipmentAssign( @@ -412,7 +424,7 @@ class _ShipmentInfoState extends State { )), ); if (assigned ?? false) { - await _loadShipment(_shipment.id); + await _loadShipment(_shipment!.id!); } } @@ -429,7 +441,7 @@ class _ShipmentInfoState extends State { try { ShipmentModel shipmentModel = Provider.of(context, listen: false); - await shipmentModel.completeAssignShipment(_shipment); + await shipmentModel.completeAssignShipment(_shipment!); Navigator.pop(context, true); } catch (e) { showMsgDialog(context, "Error", e.toString()); @@ -453,7 +465,7 @@ class _ShipmentInfoState extends State { try { ShipmentModel shipmentModel = Provider.of(context, listen: false); - await shipmentModel.completePickupShipment(_shipment); + await shipmentModel.completePickupShipment(_shipment!); Navigator.pop(context, true); } catch (e) { showMsgDialog(context, "Error", e.toString()); @@ -465,16 +477,16 @@ class _ShipmentInfoState extends State { } _gotoPack() async { - bool assigned = await Navigator.push( + bool? assigned = await Navigator.push( context, CupertinoPageRoute( builder: (context) => ShipmentPack( - shipment: _shipment, + shipment: _shipment!, )), ); if (assigned ?? false) { - await _loadShipment(_shipment.id); - await _loadCartons(_shipment.id); + await _loadShipment(_shipment!.id!); + await _loadCartons(_shipment!.id!); } } @@ -491,7 +503,7 @@ class _ShipmentInfoState extends State { try { ShipmentModel shipmentModel = Provider.of(context, listen: false); - await shipmentModel.completePackShipment(_shipment); + await shipmentModel.completePackShipment(_shipment!); Navigator.pop(context, true); } catch (e) { showMsgDialog(context, "Error", e.toString()); @@ -503,7 +515,7 @@ class _ShipmentInfoState extends State { } _gotoConfirm() async { - bool assigned = await Navigator.push( + bool? assigned = await Navigator.push( context, CupertinoPageRoute( builder: (context) => ShipmentConfirm( @@ -511,7 +523,7 @@ class _ShipmentInfoState extends State { )), ); if (assigned ?? false) { - await _loadShipment(_shipment.id); + await _loadShipment(_shipment!.id!); } } @@ -528,7 +540,7 @@ class _ShipmentInfoState extends State { try { ShipmentModel shipmentModel = Provider.of(context, listen: false); - await shipmentModel.completeConfirmShipment(_shipment); + await shipmentModel.completeConfirmShipment(_shipment!); Navigator.pop(context, true); } catch (e) { showMsgDialog(context, "Error", e.toString()); @@ -552,7 +564,7 @@ class _ShipmentInfoState extends State { try { ShipmentModel shipmentModel = Provider.of(context, listen: false); - await shipmentModel.completeReceiveShipment(_shipment); + await shipmentModel.completeReceiveShipment(_shipment!); Navigator.pop(context, true); } catch (e) { showMsgDialog(context, "Error", e.toString()); diff --git a/lib/pages/shipment/shipment_list.dart b/lib/pages/shipment/shipment_list.dart index 1424639..af047ab 100644 --- a/lib/pages/shipment/shipment_list.dart +++ b/lib/pages/shipment/shipment_list.dart @@ -17,7 +17,7 @@ import 'shipment_list_row.dart'; class ShipmentList extends StatefulWidget { final bool forCustomer; - const ShipmentList({Key key, this.forCustomer = true}) : super(key: key); + const ShipmentList({Key? key, this.forCustomer = true}) : super(key: key); @override _ShipmentListState createState() => _ShipmentListState(); } diff --git a/lib/pages/shipment/shipment_list_row.dart b/lib/pages/shipment/shipment_list_row.dart index d09d086..329e29b 100644 --- a/lib/pages/shipment/shipment_list_row.dart +++ b/lib/pages/shipment/shipment_list_row.dart @@ -2,15 +2,15 @@ import 'package:fcs/domain/entities/shipment.dart'; import 'package:fcs/helpers/theme.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 '../main/util.dart'; import 'shipment_info.dart'; class ShipmentListRow extends StatelessWidget { - final Shipment shipment; - final bool isCustomer; - const ShipmentListRow({Key key, this.shipment, this.isCustomer}) + final Shipment? shipment; + final bool? isCustomer; + const ShipmentListRow({Key? key, this.shipment, this.isCustomer}) : super(key: key); @override @@ -45,7 +45,7 @@ class ShipmentListRow extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 8.0), child: new Text( - shipment.shipmentNumber ?? "", + shipment!.shipmentNumber ?? "", style: new TextStyle( fontSize: 15.0, color: Colors.black), ), @@ -69,7 +69,7 @@ class ShipmentListRow extends StatelessWidget { children: [ Padding( padding: const EdgeInsets.all(0), - child: getStatus(shipment.status ?? ""), + child: getStatus(shipment!.status ?? ""), ), // Padding( // padding: const EdgeInsets.only(left: 8.0, top: 5, bottom: 5), diff --git a/lib/pages/shipment/shipment_pack.dart b/lib/pages/shipment/shipment_pack.dart index 245c1ff..affdfad 100644 --- a/lib/pages/shipment/shipment_pack.dart +++ b/lib/pages/shipment/shipment_pack.dart @@ -11,14 +11,14 @@ import 'package:fcs/pages/widgets/local_title.dart'; import 'package:fcs/pages/widgets/progress.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:intl/intl.dart'; import 'package:provider/provider.dart'; import 'widgets.dart'; class ShipmentPack extends StatefulWidget { - final Shipment shipment; + final Shipment? shipment; ShipmentPack({this.shipment}); @override @@ -29,12 +29,12 @@ class _ShipmentPackState extends State { var dateFormatter = new DateFormat('dd MMM yyyy'); var timeFormatter = new DateFormat('jm'); - Shipment _shipment; + Shipment? _shipment; bool _isLoading = false; var now = new DateTime.now(); - FcsShipment _fcsShipment; - List _fcsShipments; + FcsShipment? _fcsShipment; + List? _fcsShipments; @override void initState() { @@ -48,8 +48,8 @@ class _ShipmentPackState extends State { FcsShipmentModel fcsShipmentModel = Provider.of(context, listen: false); var fcsShipments = await fcsShipmentModel.getActiveFcsShipments(); - var fcsShipment = fcsShipments - .firstWhere((e) => e.id == _shipment.fcsShipmentID, orElse: () => null); + var fcsShipment = + fcsShipments.firstWhere((e) => e.id == _shipment?.fcsShipmentID); setState(() { _fcsShipments = fcsShipments; _fcsShipment = fcsShipment; @@ -58,7 +58,7 @@ class _ShipmentPackState extends State { @override Widget build(BuildContext context) { - final shipmentNumberBox = getShipmentNumberStatus(context, _shipment); + final shipmentNumberBox = getShipmentNumberStatus(context, _shipment!); var fcsShipmentsBox = LocalDropdown( callback: (v) { @@ -120,14 +120,14 @@ class _ShipmentPackState extends State { } _save() async { - _shipment.fcsShipmentID = this._fcsShipment.id; + _shipment!.fcsShipmentID = this._fcsShipment!.id; setState(() { _isLoading = true; }); try { ShipmentModel shipmentModel = Provider.of(context, listen: false); - await shipmentModel.packShipment(_shipment); + await shipmentModel.packShipment(_shipment!); Navigator.pop(context, true); } catch (e) { showMsgDialog(context, "Error", e.toString()); diff --git a/lib/pages/widgets/multi_img_controller.dart b/lib/pages/widgets/multi_img_controller.dart index 794796a..273055d 100644 --- a/lib/pages/widgets/multi_img_controller.dart +++ b/lib/pages/widgets/multi_img_controller.dart @@ -78,9 +78,9 @@ class MultiImgController { } } - List get getUpdatedFile { + List get getUpdatedFile { List _addfiles = getAddedFile; - this.imageFiles.addAll(_addfiles); + this.imageFiles!.addAll(_addfiles); return this.imageFiles; }