phase3: nullfix.py batch script — bang/late/param-nullable

Automated null-safety fixes driven by dart analyze (no corruption):
- unchecked_use_of_nullable_value: insert '!' on receiver (property/method/[]/op)
- not_initialized field/var: mark 'late'
- missing_default_value_for_parameter: nullable param
Errors: 2374(peak) -> 907
This commit is contained in:
2026-07-25 18:13:01 +08:00
parent 8f3d3509ea
commit fce670664b
99 changed files with 1013 additions and 838 deletions

View File

@@ -37,18 +37,18 @@ class MobileOrderDetail extends StatefulWidget {
}
class MobileOrderDetailState extends State<MobileOrderDetail> {
Order order;
late Order order;
LatLng _lastMapPosition;
LatLng customerLatLng;
LatLng deliveryLatLng;
LatLng storeLatLng;
late LatLng _lastMapPosition;
late LatLng customerLatLng;
late LatLng deliveryLatLng;
late LatLng storeLatLng;
final Set<Marker> _markers = {};
final Set<Polyline> _polyLine = {};
BitmapDescriptor homeIcon;
BitmapDescriptor deliveryIcon;
BitmapDescriptor shopIcon;
late BitmapDescriptor homeIcon;
late BitmapDescriptor deliveryIcon;
late BitmapDescriptor shopIcon;
Completer<GoogleMapController> _controller = Completer();
@@ -123,7 +123,7 @@ class MobileOrderDetailState extends State<MobileOrderDetail> {
width: double.infinity,
padding: EdgeInsets.only(top: 0.0, bottom: 16.0),
child: Text(
order.cartInfo.businessInfo.name,
order.cartInfo!.businessInfo!.name,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
@@ -154,7 +154,7 @@ class MobileOrderDetailState extends State<MobileOrderDetail> {
Icons.phone,
),
onTap: () {
Utils.launchURL('tel:${order.businessInfo.phone}');
Utils.launchURL('tel:${order.businessInfo!.phone}');
},
),
),
@@ -170,8 +170,8 @@ class MobileOrderDetailState extends State<MobileOrderDetail> {
onMapCreated: _onMapCreated,
initialCameraPosition: CameraPosition(
target: LatLng(
double.parse(order.shippingAddress.lat),
double.parse(order.shippingAddress.lng)),
double.parse(order.shippingAddress!.lat),
double.parse(order.shippingAddress!.lng)),
zoom: 11.0,
),
onCameraMove: _onCameraMove,
@@ -182,14 +182,14 @@ class MobileOrderDetailState extends State<MobileOrderDetail> {
].toSet(),
),
));
if (order.deliveryDistance != null && order.deliveryDistance.distance != null) {
if (order.deliveryDistance != null && order.deliveryDistance!.distance != null) {
col.children.add(Container(
padding: EdgeInsets.only(top: 6.0, bottom: 6.0),
margin: EdgeInsets.only(bottom: 6.0),
child: Text(
S.of(context).delivery_distance_token(
order.deliveryDistance.distance.text,
order.deliveryDistance.duration.text
order.deliveryDistance!.distance!.text,
order.deliveryDistance!.duration!.text
),
),
decoration: BoxDecoration(
@@ -205,7 +205,7 @@ class MobileOrderDetailState extends State<MobileOrderDetail> {
}
}
for (CartLineItem lineItem in order.cartInfo.productList) {
for (CartLineItem lineItem in order.cartInfo!.productList) {
col.children.add(Container(
padding: EdgeInsets.only(top: 16.0, bottom: 0.0),
@@ -213,7 +213,7 @@ class MobileOrderDetailState extends State<MobileOrderDetail> {
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Util.showImage('${lineItem.product.imagePath}',
Util.showImage('${lineItem.product!.imagePath}',
width: 40.0,
height: 40.0,
fit: BoxFit.fill,
@@ -251,7 +251,7 @@ class MobileOrderDetailState extends State<MobileOrderDetail> {
width: 30.0,
alignment: Alignment.centerRight,
child: Text(
'x${lineItem.quantity.round()}',
'x${lineItem.quantity!.round()}',
style: TextStyle(
fontSize: 14.0,
),
@@ -313,8 +313,8 @@ class MobileOrderDetailState extends State<MobileOrderDetail> {
],
),
);
for (var i = 0; i < order.cartInfo.extraFeeList.length; i++) {
ExtraFee extraFee = order.cartInfo.extraFeeList[i];
for (var i = 0; i < order.cartInfo!.extraFeeList!.length; i++) {
ExtraFee extraFee = order.cartInfo!.extraFeeList![i];
col.children.add(
Row(
mainAxisAlignment: MainAxisAlignment.start,
@@ -338,7 +338,7 @@ class MobileOrderDetailState extends State<MobileOrderDetail> {
width: 100.0,
alignment: Alignment.centerRight,
child: Text(
'${extraFee.price.toStringAsFixed(2)}',
'${extraFee.price!.toStringAsFixed(2)}',
style: TextStyle(
fontSize: 15.0,
),
@@ -371,7 +371,7 @@ class MobileOrderDetailState extends State<MobileOrderDetail> {
width: 100.0,
alignment: Alignment.centerRight,
child: Text(
'${order.totalPrice.toStringAsFixed(2)}',
'${order.totalPrice!.toStringAsFixed(2)}',
style: TextStyle(
fontSize: 18.0,
fontWeight: FontWeight.bold,
@@ -481,7 +481,7 @@ class MobileOrderDetailState extends State<MobileOrderDetail> {
margin: EdgeInsets.only(top: 10.0, bottom: 10.0),
alignment: Alignment.centerRight,
child: Text(
'${order.cartInfo.businessInfo.fullAddress}',
'${order.cartInfo!.businessInfo!.fullAddress}',
style: TextStyle(
color: Colors.black38,
),
@@ -908,19 +908,19 @@ class MobileOrderDetailState extends State<MobileOrderDetail> {
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
child: fulfillment.shippingMethod.isNotEmpty && fulfillment.trackingNumber != null && fulfillment.trackingNumber.isNotEmpty ?
child: fulfillment.shippingMethod!.isNotEmpty && fulfillment.trackingNumber != null && fulfillment.trackingNumber!.isNotEmpty ?
Text(
'${fulfillment.shippingMethod} ${fulfillment.trackingNumber}',
overflow: TextOverflow.ellipsis,
maxLines: 1,
) : (fulfillment.shippingMethod.isNotEmpty ? Text(
) : (fulfillment.shippingMethod!.isNotEmpty ? Text(
'${fulfillment.shippingMethod}',
overflow: TextOverflow.ellipsis,
maxLines: 1,
) : SizedBox.shrink()),
),
Container(
child: fulfillment.note != null && fulfillment.note.isNotEmpty ?
child: fulfillment.note != null && fulfillment.note!.isNotEmpty ?
Text(
'${fulfillment.note}',
style: TextStyle(
@@ -1060,12 +1060,12 @@ class MobileOrderDetailState extends State<MobileOrderDetail> {
if (!kIsWeb) {
if (order.shippingMethod == 'store-delivery' && order.status != Constants.STATUS_COMPLETE && order.status != Constants.STATUS_CANCELLED) {
storeLatLng = LatLng(double.parse(order.businessInfo.address.lat),
double.parse(order.businessInfo.address.lng));
customerLatLng = LatLng(double.parse(order.shippingAddress.lat),
double.parse(order.shippingAddress.lng));
storeLatLng = LatLng(double.parse(order.businessInfo!.address!.lat),
double.parse(order.businessInfo!.address!.lng));
customerLatLng = LatLng(double.parse(order.shippingAddress!.lat),
double.parse(order.shippingAddress!.lng));
deliveryLatLng =
LatLng(order.shipperPosition.lat, order.shipperPosition.lng);
LatLng(order.shipperPosition!.lat, order.shipperPosition!.lng);
_polyLine.clear();
_polyLine.add(
@@ -1078,7 +1078,7 @@ class MobileOrderDetailState extends State<MobileOrderDetail> {
],
width: 3,
points: [
order.shipperPosition.lat != 0.0 ? deliveryLatLng : storeLatLng,
order.shipperPosition!.lat != 0.0 ? deliveryLatLng : storeLatLng,
customerLatLng,
]
)
@@ -1103,12 +1103,12 @@ class MobileOrderDetailState extends State<MobileOrderDetail> {
title: S
.of(context)
.customer,
snippet: order.shippingAddress.addressLine1,
snippet: order.shippingAddress!.addressLine1,
),
icon: homeIcon,
));
if (order.shipperPosition.lat != 0.0 &&
order.shipperPosition.lng != 0.0) {
if (order.shipperPosition!.lat != 0.0 &&
order.shipperPosition!.lng != 0.0) {
_markers.add(Marker(
markerId: MarkerId('shipper_position'),
position: deliveryLatLng,