name: university_timetable
description: 轻屿课表应用 - 支持小米超级岛
publish_to: 'none'
version: 2.1.3-1+136
repository: https://github.com/Mutx163/mikcb
homepage: https://github.com/Mutx163/mikcb
issue_tracker: https://github.com/Mutx163/mikcb/issues
license: GPL-3.0-or-later

environment:
  sdk: ">=3.12.2 <4.0.0"
  flutter: ">=3.44.2"

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter
  provider: ^6.1.1
  shared_preferences: ^2.2.2
  intl: ^0.20.2
  uuid: ^4.6.0
  cupertino_icons: ^1.0.8
  file_picker: ^11.0.3
  http: ^1.2.2
  package_info_plus: ^9.0.1
  # 天气「使用当前位置」用。国行设备没装 Google Play Services 时,插件会自己
  # 回退到系统 LocationManager,所以无需 GMS、也不必设 forceLocationManager。
  # 反查地名不走这个包(它不提供),走 BigDataCloud,见 device_location_service.dart。
  #
  # 约束写 ^14.0.0 而不是 ^14.0.3:14.0.3 要求 geolocator_linux ^0.2.6,后者要求
  # package_info_plus ^10.0.0,而本项目锁在 ^9.0.1——升级 package_info_plus 会连带
  # 10.2.0 的 Android Gradle/Kotlin 构建改动,与本功能无关且我这边没法验证构建。
  # 写 ^14.0.0 让 pub 自己回退:实测解析到 geolocator 14.0.2 + geolocator_linux 0.2.4
  # (后者兼容 package_info_plus 9)。将来 package_info_plus 升上去后,这个约束会
  # 自动解析到更新的 geolocator,不必再改。
  geolocator: ^14.0.0
  share_plus: ^12.0.2
  crypto: ^3.0.6
  webdav_plus: ^1.2.2
  url_launcher: ^6.3.1
  path_provider: ^2.1.5
  open_filex: ^4.7.0
  flutter_markdown: ^0.7.7+1
  flutter_secure_storage: ^10.3.1
  webview_flutter: 4.14.1
  webview_flutter_android: 4.13.0
  azlistview: ^2.0.0
  animations: ^2.0.11
  table_parser: ^1.0.1
  qr: ^3.0.2
  qr_flutter: ^4.1.0
  fl_chart: ^1.2.0
  fast_gbk: ^1.0.0
  flutter_svg: ^2.3.0
  image: ^4.8.0
  # 2026-09-13:由 fork(1.0.11 / commit 241bbea)切到上游 pub.dev 版 1.2.0。
  # 依据:fork 的本地补丁已分别并入上游 1.1.0(系统字重与标题字重 API)与
  # 1.1.1(pubspec Git 依赖在中文 Windows 下的编码修复);1.2.0 的 HyperOS 4
  # 玻璃组件按上游 CHANGELOG 为「可选、与旧组件并存、不改动既有组件默认表现、
  # 原有界面样式零变化」,属纯新增,升级面安全。
  flutter_miuix: ^1.2.0
  flutter_blackbox: ^0.7.0
  fountain_codes: ^1.0.0
  mobile_scanner: ^7.4.0
  image_picker: ^1.2.3
  # 顶栏渐进模糊(Inspire Blur):自定义 GPU shader 的变量模糊,
  # 用于顶栏玻璃带「上浓下淡」的渐进过渡(见 lib/ui/hyperos/inspire/)。
  inspire_blur: ^0.4.1

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_lints: ^6.0.0
  fake_async: ^1.3.3

# 覆盖:指向 fork 上带注入点补丁的 flutter_miuix(glassy-surface 分支,基于上游 1.2.0)。
# 补丁都是「把面板材质 / 蒙层 / 让位手感让给调用方」的注入点:
#   · 弹层族(popup presenter / 列表弹层等)已有的 `surfaceBuilder`;
#   · 底部弹窗 `MiuixOverlayBottomSheet` / `MiuixWindowBottomSheet` 上的
#     `surfaceBuilder`(child 是真实面板内容)+ `scrimUnderlay`(覆盖层里、压暗蒙层
#     之前的前置层,覆盖层随之进 `BackdropGroup`)+ `dimColor`;
#   · 弹层让位缩放(`stacked`)的手感与几何:`stackDuration` / `stackCurve` 换掉
#     包内那条参数写死的让位弹簧;`stackShrinkFromAnchor` 把支点取到「离锚点最近
#     的那个面板角」(朝锚点方向退让,而不是以面板中心);`stackPivotBounds` 把
#     支点钉到任意矩形(传一个零尺寸矩形就是「钉到某个点」);`stackScalesPanel`
#     让让位只缩内容、卡片轮廓原地不动 —— **这条被用户否掉过**(「为什么他妈的
#     卡片没缩,内容缩放了」),当前**无调用方**,留着只为记录那条路走不通。
#   · 二级面板(`MiuixGlassSecondaryPopup`)也开放同一族让位开关:上游只让一级
#     (`MiuixGlassTransformPopup`)参与让位、二级原地不动,两块同宽同边的面板
#     叠在一起时,缩过的那块左边缘会比二级多退 5% 板宽(200 宽上 10px)。
#     2026-09-20 曾用它把两块钉到同一支点一起缩来消这条缝,2026-09-21 用户否掉
#     (二级的行文字跟着小 5%,被点那一行也跟着挪),改回「只有一级缩」,**这条缝
#     由用户拍板接受**。所以二级这一族参数目前在本仓**没有调用方**(留着是因为
#     缺省行为与打补丁前逐字相同,删它要再动一次 pin 的 SHA,收益为零)。
#   · `stackLocksInput` 把让位拆成两件事:**视觉退让** 与 **让出输入**(内容命中 /
#     焦点 / 返回键 / 遮罩关窗)。默认 true = 上游原行为(被压在下面那块连输入一起
#     让出);只想借让位变换消接缝、输入仍归自己的那块传 false。
#   · 出生即带 `stacked` 的弹层,让位进度直接落在目标值(`initState` 赋初值)——
#     `didUpdateWidget` 只在 `stacked` **变化**时驱动,按需挂载的二级面板挂上那
#     一刻让位就已经成立,不补这一刀会「传了 stacked 却没缩」。
# 课程弹窗(通栏底部弹窗)用它们把面板换成本仓液态玻璃,并让玻璃采到未压暗的页面;
# 用法与理由见 lib/ui/hyperos/miuix_bottom_sheet.dart;首页菜单的让位手感与几何见
# lib/widgets/home_top_menu_popup.dart(一级向右退让、二级不参与让位)。
# **固定到 commit,不要写分支名** —— 分支名会让不同时间 / 不同机器解析到不同的那份,
# CI 也拿不到可复现的依赖。补丁进了上游 release 后整块删掉,即回到 pub.dev。
dependency_overrides:
  flutter_miuix:
    # 包含「让位缩放改为面板布局矩形朝支点缩小,玻璃按缩后尺寸画」与
    # 「二级面板边缘高光/阴影随开合渐显」两个补丁(paint 变变换带不动
    # BackdropFilter,所以缩放必须落在布局矩形上)。
    git:
      url: https://github.com/Mutx163/flutter_miuix.git
      ref: 574a23404fcde4d94f8ac0bc513b6ca0f6351a80
  # inspire_blur:分布图像素记忆化——上游每个新挂载的顶栏都同步重算一张
  # 674k 像素的分布图(真机实测 36~49ms),这里按 (distribution, size) 记住像素。
  # fork 自 inspirestack/inspire_blur,分支 mikcb/distribution-pixels-cache,
  # 基线 tag v0.4.1(a44d40c);改补丁请改 C:/cursor/inspire_blur 那份克隆。
  # 全部理由与删除清单见 test/architecture/inspire_blur_patch_test.dart。
  inspire_blur:
    git:
      url: https://github.com/Mutx163/inspire_blur.git
      ref: 6247f025b5b6fdb8700d3f6e2728bef04b658d3d

flutter:
  uses-material-design: true
  generate: true
  # 课程卡片「液态玻璃」档的着色器:在共享的预模糊壁纸上做圆角 SDF 边缘折射 +
  # 染色 + 边缘高光。一份纹理全部卡片共用,没有离屏与回读,见 shaders/ 里的注释。
  # 加载失败(或后端不支持)时卡片回落「高斯磨砂」外观,不会破相。
  shaders:
    - shaders/course_card_glass.frag
    # 全局「液态玻璃」表面(弹层 / 顶栏 / 玻璃坞…)的着色器:当 `ImageFilter`
    # 用(BackdropFilter 的滤镜输入即实时背景),折射数学与卡片那份同源。
    # 加载失败时各表面回落自己既有的基础材质,不会破相。
    - shaders/glass_surface_refraction.frag
  assets:
    - assets/branding/
    - assets/donate/
    - assets/holidays/
    - docs/releases/
    - assets/lan_edit/
    - assets/templates/