Skip to main content

lilili_ui_core 0.5.0 copy "lilili_ui_core: ^0.5.0" to clipboard
lilili_ui_core: ^0.5.0 copied to clipboard

Fluent Modifier/Box chaining, Vue-inspired reactive state (ref/computed/watch), slots (SlotHost/Slot/ScopedSlot), and directives (v-if/v-show/v-model) helpers for flattening Flutter widget trees.

0.5.0 #

两个来自真实项目、flutter analyze 抓不到、只在运行时暴露的故障,这一版从签名和布局两侧堵住。

Breaking #

  • Modifier.background() 现在只接受 Color(此前是 dynamic)。传 LinearGradient 这类 Gradient 时旧版编译期毫无提示,运行时才抛 ArgumentError(Gradient 既不是 Color 也不是 Decoration)。现在按类型拆成三个方法,传错在 analyze 阶段即报错:

    • background(Color color, {BorderRadiusGeometry? borderRadius})
    • gradient(Gradient gradient, {BorderRadiusGeometry? borderRadius}) —— 新增
    • decoration(Decoration decoration) —— 新增,替代原来的 background(someDecoration)

    迁移:background(myDecoration) → decoration(myDecoration);渐变从手写 background(BoxDecoration(gradient: ...)) → gradient(...)。 原先 background(Decoration, borderRadius: ...) 抛的 ArgumentError 随之取消—— decoration() 不再提供 borderRadius 参数,圆角写在 Decoration 自身上。

  • Modifier.padding() 现在只接受 num(此前是 dynamic,同一类运行时 ArgumentError)。 非等距内边距改用新增的三个方法:

    • paddingSymmetric({num horizontal = 0, num vertical = 0})
    • paddingOnly({num left = 0, num top = 0, num right = 0, num bottom = 0})
    • paddingInsets(EdgeInsetsGeometry insets) —— 逃生口,也是 EdgeInsetsDirectional 的入口

    迁移:padding(EdgeInsets.symmetric(horizontal: 8)) → paddingSymmetric(horizontal: 8) 或 paddingInsets(...);padding(16) 不变。 内部辅助函数 toEdgeInsets() 随之删除(原本就不在导出面上)。

修复 / 新增 #

  • expanded()/flexible() 在链条中的位置不再重要:applyTo 会把生成的 Flexible 提到最外层。 此前写在 padding() 等修饰项之后会触发 Flutter 的 "Incorrect use of ParentDataWidget"。 同一条链里重复声明 flex 现在命中 assert。
  • 新增 Widget 级扩展 .expanded({flex}) / .flexible({flex})(FlexWidgetX)。 Modifier 级的 flex 只管到 Box 自身:Box 外面再套一层自定义外壳时,Flexible 会被关在壳里, 且当壳内部恰好有 Row/Column 时会被那一层无声认领——不报错,只表现为外层 Row 的子节点 没有约束(文字被裁、卡片不铺满)。这种场景把 .expanded() 接在最外层 Widget 之后即可。 该失效形状已在 test/flex_test.dart 中作为回归用例固化。

0.4.1 #

  • 修复:Modifier.border() 的描边会被链条中随后的 background() 完全盖掉。border() 改用 DecorationPosition.foreground(描边画在 child 之上),行为对齐 foregroundDecoration。注意描边仍不占布局空间(不像 Container 会按边框宽度内缩 child),会覆盖 child 边缘 width 逻辑像素。

0.4.0 #

  • 新增 v-show 指令:Modifier.show(bool) / Modifier.showWhen(ReadonlyRef<bool>)(Offstage 实现,隐藏但保留子树 State)
  • 新增 v-model 双向绑定组件族:VTextField(内管 controller,防回环,IME composing 兼容)、VCheckbox、VSwitch、VSlider、VRadio<T>、VDropdown<T>
  • 最低 Flutter 版本升至 3.32(RadioGroupRegistry/Radio.groupRegistry/Radio.enabled 迁移与 Switch.activeThumbColor 所需)
  • VSwitch 的 activeColor 映射到 Switch.activeThumbColor(仅拇指色,非轨道色)
  • VRadio 内部采用 RadioGroupRegistry 方案(自定义 no-op shim,详见 VRadio dartdoc)
  • 外部等长替换保留选区;VSlider 越界模型值下一帧回写为 clamp 值;示例补充静态 .show 演示

0.3.2 #

  • 修复:computed 的 getter 抛出异常后,后续上游变更不再触达下游(effect/Widget 永久失联)的缺陷。失败的重算/校验现在会允许下一次上游写入重新传播,读取重算成功即自愈。注意:若 getter 在读取任何响应式依赖之前就抛出,computed 将没有任何上游订阅,只能通过直接读取 .value 自愈——建议 getter 先读依赖再做校验。

0.3.1 #

  • 内部优化(无 API 变化):
    • computed 采用版本化 push-pull 失效模型,消除菱形依赖下的冗余重算(每个 computed 每轮至多重算一次)
    • effect/Widget 观察者重跑前做依赖版本校验短路
    • 内部 watchEffect/watch 实现类去重

0.3.0 #

  • 新增 Vue 风格插槽系统:
    • SlotContent / SlotContent.builder<T>(填槽标记,具名槽与作用域槽)
    • SlotHost(组件作者包裹层,InheritedWidget)
    • Slot(具名/默认槽占位,支持 fallback)与 Slot.def()(默认槽构造)
    • ScopedSlot<T>(作用域槽占位,运行时泛型校验)

0.2.0 #

  • 新增响应式状态系统(从零实现,零依赖):
    • ref / computed(惰性缓存派生值)
    • watchEffect / watch(新旧值回调)/ nextTick
    • Watch(细粒度订阅 Widget)/ ReactiveWidget(整页订阅基类)
  • 微任务批处理更新 + 循环依赖检测

0.1.0 #

  • 初始发布:Modifier + Box 链式修饰系统
  • wgtIf / wgtFor 条件与列表渲染语法糖
  • GapX / EdgeInsetsX 基础扩展方法糖
1
likes
140
points
23
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Fluent Modifier/Box chaining, Vue-inspired reactive state (ref/computed/watch), slots (SlotHost/Slot/ScopedSlot), and directives (v-if/v-show/v-model) helpers for flattening Flutter widget trees.

Repository (GitHub)

License

MIT (license)

Dependencies

flutter

More

Packages that depend on lilili_ui_core