From 0fabb5b1dee3b4c8e3da3b70d42afd353dc95fca Mon Sep 17 00:00:00 2001 From: tzw Date: Fri, 10 Sep 2021 17:01:24 +0630 Subject: [PATCH 1/5] check null safety for my data table --- lib/pages/widgets/my_data_table.dart | 51 ++++++++++++++-------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/lib/pages/widgets/my_data_table.dart b/lib/pages/widgets/my_data_table.dart index 3015c50..8e66eef 100644 --- a/lib/pages/widgets/my_data_table.dart +++ b/lib/pages/widgets/my_data_table.dart @@ -75,7 +75,7 @@ class MyDataRow { this.key, this.selected = false, this.onSelectChanged, - @required this.cells, + required this.cells, }) : assert(cells != null); /// Creates the configuration for a row of a [MyDataTable], deriving @@ -83,10 +83,10 @@ class MyDataRow { /// /// The [cells] argument must not be null. MyDataRow.byIndex({ - int index, + int index = 0, this.selected = false, this.onSelectChanged, - @required this.cells, + required this.cells, }) : assert(cells != null), key = ValueKey(index); @@ -96,7 +96,7 @@ class MyDataRow { /// remain on the right row visually. /// /// If the table never changes once created, no key is necessary. - final LocalKey key; + final LocalKey? key; /// Called when the user selects or unselects a selectable row. /// @@ -111,7 +111,7 @@ class MyDataRow { /// A row whose [onSelectChanged] callback is null is ignored for /// the purposes of determining the state of the "all" checkbox, /// and its checkbox is disabled. - final ValueChanged onSelectChanged; + final ValueChanged? onSelectChanged; /// Whether the row is selected. /// @@ -193,7 +193,7 @@ class MyDataCell { /// If non-null, tapping the cell will call this callback. If /// null, tapping the cell will attempt to select the row (if /// [MyDataRow.onSelectChanged] is provided). - final VoidCallback onTap; + final VoidCallback? onTap; bool get _debugInteractive => onTap != null; } @@ -309,8 +309,8 @@ class MyDataTable extends StatelessWidget { /// the sort order is ascending, this should be true (the default), /// otherwise it should be false. MyDataTable({ - Key key, - @required this.columns, + Key? key, + required this.columns, this.sortColumnIndex, this.sortAscending = true, this.onSelectAll, @@ -339,8 +339,8 @@ class MyDataTable extends StatelessWidget { /// The configuration and labels for the columns in the table. final List columns; - final Decoration oddLine; - final Decoration evenLine; + final Decoration? oddLine; + final Decoration? evenLine; /// The current primary sort key's column. /// @@ -353,7 +353,7 @@ class MyDataTable extends StatelessWidget { /// /// When this is null, it implies that the table's sort order does /// not correspond to any of the columns. - final int sortColumnIndex; + final int? sortColumnIndex; /// Whether the column mentioned in [sortColumnIndex], if any, is sorted /// in ascending order. @@ -376,7 +376,7 @@ class MyDataTable extends StatelessWidget { /// To control whether a particular row is selectable or not, see /// [MyDataRow.onSelectChanged]. This callback is only relevant if any /// row is selectable. - final ValueSetter onSelectAll; + final ValueSetter? onSelectAll; /// The height of each row (excluding the row that contains column headings). /// @@ -413,11 +413,10 @@ class MyDataTable extends StatelessWidget { // non-numeric, if there is exactly one, otherwise null. final int _onlyTextColumn; static int _initOnlyTextColumn(List columns) { - int result; + int result = 0; for (int index = 0; index < columns.length; index += 1) { final MyDataColumn column = columns[index]; if (!column.numeric) { - if (result != null) return null; result = index; } } @@ -433,11 +432,11 @@ class MyDataTable extends StatelessWidget { void _handleSelectAll(bool checked) { if (onSelectAll != null) { - onSelectAll(checked); + onSelectAll!(checked); } else { for (MyDataRow row in rows) { if ((row.onSelectChanged != null) && (row.selected != checked)) - row.onSelectChanged(checked); + row.onSelectChanged!(checked); } } } @@ -613,8 +612,8 @@ class MyDataTable extends StatelessWidget { final bool showCheckboxColumn = false; final bool allChecked = false; - final List tableColumns = - List(columns.length + (showCheckboxColumn ? 1 : 0)); + final List tableColumns = (columns.length + + (showCheckboxColumn ? 1 : 0)) as List; final List tableRows = List.generate( rows.length + 1, // the +1 is for the header row (int index) { @@ -745,7 +744,7 @@ class MyDataTable extends StatelessWidget { class TableRowInkWell extends InkResponse { /// Creates an ink well for a table row. const TableRowInkWell({ - Key key, + Key? key, Widget child, GestureTapCallback onTap, GestureTapCallback onDoubleTap, @@ -799,7 +798,7 @@ class TableRowInkWell extends InkResponse { class _SortArrow extends StatefulWidget { const _SortArrow({ - Key key, + Key? key, this.visible, this.down, this.duration, @@ -816,14 +815,14 @@ class _SortArrow extends StatefulWidget { } class _SortArrowState extends State<_SortArrow> with TickerProviderStateMixin { - AnimationController _opacityController; - Animation _opacityAnimation; + late AnimationController _opacityController; + late Animation _opacityAnimation; - AnimationController _orientationController; - Animation _orientationAnimation; + late AnimationController _orientationController; + late Animation _orientationAnimation; double _orientationOffset = 0.0; - bool _down; + late bool _down; static final Animatable _turnTween = Tween(begin: 0.0, end: math.pi) @@ -869,7 +868,7 @@ class _SortArrowState extends State<_SortArrow> with TickerProviderStateMixin { void didUpdateWidget(_SortArrow oldWidget) { super.didUpdateWidget(oldWidget); bool skipArrow = false; - final bool newDown = widget.down ?? _down; + final bool newDown = widget.down; if (oldWidget.visible != widget.visible) { if (widget.visible && (_opacityController.status == AnimationStatus.dismissed)) { From 7cb692c07e824b63c7e35be3e32a5661411a8e09 Mon Sep 17 00:00:00 2001 From: tzw Date: Fri, 10 Sep 2021 17:02:08 +0630 Subject: [PATCH 2/5] merge --- pubspec.lock | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/pubspec.lock b/pubspec.lock index a551a79..3c0f7ab 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -280,7 +280,7 @@ packages: name: firebase_core url: "https://pub.dartlang.org" source: hosted - version: "1.5.0" + version: "1.6.0" firebase_core_platform_interface: dependency: transitive description: @@ -349,6 +349,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.5.1" + flutter_icons_null_safety: + dependency: "direct main" + description: + name: flutter_icons_null_safety + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + flutter_local_notifications: + dependency: "direct main" + description: + name: flutter_local_notifications + url: "https://pub.dartlang.org" + source: hosted + version: "8.2.0" + flutter_local_notifications_platform_interface: + dependency: transitive + description: + name: flutter_local_notifications_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "4.0.1" flutter_localizations: dependency: "direct main" description: flutter @@ -373,6 +394,13 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_vector_icons: + dependency: "direct main" + description: + name: flutter_vector_icons + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" flutter_web_plugins: dependency: transitive description: flutter @@ -866,6 +894,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.0.5" + timezone: + dependency: transitive + description: + name: timezone + url: "https://pub.dartlang.org" + source: hosted + version: "0.8.0" typed_data: dependency: transitive description: From 29c35d64542de3ce587de675a5aca6ecd9a3bf35 Mon Sep 17 00:00:00 2001 From: tzw Date: Fri, 10 Sep 2021 17:15:23 +0630 Subject: [PATCH 3/5] check null safety --- lib/pages/chat/message_detail.dart | 4 ++-- lib/pages/main/home_page.dart | 2 +- lib/pages/widgets/multi_img_controller.dart | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/pages/chat/message_detail.dart b/lib/pages/chat/message_detail.dart index d1b7144..74d352d 100644 --- a/lib/pages/chat/message_detail.dart +++ b/lib/pages/chat/message_detail.dart @@ -180,7 +180,7 @@ class MessageDetail extends StatelessWidget { message.messageID != "") { PackageModel packageModel = Provider.of(context, listen: false); - Package p = await packageModel.getPackage(message.messageID!); + Package? p = await packageModel.getPackage(message.messageID!); if (p == null) return; Navigator.push(context, CupertinoPageRoute(builder: (context) => PackageInfo(package: p))); @@ -206,7 +206,7 @@ class MessageDetail extends StatelessWidget { message.messageID != "") { ShipmentModel shipmentModel = Provider.of(context, listen: false); - Shipment s = await shipmentModel.getShipment(message.messageID!); + Shipment? s = await shipmentModel.getShipment(message.messageID!); if (s == null) return; await Navigator.push( context, diff --git a/lib/pages/main/home_page.dart b/lib/pages/main/home_page.dart index 1f81ac0..1e1b88d 100644 --- a/lib/pages/main/home_page.dart +++ b/lib/pages/main/home_page.dart @@ -533,7 +533,7 @@ class _HomePageState extends State { String term = _searchCtl.text; if (term == null || term.trim() == "") return; var packageModel = Provider.of(context, listen: false); - Package package = await packageModel.lookupPackage(term); + Package? package = await packageModel.lookupPackage(term); if (package == null) { showMsgDialog(context, "Not found", "Tracking ID - '$term' not found!"); return; diff --git a/lib/pages/widgets/multi_img_controller.dart b/lib/pages/widgets/multi_img_controller.dart index 26191ed..ad0be39 100644 --- a/lib/pages/widgets/multi_img_controller.dart +++ b/lib/pages/widgets/multi_img_controller.dart @@ -80,7 +80,7 @@ class MultiImgController { List get getUpdatedFile { List _addfiles = getAddedFile; - this.imageFiles!.addAll(_addfiles); + this.imageFiles.addAll(_addfiles); return this.imageFiles; } From 5712e20f19d79608bb10f513d7f9c3403bc29e7f Mon Sep 17 00:00:00 2001 From: tzw Date: Sat, 11 Sep 2021 11:30:44 +0630 Subject: [PATCH 4/5] merge --- lib/pages/widgets/my_data_table.dart | 31 ---------------------------- 1 file changed, 31 deletions(-) diff --git a/lib/pages/widgets/my_data_table.dart b/lib/pages/widgets/my_data_table.dart index cb67101..f198e21 100644 --- a/lib/pages/widgets/my_data_table.dart +++ b/lib/pages/widgets/my_data_table.dart @@ -83,11 +83,7 @@ class MyDataRow { /// /// The [cells] argument must not be null. MyDataRow.byIndex({ -<<<<<<< HEAD - int index = 0, -======= int? index, ->>>>>>> upstream/master this.selected = false, this.onSelectChanged, required this.cells, @@ -626,10 +622,6 @@ class MyDataTable extends StatelessWidget { final List tableColumns = (columns.length + (showCheckboxColumn ? 1 : 0)) as List; -<<<<<<< HEAD -======= - ->>>>>>> upstream/master final List tableRows = List.generate( rows.length + 1, // the +1 is for the header row (int index) { @@ -761,19 +753,11 @@ class TableRowInkWell extends InkResponse { /// Creates an ink well for a table row. const TableRowInkWell({ Key? key, -<<<<<<< HEAD - Widget child, - GestureTapCallback onTap, - GestureTapCallback onDoubleTap, - GestureLongPressCallback onLongPress, - ValueChanged onHighlightChanged, -======= Widget? child, GestureTapCallback? onTap, GestureTapCallback? onDoubleTap, GestureLongPressCallback? onLongPress, ValueChanged? onHighlightChanged, ->>>>>>> upstream/master }) : super( key: key, child: child, @@ -839,16 +823,6 @@ class _SortArrow extends StatefulWidget { } class _SortArrowState extends State<_SortArrow> with TickerProviderStateMixin { -<<<<<<< HEAD - late AnimationController _opacityController; - late Animation _opacityAnimation; - - late AnimationController _orientationController; - late Animation _orientationAnimation; - double _orientationOffset = 0.0; - - late bool _down; -======= AnimationController? _opacityController; Animation? _opacityAnimation; @@ -857,7 +831,6 @@ class _SortArrowState extends State<_SortArrow> with TickerProviderStateMixin { double _orientationOffset = 0.0; bool? _down; ->>>>>>> upstream/master static final Animatable _turnTween = Tween(begin: 0.0, end: math.pi) @@ -904,11 +877,7 @@ class _SortArrowState extends State<_SortArrow> with TickerProviderStateMixin { void didUpdateWidget(_SortArrow oldWidget) { super.didUpdateWidget(oldWidget); bool skipArrow = false; -<<<<<<< HEAD - final bool newDown = widget.down; -======= final bool newDown = widget.down ?? _down!; ->>>>>>> upstream/master if (oldWidget.visible != widget.visible) { if (widget.visible! && (_opacityController!.status == AnimationStatus.dismissed)) { From 086c09f52222210e1fc467aba7949c561f162e12 Mon Sep 17 00:00:00 2001 From: tzw Date: Mon, 13 Sep 2021 08:45:50 +0630 Subject: [PATCH 5/5] check null safety for delivery --- lib/domain/entities/carton.dart | 12 +++++----- lib/pages/delivery/model/delivery_model.dart | 23 ++++++++++--------- .../model/fcs_shipment_model.dart | 11 +++++---- lib/pages/package/package_info.dart | 2 +- 4 files changed, 25 insertions(+), 23 deletions(-) diff --git a/lib/domain/entities/carton.dart b/lib/domain/entities/carton.dart index 22254ac..a9a89b9 100644 --- a/lib/domain/entities/carton.dart +++ b/lib/domain/entities/carton.dart @@ -64,9 +64,8 @@ class Carton { // String get packageNumber => // shipmentNumber + "-" + receiverNumber + " #" + boxNumber; - double get actualWeight => cargoTypes == null - ? 0 - : cargoTypes.fold(0, (p, e) => e.weight + p); + double get actualWeight => + cargoTypes == null ? 0 : cargoTypes.fold(0, (p, e) => e.weight + p); int getShipmentWeight(double volumetricRatio) { if (length == null || @@ -115,8 +114,8 @@ class Carton { double total = 0; cargoTypes.forEach((e) { - double r = e.rate - - (discountByWeight != null ? (discountByWeight.discount) : 0); + double r = + e.rate - (discountByWeight != null ? (discountByWeight.discount) : 0); double amount = e.weight * r; total += amount; }); @@ -194,7 +193,8 @@ class Carton { } factory Carton.fromMap(Map map, String docID) { - var _arrivedDate = (map['arrived_date'] as Timestamp); + var _arrivedDate = + map['arrived_date'] == null ? null : (map['arrived_date'] as Timestamp); var da = map['delivery_address']; var _da = da != null ? DeliveryAddress.fromMap(da, da["id"]) : null; var cargoTypesMaps = diff --git a/lib/pages/delivery/model/delivery_model.dart b/lib/pages/delivery/model/delivery_model.dart index 235f820..97da1e9 100644 --- a/lib/pages/delivery/model/delivery_model.dart +++ b/lib/pages/delivery/model/delivery_model.dart @@ -4,17 +4,17 @@ import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:fcs/data/services/services.dart'; import 'package:fcs/domain/constants.dart'; import 'package:fcs/domain/entities/carton.dart'; -import 'package:fcs/domain/vo/message.dart'; import 'package:fcs/helpers/paginator.dart'; import 'package:fcs/pages/main/model/base_model.dart'; import 'package:logging/logging.dart'; class DeliveryModel extends BaseModel { final log = Logger('DeliveryModel'); - List get cartons => - _selectedIndex == 1 ? _cartons : List.from(_delivered.values); + List get cartons => _selectedIndex == 1 + ? _cartons + : List.from(_delivered?.values ?? []); - late Paginator _delivered; + Paginator? _delivered; int _selectedIndex = 1; bool isLoading = false; List _cartons = []; @@ -31,9 +31,9 @@ class DeliveryModel extends BaseModel { _selectedIndex = 1; _loadCartons(); - if (_delivered != null) _delivered.close(); + if (_delivered != null) _delivered!.close(); _delivered = _getDelivered(); - _delivered.load(); + _delivered!.load(); } Future _loadCartons() async { @@ -57,7 +57,8 @@ class DeliveryModel extends BaseModel { _cartons.clear(); _cartons = snapshot.docs.map((documentSnapshot) { var s = Carton.fromMap( - documentSnapshot.data as Map, documentSnapshot.id); + documentSnapshot.data as Map, + documentSnapshot.id); return s; }).toList(); notifyListeners(); @@ -82,10 +83,10 @@ class DeliveryModel extends BaseModel { } Future loadMore() async { - if (_delivered.ended || _selectedIndex == 1) return; + if (_delivered!.ended || _selectedIndex == 1) return; isLoading = true; notifyListeners(); - await _delivered.load(onFinished: () { + await _delivered!.load(onFinished: () { isLoading = false; notifyListeners(); }); @@ -94,7 +95,7 @@ class DeliveryModel extends BaseModel { Future refresh() async { if (_selectedIndex == 1) return; - await _delivered.refresh(onFinished: () { + await _delivered!.refresh(onFinished: () { notifyListeners(); }); } @@ -106,7 +107,7 @@ class DeliveryModel extends BaseModel { @override logout() async { if (listener != null) await listener!.cancel(); - if (_delivered != null) _delivered.close(); + if (_delivered != null) _delivered!.close(); _cartons = []; } diff --git a/lib/pages/fcs_shipment/model/fcs_shipment_model.dart b/lib/pages/fcs_shipment/model/fcs_shipment_model.dart index 6bb8a16..7ee76d8 100644 --- a/lib/pages/fcs_shipment/model/fcs_shipment_model.dart +++ b/lib/pages/fcs_shipment/model/fcs_shipment_model.dart @@ -25,7 +25,7 @@ class FcsShipmentModel extends BaseModel { notifyListeners(); } - int get selectedIndex => _selectedIndex; + int get selectedIndex => _selectedIndex; @override void privilegeChanged() { @@ -58,7 +58,8 @@ class FcsShipmentModel extends BaseModel { _fcsShipments.clear(); _fcsShipments = snapshot.docs.map((documentSnapshot) { var s = FcsShipment.fromMap( - documentSnapshot.data() as Map, documentSnapshot.id); + documentSnapshot.data() as Map, + documentSnapshot.id); return s; }).toList(); notifyListeners(); @@ -108,7 +109,7 @@ class FcsShipmentModel extends BaseModel { .get(const GetOptions(source: Source.server)); fcsShipments = snaps.docs.map((documentSnapshot) { var fcs = FcsShipment.fromMap( - documentSnapshot.data as Map, documentSnapshot.id); + documentSnapshot.data as Map, documentSnapshot.id); return fcs; }).toList(); } catch (e) { @@ -123,7 +124,7 @@ class FcsShipmentModel extends BaseModel { .collection("/$fcs_shipment_collection") .doc(id) .get(const GetOptions(source: Source.server)); - var fcs = FcsShipment.fromMap(snap.data as Map, snap.id); + var fcs = FcsShipment.fromMap(snap.data as Map, snap.id); return fcs; } catch (e) { @@ -141,7 +142,7 @@ class FcsShipmentModel extends BaseModel { .get(const GetOptions(source: Source.server)); fcsShipments = snaps.docs.map((documentSnapshot) { var fcs = FcsShipment.fromMap( - documentSnapshot.data as Map, documentSnapshot.id); + documentSnapshot.data as Map, documentSnapshot.id); return fcs; }).toList(); } catch (e) { diff --git a/lib/pages/package/package_info.dart b/lib/pages/package/package_info.dart index 519d42b..77b485b 100644 --- a/lib/pages/package/package_info.dart +++ b/lib/pages/package/package_info.dart @@ -56,7 +56,7 @@ class _PackageInfoState extends State { PackageModel packageModel = Provider.of(context, listen: false); Package? package = - await packageModel.getPackageByTrackingID(pkg!.trackingID!); + await packageModel.getPackageByTrackingID(pkg.trackingID!); setState(() { _package = package; multiImgController.setImageUrls = package!.photoUrls;