phase3: WEB BUILD SUCCEEDS. cross_file override (0.3.4+2, Dart3-safe), parabolic/popup _margin EdgeInsets, remaining nullable fixes. lib 12->6(util_io deferred), web build OK with --no-tree-shake-icons

This commit is contained in:
2026-08-01 01:27:51 +08:00
parent 7c69197396
commit 5ccc06b0f7
8 changed files with 23 additions and 19 deletions

View File

@@ -406,7 +406,7 @@ class DesktopViewTicketState extends State<DesktopViewTicket> {
width: mainSpace / 2, width: mainSpace / 2,
margin: EdgeInsets.only(top: 16.0, bottom: 16.0), margin: EdgeInsets.only(top: 16.0, bottom: 16.0),
padding: EdgeInsets.all(10.0), padding: EdgeInsets.all(10.0),
child: (ticket.isClosed) ? child: (ticket.isClosed == true) ?
Column( Column(
children: [ children: [
Container( Container(

View File

@@ -320,7 +320,7 @@ class AddRemoveButtonState extends State<AddRemoveButton> {
textColor: Colors.white textColor: Colors.white
); );
} else { } else {
cartInfo.productList![widget.cartLineItemIndex].quantity += 1.0; cartInfo.productList![widget.cartLineItemIndex].quantity = (cartInfo.productList![widget.cartLineItemIndex].quantity ?? 0) + 1.0;
Utils.addSubproductQty(cartInfo, cartInfo.productList![widget.cartLineItemIndex]); Utils.addSubproductQty(cartInfo, cartInfo.productList![widget.cartLineItemIndex]);
store.dispatch(UpdateCartInfo( store.dispatch(UpdateCartInfo(
Utils.addCartInfoToCartInfoList(store.state.cartInfos, cartInfo))); Utils.addCartInfoToCartInfoList(store.state.cartInfos, cartInfo)));
@@ -384,7 +384,7 @@ class AddRemoveButtonState extends State<AddRemoveButton> {
cartInfo.productList!.removeAt(widget.cartLineItemIndex); cartInfo.productList!.removeAt(widget.cartLineItemIndex);
Utils.removeSubproduct(cartInfo, uuid); Utils.removeSubproduct(cartInfo, uuid);
} else { } else {
cartInfo.productList![widget.cartLineItemIndex].quantity -= 1; cartInfo.productList![widget.cartLineItemIndex].quantity = (cartInfo.productList![widget.cartLineItemIndex].quantity ?? 0) - 1;
Utils.addSubproductQty(cartInfo, cartInfo.productList![widget.cartLineItemIndex], remove: true); Utils.addSubproductQty(cartInfo, cartInfo.productList![widget.cartLineItemIndex], remove: true);
} }
if (cartInfo.productList!.length <= 0) { if (cartInfo.productList!.length <= 0) {

View File

@@ -69,13 +69,13 @@ class ParabolicAnimationWidget extends AnimatedWidget {
RenderBox stackBox = stackKey.currentContext!.findRenderObject()! as RenderBox; RenderBox stackBox = stackKey.currentContext!.findRenderObject()! as RenderBox;
Offset stackBoxOffset = stackBox.globalToLocal(Offset.zero); Offset stackBoxOffset = stackBox.globalToLocal(Offset.zero);
EdgeInsets startMargin = _margin(startKey)!; EdgeInsets startMargin = _margin(startKey);
RenderBox startBox = startKey.currentContext!.findRenderObject()! as RenderBox; RenderBox startBox = startKey.currentContext!.findRenderObject()! as RenderBox;
_startOffset = startBox.localToGlobal(Offset( _startOffset = startBox.localToGlobal(Offset(
startMargin.left + startAdjustOffset.dx, startMargin.left + startAdjustOffset.dx,
stackBoxOffset.dy + startMargin.top + startAdjustOffset.dy)); stackBoxOffset.dy + startMargin.top + startAdjustOffset.dy));
EdgeInsets endMargin = _margin(endKey)!; EdgeInsets endMargin = _margin(endKey);
RenderBox endBox = endKey.currentContext!.findRenderObject()! as RenderBox; RenderBox endBox = endKey.currentContext!.findRenderObject()! as RenderBox;
_endOffset = endBox.localToGlobal(Offset( _endOffset = endBox.localToGlobal(Offset(
endMargin.left + endAdjustOffset.dx, endMargin.left + endAdjustOffset.dx,
@@ -83,9 +83,9 @@ class ParabolicAnimationWidget extends AnimatedWidget {
} }
} }
EdgeInsetsGeometry _margin(GlobalKey key) { EdgeInsets _margin(GlobalKey key) {
final Widget widget = key.currentContext!.widget; final Widget widget = key.currentContext!.widget;
EdgeInsetsGeometry margin = (widget is Container) ? (widget.margin ?? EdgeInsets.zero) : EdgeInsets.zero; final mg = (widget is Container) ? widget.margin : null;
return margin ?? EdgeInsets.zero; return mg is EdgeInsets ? mg : EdgeInsets.zero;
} }
} }

View File

@@ -52,7 +52,7 @@ class PopupAnimationWidget extends AnimatedWidget {
final RenderBox stackBox = stackKey.currentContext!.findRenderObject()! as RenderBox; final RenderBox stackBox = stackKey.currentContext!.findRenderObject()! as RenderBox;
final Offset stackBoxOffset = stackBox.globalToLocal(Offset.zero); final Offset stackBoxOffset = stackBox.globalToLocal(Offset.zero);
final EdgeInsets startMargin = _margin(startKey)!; final EdgeInsets startMargin = _margin(startKey);
final RenderBox startBox = startKey.currentContext!.findRenderObject()! as RenderBox; final RenderBox startBox = startKey.currentContext!.findRenderObject()! as RenderBox;
_startOffset = startBox.localToGlobal(Offset( _startOffset = startBox.localToGlobal(Offset(
@@ -61,10 +61,9 @@ class PopupAnimationWidget extends AnimatedWidget {
} }
} }
EdgeInsetsGeometry _margin(GlobalKey key) { EdgeInsets _margin(GlobalKey key) {
final Widget widget = key.currentContext!.widget; final Widget widget = key.currentContext!.widget;
final EdgeInsetsGeometry margin = final mg = (widget is Container) ? widget.margin : null;
(widget is Container) ? widget.margin : EdgeInsets.zero; return mg is EdgeInsets ? mg : EdgeInsets.zero;
return margin ?? EdgeInsets.zero;
} }
} }

View File

@@ -72,7 +72,7 @@ class ReadMoreTextState extends State<ReadMoreText> {
widget.locale ?? Localizations.localeOf(context); widget.locale ?? Localizations.localeOf(context);
final colorClickableText = final colorClickableText =
widget.colorClickableText ?? Theme.of(context).accentColor; widget.colorClickableText ?? Theme.of(context).colorScheme.secondary;
TextSpan link = TextSpan( TextSpan link = TextSpan(
text: _readMore ? widget.trimCollapsedText : widget.trimExpandedText, text: _readMore ? widget.trimCollapsedText : widget.trimExpandedText,

View File

@@ -114,7 +114,7 @@ class MobileCouponsState extends State<MobileCoupons> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Text( Text(
coupon.store != null ? coupon.store!.name : S.of(context).general_coupon, coupon.store != null ? coupon.store!.name! : S.of(context).general_coupon,
style: TextStyle( style: TextStyle(
fontSize: 20.0, fontSize: 20.0,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@@ -146,7 +146,7 @@ class MobileCouponsState extends State<MobileCoupons> {
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[ children: <Widget>[
Container( Container(
child: !coupon.isPercentage ? child: coupon.isPercentage != true ?
Row( Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,

View File

@@ -130,13 +130,13 @@ packages:
source: hosted source: hosted
version: "1.19.1" version: "1.19.1"
cross_file: cross_file:
dependency: transitive dependency: "direct overridden"
description: description:
name: cross_file name: cross_file
sha256: "437b2b8da454fe1e01131f4410274fd607347325e9330f0b469ed5a204991068" sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.3.1+4" version: "0.3.4+2"
crypto: crypto:
dependency: transitive dependency: transitive
description: description:

View File

@@ -73,6 +73,11 @@ dependencies:
hive_flutter: ^1.1.0 hive_flutter: ^1.1.0
catcher: ^0.8.0 catcher: ^0.8.0
# cross_file 0.3.1+4 (transitive via image_picker) references UnmodifiableUint8ListView,
# which was removed in Dart 3 — override to a Dart 3-safe release for the web build.
dependency_overrides:
cross_file: 0.3.4+2 # pinned: 0.3.5+ needs Dart 3.10; 0.3.1+4 uses removed UnmodifiableUint8ListView
# Removed in Phase 2 (no null-safe release and/or zero references): # Removed in Phase 2 (no null-safe release and/or zero references):
# splashscreen, flappy_search_bar, searchable_dropdown, share, platform_detect, # splashscreen, flappy_search_bar, searchable_dropdown, share, platform_detect,
# flutter_inappwebview, countdown, gender_selection, flutter_dash, # flutter_inappwebview, countdown, gender_selection, flutter_dash,