# flutter_wisetronic 升级日志

## 目标
- 升级到 Dart 3 强制空安全（目标 SDK：本机 Flutter 3.29.3 / Dart 3.7.2，不升级全局）
- 移除 Stripe 收款，改为页面展示 e-transfer email 让客户自行 e-transfer 付款
- 第一阶段：能编译、Web 能跑起来（暂不美化）

## 关键决策
- 目标版本：Flutter 3.29.3 / Dart 3.7.2（钉定本机，不动全局）
- e-transfer 邮箱：`payment@wisetronic.com`
- 提醒客户在 e-transfer remark 里写 `R#<receipt.id>` 以便自动化处理订单
- 搜索框：自写轻量 Web 搜索组件替换 flappy_search_bar
- Dart 3 已移除 `dart migrate`，空安全迁移用手工 + IDE 修复

## 阶段
- [x] 阶段 0：基线 & 锁版本
- [x] 阶段 1：去掉 Stripe
- [x] 阶段 2：依赖替换与升级
- [ ] 阶段 3：空安全迁移
- [ ] 阶段 4：Web 跑起来

---

## 改动记录

### 阶段 0
- 创建 UPGRADE_NOTES.md
- pubspec.yaml: environment sdk `>=2.7.0 <3.0.0` → `>=3.0.0 <4.0.0`，flutter `>=3.29.0`

### 阶段 1 — 去掉 Stripe（已完成）
- 删除: stripe_pay_web.dart, stripe_pay.dart, desktop/mobile_stripe_pay_web.dart, stripe_payment_method.dart
- pubspec: 移除 stripe_payment + stripe_sdk(git)
- user.dart: 移除 stripePaymentMethods 字段与解析
- utils.dart: 移除 createOrUpdateStripePaymentMethod / stripePaymentIntent / stripeChargedSuccess
- util_web.dart / util_io.dart: goPayment 的 stripe/native 分支 → 跳转 ETransferPay
- desktop/mobile_pay_now.dart: 移除“已有卡片”区块与 nativePay 死逻辑，简化列表索引
- desktop/mobile_my_cards.dart: 重写为 e-Transfer 说明页（保留路由入口）
- constants.dart: 新增 ETRANSFER_EMAIL(payment@wisetronic.com) 与 REMARK_PREFIX(R#)
- 新增 lib/widgets/general/e_transfer_pay.dart: 展示邮箱 + 提醒备注写 R#<orderId>
- 保留: PAYMENT_METHOD_CODE_STRIPE='stripe'(API 仍返回该 code，路由到 e-Transfer)；payment_platform.dart 的 'stripe' 显示名(后续美化时调整)

### 阶段 2 — 依赖替换与升级（已完成）
**flutter pub get 成功解析 178 个依赖。**
- 升级到 null-safe 最新版：dio ^5.7、cached_network_image ^3.4、url_launcher ^6.3、path_provider ^2.1、image_picker ^1.1、google_maps_flutter ^2.9、geolocator ^12、youtube_player_iframe ^5.2、flutter_local_notifications ^17、uuid ^4、fluttertoast ^8.2、badges ^3、carousel_slider ^5、percent_indicator ^4.2.3、photo_view ^0.15、toggle_switch ^2.3、pinput ^5、email_validator ^3、responsive_builder ^0.7、flutter_redux ^0.10、fluro ^2.0.5、font_awesome_flutter ^10、flutter_spinkit ^5.2、flutter_markdown ^0.7、url_strategy ^0.3、universal_io/html
- 删除(0引用或无 null-safe 版)：splashscreen(死代码)、flappy_search_bar、searchable_dropdown、share、platform_detect、flutter_inappwebview、countdown、gender_selection、flutter_dash(死 import)、smooth_star_rating、hovering、ffi
- 新增：flutter_rating_bar ^4.0
- 停维但有 null-safe 版→暂留(Phase 5 再换)：pull_to_refresh(→smart_refresher)、hive/hive_flutter(→hive_ce)、catcher ^0.8(→catcher2)
- 新建 null-safe 自定义组件替代废弃包(API 兼容, 调用方仅改 import)：
  - lib/utils/countdown.dart (CountDown.stream)
  - lib/widgets/general/hover_widget.dart (HoverWidget)
  - lib/widgets/general/gender_selection.dart (Gender 枚举 + GenderSelection)
  - lib/widgets/general/smooth_star_rating.dart (SmoothStarRating)
  - lib/widgets/general/search_bar.dart (轻量 Web 搜索 SearchBar + SearchBarController, 含 replayLastSearch 分页)
- main.dart：删除未使用的 _buildBody(SplashScreen) 与 _to 字段
- ⚠️ 待 Phase 3：API 升级破坏性变更(dio5/badges3/toggle_switch2/pinput5/geolocator12 等用法适配) + 整库空安全迁移，按 dart analyze 驱动修复
