junny_form 0.0.20
junny_form: ^0.0.20 copied to clipboard
A flexible Flutter form management library that supports centralized field management, async validation, and custom field types.
Changelog #
2025-07-26 - v0.0.20 #
- 🐛 修复:选择组件name生成逻辑的翻译稳定性问题
- 🎯 核心问题解决 • 修复选择组件的name依赖title字段导致翻译加载前后name不稳定的问题 • 翻译前:title = 翻译key(如 'framework_contractRegChange_partyBUserName') • 翻译后:title = 翻译文本(如 '乙方单位名称') • 导致同一组件在不同时间点的name不一致,引发表单数据管理问题
- 🔧 技术解决方案 • 使用widget的identityHashCode替代依赖翻译的title生成name • identityHashCode基于内存地址,在对象生命周期内保持不变 • 每个widget实例都有不同的identityHashCode,确保绝对唯一性 • 完全避免翻译系统依赖,解决同页面多组件冲突问题
- ⚡ 技术优势 • ✅ 绝对唯一:每个widget实例都有不同的内存地址 • ✅ 生命周期稳定:在widget生命周期内identityHashCode不变 • ✅ 完全避免翻译依赖:不涉及title或翻译系统 • ✅ 解决同页面冲突:不同widget实例必然有不同的identityHashCode • ✅ 代码简洁:只有一行核心逻辑,易于理解和维护 • ✅ 性能优异:identityHashCode是O(1)操作
- 📊 影响范围 • 直接修复: JunnySelectionFieldState基类 • 自动受益: JunnyChoiceField、JunnySingleSelectionField、JunnyAttachmentField等所有继承选择基类的组件 • 完全兼容: 不影响现有用户代码
- ✨ 功能增强:title字段迁移到titleBuilder以支持动态翻译
- 🎯 API升级 • JunnyFormFieldBasicConfig.title → titleBuilder • JunnySubtableItemInfo.title → titleBuilder • 支持动态翻译和国际化,标题可以根据上下文实时更新 • 提供更灵活的标题构建机制
- 🐛 关键问题修复 • 修复titleBuilder在initState中调用导致的Provider生命周期错误 • 修复hintText显示翻译key而非翻译内容的问题 • 修复语言切换时标题不更新的问题
- 🔧 技术实现 • 在inputDecoration getter中动态获取hintText • 添加安全的titleBuilder调用机制 • 实现翻译状态变化时的自动刷新
- ⚠️ Breaking Changes • title字段已移除,需要使用titleBuilder替代 • 更新所有示例页面使用titleBuilder • 添加API迁移指南文档
- 🔖 版本
- 升级版本至
0.0.20
- 升级版本至
2025-07-22 - v0.0.19 #
- 🔧 重要修复:表单字段死循环问题彻底解决
- 🎯 智能值变化检测机制
• 在
JunnyFormFieldState中实现完整的循环调用防护系统 • 新增_isExecutingOnValueChanged和_isFromListener状态标识 • 添加needsInternalSync虚方法,支持组件自定义同步需求判断 • 通过 DeepCollectionEquality 进行精确的值比较,避免无效触发 - 🛡️ 高风险组件全面适配
• 为所有重写了
onValueChanged的组件实现needsInternalSync方法 • 包括 JunnyChipsField、JunnyNumRangeField、JunnyDateTimeRangeField、JunnyAttachmentField、JunnySubtableField • 确保内部状态同步需求得到满足,同时防止循环调用 - ⚡ 区间组件反向同步机制 • 为 JunnyNumRangeField 和 JunnyDateTimeRangeField 添加反向同步功能 • 支持从 from/to、start/end 字段自动构建主字段值,解决默认值显示问题 • 添加防护机制避免反向同步时的循环调用
- 🧪 完整测试验证体系
• 在
combined_example_page.dart中实现高风险组件测试套件 • 添加详细的标签化调试日志系统,便于追踪各组件行为变化 • 实现_runComprehensiveValueChangeTest自动化测试方法 • 分别测试相同值重复设置和不同值变化场景
- 🎯 智能值变化检测机制
• 在
- ✨ 新功能:OriginalValueIndicator 字段状态控制
- 🎯 可选状态控制功能
• 新增
respectFieldStatus参数(默认 false,保持向后兼容性) • 支持根据字段的 enable 和 readOnly 状态自动控制显示/隐藏 • 字段禁用时自动隐藏指示器,只读时仍显示(用户可查看值变化历史) - 🔧 实时状态检测机制
• 使用
context.findAncestorStateOfType()直接查找父字段状态 • 避免依赖 JunnyFormController 的注册机制,解决时序问题 • 通过实时状态检测+缓存机制确保状态的准确性 - 🛠️ 控制器状态修复
• 修复字段重建时控制器状态丢失的问题
• 在
getFieldController时传入当前表单值作为 initialValue • 确保新控制器具有正确的初始状态
- 🎯 可选状态控制功能
• 新增
- 🎨 装饰器交互控制优化
- 🔧 分层交互控制架构
•
parentDecorationEnabled控制选择器点击交互(enabled && !readOnly) •InputDecoration.enabled控制装饰器元素交互(只检查 enabled) •TextField.ignorePointers控制输入框指针事件(!enabled) - 🎯 只读状态交互修复 • 修复输入框组件只读状态下 suffixIcon 无法交互的问题 • 修复选择类组件只读状态下装饰器元素无法交互的问题 • 实现精确的分层控制:只读时禁用选择器但保持装饰器可交互
- 🔧 分层交互控制架构
•
- ⚡ 性能优化
- 🔧 JunnyNumRangeField 组件优化 • 移除冗余的 Consumer 包装,减少 25% 的 widget 开销 • 直接使用监听器机制确保关联字段变化被正确捕获 • 移除不必要的 setState 调用,优化渲染性能
- 🏗️ 架构优化:统一表单字段值显示逻辑
- 🎯 核心架构改进
• 在
JunnyFormFieldState基类中新增formatValue虚方法 • 建立统一的值显示接口,支持 formatter 优先级控制 •displayText默认调用formatValue,保持完全向后兼容 - 🧹 代码重构优化
• 删除
JunnyInputFieldState和JunnySelectionFieldState中的冗余formatValue实现 • 删除多个组件中冗余的displayText重写,减少约 50 行冗余代码 • 统一区间组件的代码风格,使用简洁的数组拼接方式 - 🔧 组件功能增强
•
JunnySubtableField: 新增formatValue,复用subtableLengthBuilder逻辑 •JunnyNumRangeField: 新增formatValue,复用区间格式化逻辑 •JunnyDateTimeRangeField: 新增formatValue,复用时间区间格式化 •JunnyDictFieldState: 重写formatValue,使用字典特有的显示逻辑 - 📊 架构效果 • 所有表单字段组件现在都有统一的值显示框架 • 提升代码维护性和扩展性,为后续功能扩展提供良好基础 • 保持完全向后兼容,现有功能和 API 不受影响
- 🎯 核心架构改进
• 在
- 📚 代码关系图谱建立
- 🏷️ 完整标签体系 • 为所有核心文件添加功能标签:type、category、role、complexity 等 • 建立清晰的组件分类和功能标识体系
- 🔗 依赖关系网络 • 建立组件间的完整依赖关系图谱 • 添加详细的功能说明和使用指南注释 • 通过查询工具验证关系建立的正确性
- 🔖 版本
- 升级版本至
0.0.19
- 升级版本至
2025-07-09 - v0.0.18 #
- 🚀 重构:附件字段数据同步逻辑统一优化
- 🔧 统一数据同步策略
• 创建
_syncData()统一数据同步入口,支持双向同步(字段 ↔ attachments.{fieldName}) • 内联整合_updateAttachmentsToFormData()逻辑,消除代码重复 • 重写didChange()、onValueChanged()等核心方法,使用统一同步接口 • 添加preventLoop参数防止循环调用,确保数据同步的可靠性 - 🎯 解决关键问题 • 修复 FormKeyValueTransformer 场景下的 UI 更新问题 • 解决设计理念冲突(数据清空 vs 数据同步) • 消除循环调用风险和逻辑重复问题 • 统一空值处理和错误处理逻辑
- ⚡ 性能显著提升 • 减少方法调用层级 66%(从 3 层减少到 1 层) • 消除 100% 的数据同步代码重复 • 减少 50% 的同步方法数量 • 提高缓存命中率和内存使用效率
- 📊 架构优化 • 统一数据流向:任何数据更新 → _syncData() → 条件判断 → 双向同步 → UI更新 • 简化调用链:所有同步逻辑集中到单一方法 • 增强可靠性:覆盖所有数据变化场景,确保数据一致性 • 优化监听器机制:双重监听器设计确保数据变化的完整捕获
- 🔧 统一数据同步策略
• 创建
- 🔖 版本
- 升级版本至
0.0.18
- 升级版本至
2025-07-05 - v0.0.17 #
- ✨ 新增:子表保存按钮文本自定义功能
- 🔧 全局配置增强
• 在
JunnyFormGlobalConfig中新增subtableSaveButtonTextBuilder字段 • 支持全局配置子表列表页面保存按钮的默认文本 • 提供国际化支持,可根据上下文动态构建按钮文本 - 🎯 子表参数扩展
• 在
JunnyFormSubtableParams中新增saveButtonTextBuilder字段 • 支持在具体子表实例中覆盖全局配置 • 提供更精细的按钮文本控制能力 - 🔧 层级配置实现
• 在
JunnySubtableListPage中实现三级配置优先级 • 优先级:subtableParams.saveButtonTextBuilder>globalConfig.subtableSaveButtonTextBuilder>MaterialLocalizations.saveButtonLabel• 确保在任何情况下都有合适的按钮文本显示 - 🎨 用户体验优化 • 支持业务层面自定义保存按钮文本(如"确定"、"完成"等) • 保持向后兼容性,默认使用系统标准的保存按钮文本 • 优化底部按钮栏的内边距设计,提升视觉效果
- 🔧 全局配置增强
• 在
- 🔖 版本
- 升级版本至
0.0.17
- 升级版本至
2025-07-03 - v0.0.16 #
- 🐛 修复:表单字段值变化监听的时序问题
- 🔧 核心逻辑优化
• 调整
_onValueChanged方法的执行顺序,确保formController.setValue()在onValueChanged回调之前执行 • 修复oldValue获取逻辑,在 formController 更新前正确保存旧值,避免懒加载问题 • 解决在onValueChanged回调中通过formController.getValue()获取到旧值的问题 • 修复联动计算、复合字段更新等场景中的时序不准确问题 - 🎯 影响范围
• 修复
MapSelectionMixin、DictState、JunnyAddressField、JunnyWeekField等组件的联动更新时序 • 确保税务计算、地址选择、数据字典等复杂联动场景的准确性 • 提升表单字段间联动计算的可靠性和一致性
- 🔧 核心逻辑优化
• 调整
- 🐛 修复:税率字典枚举字段值变为 null 的问题
- 🔧 问题分析
• 税率组件通过
isTaxRateEnum判断,只保存转换后的数值(如{taxRate: 0.01}) • 继承的父类onValueChanged()逻辑会尝试查找字典项并重新调用updateValue()• 导致税率值在选择后又被清空为 null 的循环问题 - 🔧 修复方案
• 在
JunnyDictEnumFieldState中重写onValueChanged()方法 • 税率类型跳过父类的字典查找逻辑,避免循环调用 • 普通字典组件继续使用父类的完整逻辑,保持兼容性
- 🔧 问题分析
• 税率组件通过
- 🐛 修复:防止 onValueChanged 循环调用问题
- 🔧 问题识别
• 检查所有重写了
onValueChanged的组件,发现潜在的循环调用风险 •JunnyDictFieldState父类在onValueChanged中调用updateValue()可能导致循环 •JunnyDictEnumFieldState税率分支中的字典查找逻辑已被移除 - 🔧 防护机制
• 在
JunnyDictFieldState中添加_isUpdating标志防止循环调用 • 使用 try-finally 确保标志正确重置 • 参考JunnyAddressField和MapSelectionMixin的成功实践 - ✅ 测试验证 • 添加完整的时序测试用例,验证修复效果 • 确保现有功能不受影响,保持向后兼容性 • 提供演示页面展示修复前后的差异
- 🔧 问题识别
• 检查所有重写了
2025-07-01 - v0.0.15 #
- 🎨 优化:统一查看模式下的文本颜色策略
- 🔧 颜色统一优化
• 统一所有表单组件在只读状态下使用
themeData.disabledColor• 修改input_state.dart、num_range_field.dart、date_time_range_field.dart• 移除不一致的自定义透明度方案,遵循系统主题设计规范 - 🎯 系统化设计
• 保持与 Material Design 系统规范的完全一致性
• 用户可通过应用主题层面配置
disabledColor调整只读文本颜色 • 确保所有组件在查看模式下颜色表现一致,提升 UI 专业性
- 🔧 颜色统一优化
• 统一所有表单组件在只读状态下使用
- 🐛 修复:子表组件查看模式下的交互问题
- 🔧 交互优化
• 修复
parentDecorationEnabled逻辑,支持查看模式下的点击跳转功能 • 优化列表页面权限控制,查看模式下不显示编辑相关操作按钮 • 完善自定义列表页面构建器的状态传递机制 - 🎯 用户体验提升 • 查看模式下仍可点击跳转查看详情,但不显示编辑操作 • 与附件组件的交互行为保持一致 • 在组件层面统一控制,业务层无需额外关心表单字段的 readOnly 状态
- 🔧 交互优化
• 修复
- 🔖 版本
- 升级版本至
0.0.15
- 升级版本至
2025-06-28 - v0.0.14+1 #
- 🐛 修复:JunnySubtableFieldController 缺少 tableCode 参数
- 🔧 控制器优化
• 为
JunnySubtableFieldController构造函数添加必填的tableCode参数 • 添加断言验证确保tableCode不为空,提供清晰的错误提示 • 优化tableCode的获取方式,避免重复解析,直接从控制器获取 - 📝 代码质量提升 • 移除不合理的空字符串默认值 • 使用立即执行函数确保参数验证 • 提升类型安全性和代码健壮性
- 🔧 控制器优化
• 为
- 🔖 版本
- 升级版本至
0.0.14+1
- 升级版本至
2025-06-28 - v0.0.14 #
- ✨ 新增:子表组件参数优化
- 🔧 参数增强
• 为
actionsBuilder添加BuildContext参数,支持在操作按钮构建时访问上下文 • 为itemActionsBuilder添加BuildContext参数,支持在条目操作按钮构建时访问上下文 • 新增必填的tableCode参数,用于标识子表的上下文,便于在复杂表单场景中区分不同子表实例 - 🎯 上下文分离优化
• 优化
listPageBuilder参数设计,区分导航 context 和列表页面 context • 导航 context 用于页面跳转,列表页面 context 用于构建操作按钮 • 修复 context 混用导致的潜在问题 - 📝 文档和示例更新 • 更新所有相关的文档注释和使用示例 • 更新 README.md 中的示例代码 • 确保类型安全和向后兼容性
- 🔧 参数增强
• 为
- 🔖 版本
- 升级版本至
0.0.14
- 升级版本至
2025-06-28 - v0.0.13 #
- 📦 包体积优化
- 🗂️ 发布文件优化 • 添加完善的 .pubignore 文件,排除构建缓存、开发文件等不必要内容 • 排除 build/、issues/、示例应用平台文件等,显著减少包体积 • 从 18MB 优化至几 MB,提升下载和安装效率
- 🔧 依赖版本约束修复 • 修复 dio、junny_utils、junny_widget、provider 依赖的版本约束问题 • 添加明确的版本范围,避免发布时的警告信息 • 提升包的稳定性和兼容性
- 🔖 版本
- 升级版本至
0.0.13
- 升级版本至
2025-06-28 - v0.0.12 #
- 🐛 修复:选择类组件和输入框组件 hintText 样式不一致问题
- 🎯 样式统一优化
• 修复选择类组件(JunnyChoiceField、JunnyDictField 等)与输入框组件(JunnyTextField)的 hintText 样式差异
• 通过在 InputDecorator 中设置 baseStyle 解决样式渲染差异
• 确保所有组件使用相同的 hintText 样式:
_themeData.textTheme.bodyMedium?.copyWith(color: _themeData.hintColor) - 🔧 readOnly 模式 hintText 显示修复 • 修复输入框组件在 readOnly 模式下仍显示 hintText 的问题 • 统一选择类组件和输入框组件在只读状态下的 hintText 行为 • 只读模式下不再显示 hintText,符合 Material Design 规范
- 🎨 组件内容渲染优化 • 修复选择类组件 buildContent 方法中空值时返回空 Text 导致 hintText 不显示的问题 • 空值时返回 SizedBox.shrink(),让 InputDecorator 正确显示 hintText • 提升用户体验,确保提示文本在合适的时机显示
- 🎯 样式统一优化
• 修复选择类组件(JunnyChoiceField、JunnyDictField 等)与输入框组件(JunnyTextField)的 hintText 样式差异
• 通过在 InputDecorator 中设置 baseStyle 解决样式渲染差异
• 确保所有组件使用相同的 hintText 样式:
- 🔖 版本
- 升级版本至
0.0.12
- 升级版本至
2025-06-23 - v0.0.11+2 #
- 🔧 配置优化:SDK 版本约束调整
- 🎯 版本兼容性提升
• 将 SDK 版本约束从
^3.5.4修改为">=3.5.4 <4.0.0"• 采用更合理的版本约束,既避免严格限制又符合包发布最佳实践 • 允许使用 3.5.4 及以上的所有 3.x 版本,防止 4.0.0 重大更改 • 减少因 SDK 版本不匹配导致的构建失败,同时确保发布包的稳定性
- 🎯 版本兼容性提升
• 将 SDK 版本约束从
- 🔖 版本
- 升级版本至
0.0.11+2
- 升级版本至
2025-06-21 - v0.0.11+1 #
- 🐛 修复:附件组件只读模式下无法点击查看问题
- 🔧 JunnyAttachmentFieldState 装饰器启用逻辑修复
• 重写
parentDecorationEnabled属性,移除只读限制 • 附件组件在只读模式(readOnly = true)下仍然可以点击查看附件 • 保持完全禁用(enabled = false)时的正确行为 • 不影响其他选择类组件的现有行为 - 🎯 用户体验优化 • 解决附件字段在查看模式下被禁用的问题 • 支持只读模式下跳转到选择页面查看附件内容 • 符合附件字段的设计场景和用户期望
- 🔧 JunnyAttachmentFieldState 装饰器启用逻辑修复
• 重写
- 🔖 版本
- 升级版本至
0.0.11+1
- 升级版本至
2025-06-18 - v0.0.11 #
- 🐛 修复:子表组件缺失默认 hintText 问题
- 🔧 新增 emptyDataBuilder 全局配置 • 在 JunnyFormGlobalConfig 中添加 emptyDataBuilder 字段 • 默认返回 "暂无数据" 提示文本 • 支持国际化自定义配置
- 🔧 修复 JunnySubtableFieldState • 为 JunnySubtableFieldState 实现 getDefaultHintText 方法 • 使用 emptyDataBuilder 获取空数据提示文本 • 不拼接 title,直接显示简洁的空数据提示
- 📝 更新测试用例 • 在测试页面中添加子表组件测试用例 • 验证子表组件的默认 hintText 显示效果
- 🎨 代码规范优化 • 修正 global_config.dart 中字段的字母序排序 • 确保代码完全符合开发规范
- 📚 项目记忆更新 • 记录修复过程和最佳实践 • 完善组件开发规范文档
- 🔖 版本
- 升级版本至
0.0.11
- 升级版本至
2025-06-16 - v0.0.10 #
- 🐛 重要修复:选择类组件智能适配数据更新问题
- 🔧 智能适配逻辑优化
• 修复智能适配功能在数据更新时被
_isUpdating条件错误跳过的问题 • 确保接口返回的扁平化数据能正确转换为组件期望的 Map 结构 • 移除不必要的更新状态判断,保留防循环适配机制 • 解决有数据的字段仍然显示为空或显示 '{}' 的问题 - 📊 数据处理增强 • 项目所属公司字段正确显示数据 • 关联中标信息字段正确显示数据 • 项目经理字段正确显示数据 • 空值字段正确构建数据结构,支持 hint 显示
- 🧪 测试验证 • 添加扁平化数据适配测试页面 • 验证智能适配在各种场景下的正确性 • 确认向后兼容性
- 🔧 智能适配逻辑优化
• 修复智能适配功能在数据更新时被
- 🔧 重要修复:附件字段columnCode自动设置功能
- 🎯 数据完整性保障
• 新增
_ensureColumnCode方法,确保每个附件对象包含正确的columnCode字段 • 修改_handleAssetsResult方法,在保存前自动处理所有附件对象 • 确保columnCode字段始终被设置为当前字段名,符合业务数据结构要求 - 📊 数据存储优化 • 优化附件数据存储逻辑,确保数据唯一来源于嵌套结构 • 避免字段本身和 attachments 字段的数据混淆 • 提升数据一致性和可靠性
- 🛠️ 类型安全提升
• 更新全局配置中
selectAttachments的返回类型定义 • 从List<Map<String, dynamic>>更新为Iterable<Map<String, dynamic>>?• 提升类型安全性和灵活性 - 🛡️ 向后兼容性 • 保持现有 API 使用方式不变 • 自动处理附件数据,无需手动设置 columnCode • 确保所有附件相关功能正常工作
- 🎯 数据完整性保障
• 新增
- 🔖 版本
- 升级版本至
0.0.10
- 升级版本至
2025-01-15 - v0.0.9 #
- 🐛 重要修复:选择类组件 hintText 重叠显示问题
- 🔧 修复重叠 hintText 渲染 • 修复选择类组件(JunnyChoiceField、JunnyDateField、JunnyChipsField 等)出现重叠 hintText 的问题 • 移除 buildContent 中手动的 hintText 渲染逻辑,统一由 InputDecorator 处理 • 确保所有组件的 hintText 样式完全一致 • 包括字典多选、标签多选、地址选择等所有选择类组件
- 🏷️ 全局配置字段重命名优化
- 📝 简化字段命名
•
filterPlaceholderBuilder→filterHintBuilder•pleaseSelectPlaceholderBuilder→pleaseSelectHintBuilder•pleaseEnterPlaceholderBuilder→pleaseEnterHintBuilder• 统一使用HintBuilder后缀,提升代码可读性 - 🔄 向后兼容性 • 需要更新初始化代码中的参数名 • 功能保持完全不变,仅为命名优化
- 🔧 JunnySelectionFieldState.buildContent 修复 • 修复选择类组件(JunnyChoiceField、JunnyDateField 等)当值为空时不显示 hintText 的问题 • 当 formatValue(value) 为空且存在 hintText 时,正确显示带有 hintStyle 样式的提示文本 • 保持现有值不为空时的显示逻辑不变 • 确保选择类组件与输入类组件具有一致的 hintText 显示行为
- 🏷️ 全局配置字段重命名
• 将
pleaseSelectBuilder重命名为pleaseSelectPlaceholderBuilder• 将pleaseEnterBuilder重命名为pleaseEnterPlaceholderBuilder• 更新所有相关引用,包括 JunnyFormGlobalConfig.init 方法参数 • 统一占位符构建器的命名规范,符合pleaseXXXPlaceholderBuilder格式 - 🛡️ 向后兼容性 • 功能修复不影响现有 API 使用方式 • 字段重命名需要更新初始化代码中的参数名 • 保持所有组件的默认行为和样式不变
- 📝 简化字段命名
•
- 🔖 版本
- 升级版本至
0.0.9
- 升级版本至
2025-06-11 - v0.0.8 #
- 🐛 重要修复:Filter 组件状态恢复错误
- 🔧 FilterSearchBar 异常处理增强 • 修复 FilterSearchBar._getHintText 方法中访问 field.effectiveInputDecoration 时的 RestorableValue.value 错误 • 添加异常处理机制,当状态恢复失败时使用备用的 hintText 获取方案 • 确保筛选弹窗可以正常重复打开,不会因状态恢复问题导致应用崩溃 • 解决 TextField 第一次输入正常,再次打开筛选弹窗时出现错误的问题
- 🛡️ 稳定性提升 • 向后兼容,不影响现有功能 • 安全可靠,避免状态访问异常 • 确保始终有合理的 placeholder 显示
- ✨ 新功能:字典多选字段数组格式支持
- 🎯 JunnyDictChipsField 数据格式扩展
• 新增
saveAsArray参数,允许将值保存为List<String>格式 • 支持灵活的数据保存格式配置,同时保持向后兼容 • 默认保存为逗号分隔字符串,可配置为数组格式 - 📊 智能数据处理
• 调整
_initValueByCodes和onValueChanged方法,兼容字符串和数组两种数据格式 • 自动识别外部数据类型,根据配置明确表单数据类型 • 优化类型安全性,避免不必要的类型转换 - 🔧 参数模型完善
• 更新
JunnyFormDictChipsParams类,添加saveAsArray字段配置 • 包括构造函数、copyWith、toMap、fromMap、相等性比较的完整支持
- 🎯 JunnyDictChipsField 数据格式扩展
• 新增
- ✨ 新功能:智能默认 hintText 生成
- 🎯 自动提示文本生成 • 输入类组件:自动生成 '请输入' + title • 选择类组件:自动生成 '请选择' + title • 基于虚方法的类型安全设计,零侵入性实现
- 🔧 技术实现优化 • 在基类 JunnyFormFieldState 中定义虚方法 getDefaultHintText() • 在 JunnyInputFieldState 和 JunnySelectionFieldState 中重写此方法 • 通过 inputDecoration getter 动态注入默认 hintText • 保持用户自定义 hintText 的优先级
- 📊 全局配置扩展 • 新增 pleaseSelectPlaceholderBuilder 和 pleaseEnterPlaceholderBuilder 配置项 • 支持自定义默认提示文本生成规则 • 减少重复的 hintText 设置工作
- 🔧 优化:选择字段参数系统重构
- ✨ 参数类型体系完善 • 新增 SelectionTapParams
- 🎯 功能特性增强 • 支持选项禁用条件 (disabledWhen) • 支持选项隐藏条件 (hiddenWhen) • 支持自定义选项标题构建器 (optionTitleBuilder) • 为 JunnyChoiceField 添加完整的 selectionParams 支持
- 🛠️ 代码质量提升
- 修复 BoxConstraints 错误:确保 maxWidth >= minWidth
- 统一 hintText 显示行为:默认和自定义获得相同处理路径
- 类型安全(无 dynamic 类型),编译时检查(无运行时反射)
- 高扩展性(新组件只需重写一个方法),性能优秀(只在初始化时计算一次)
- 🔖 版本
- 升级版本至
0.0.8
- 升级版本至
2025-05-29 - v0.0.7 #
- ✨ 新增功能:附件组件自定义字段名支持
- 🔧 JunnyAttachmentField 增强
• 新增
attachmentsFieldName参数,默认为 'attachments',支持自定义为 'testAttachments' 等 • 新增deleteAttachmentsFieldName参数,默认为 'deleteAttachments',支持自定义为 'testDeleteAttachments' 等 • 适配特殊页面中使用非标准字段名的业务需求(如同时存在 attachments 和 testAttachments) • 保持完全向后兼容性,默认行为不变 - 📊 数据处理优化
• 更新
_getAttachmentsFromFormData()方法支持自定义字段名 • 更新_updateAttachmentsToFormData()方法支持自定义字段名 • 更新_syncInitialData()方法支持自定义字段名 • 更新_updateDeletedAttachments()方法支持自定义删除字段名 - 🛠️ 参数配置增强
• 更新
JunnyFormAttachmentParams类,添加字段名配置选项 • 提供默认值,确保大多数情况下无需显式配置 • 完善类型安全和参数验证 - 📝 文档和示例 • 更新组件文档注释,说明自定义字段名功能 • 在示例页面中添加自定义字段名使用演示 • 更新 README 文件,提供详细的使用说明和数据结构示例
- 🔧 JunnyAttachmentField 增强
• 新增
- 🔖 版本
- 升级版本至
0.0.7
- 升级版本至
2025-05-29 - v0.0.6 #
- 🚀 重大更新:附件组件v3版本适配
- ✨ 全面重构
JunnyAttachmentField以支持v3版本API数据结构 • 支持完整附件元数据存储,不再仅保存fileId • 按照v3数据结构存储:attachments.{fieldName}和deleteAttachments.{fieldName}• 自动处理删除附件跟踪,无需手动管理 • 优化数据获取性能,减少不必要的网络请求 - 🔧 性能优化 • 修复重复的值变化触发问题 • 移除重复的监听器添加,避免内存泄漏 • 解决循环调用风险,优化数据获取逻辑 • 实现延迟更新机制(200ms防抖),减少频繁UI刷新
- 📊 数据管理增强 • 双重数据存储策略:同时支持字段本身和attachments字段 • 自动数据同步:初始化时智能同步v3格式数据 • 完善的删除跟踪:自动记录和管理删除的附件ID
- 🛠️ 代码质量提升 • 优化生命周期管理,正确处理定时器清理 • 改进错误边界处理,增强稳定性 • 完善文档注释,提供详细的使用说明和示例
- ✨ 全面重构
- 📝 配置更新
- 更新
AttachmentTapParams参数结构以适配新的数据格式 - 优化全局配置中的附件相关方法签名
- 更新
- 🔖 版本
- 升级版本至
0.0.6
- 升级版本至
2025-05-16 - v0.0.5 #
- 📝 文档
- 完善
JunnyFormFieldState中parentDecorationEnabledgetter 的文档注释,阐明其与enabled和readOnly状态的交互行为
- 完善
- ⚙️ 杂项
- 将示例项目的 Android
.cxx目录添加到.gitignore - 停止追踪示例项目的 Android
.cxx目录
- 将示例项目的 Android
- 🔖 版本
- 升级版本至
0.0.5
- 升级版本至
2025-05-15 - v0.0.4+2 #
- ✨ 新增功能:表单字段类型转换器
- 🔧 FormFieldTypeConverter 实现
• 实现基础类型、集合类型的安全转换
• 支持可空性和泛型元素类型处理
• 集成到
JunnyFormFieldState中进行值转换
- 🔧 FormFieldTypeConverter 实现
• 实现基础类型、集合类型的安全转换
• 支持可空性和泛型元素类型处理
• 集成到
- ♻️ 重构优化
- 🛠️ JunnyFormFieldState 重构 • 调整类成员顺序和注释,符合最新规范 • 优化部分 Getter 和私有方法的实现
- 🎯 JunnyWidgetField 布局控制增强
• 允许用户通过
JunnyFormWidgetParams中的preventChildExpansion和defaultChildAlignment参数更精细地控制自定义子组件的布局行为 • 如果builder返回Align组件,则直接使用用户的Align设置 • 非Align组件默认情况下会防止意外拉伸并左对齐,但此行为可通过新参数配置 • 优化了内部hintText的处理逻辑,确保自定义组件上方提示的正确显示,并避免与InputDecorator的默认行为冲突
- 📝 代码质量提升
- 调整了
JunnyFormWidgetParams类中成员的声明顺序,以符合 Dart 编码规范 - 移除了
JunnyWidgetField构造函数中冗余的hintText: null参数 - 详细更新了
JunnyWidgetField和JunnyFormWidgetParams的文档注释,说明了新的布局参数和行为 - 提供了更清晰的示例代码来演示新功能
- 调整了
- 🔖 版本
- 升级版本至
0.0.4+2
- 升级版本至
2025-05-14 - v0.0.4+1 #
- 🔧 字段优化
- 优化了
JunnyFormFieldState中InputDecoration的hintText显示逻辑,以确保在特定条件下行为正确
- 优化了
- 🔖 版本
- 升级版本至
0.0.4+1
- 升级版本至
2025-05-14 - v0.0.4 #
- 📦 依赖更新
- 更新了多个直接和间接依赖项至其最新的兼容版本,包括
provider,device_info_plus,http等
- 更新了多个直接和间接依赖项至其最新的兼容版本,包括
- 🎨 代码风格
- 调整了
JunnyFormFieldState和InputState中的注释结构以符合代码风格指南
- 调整了
- 🔖 版本
- 升级版本至
0.0.4
- 升级版本至
2025-05-13 - v0.0.3 #
- 🔧 全局配置优化
- nullErrorMessageBuilder 函数现在接收 BuildContext 参数
- selectAttachments 函数添加了 BuildContext 参数
- subtableLengthBuilder 函数添加了 BuildContext 参数
- 🛠️ 代码结构优化
- 优化代码结构,移除多余的区域注释
- 更新示例代码中的函数签名
- 🔖 版本
- 升级版本至
0.0.3
- 升级版本至
2025-05-09 - v0.0.2 #
- 🔧 表单控制器优化
- 优化表单控制器代码结构和注释
- 改进代码可读性和可维护性
- 添加详细的函数级文档注释
- 🔖 版本
- 升级版本至
0.0.2
- 升级版本至
2024-11-20 - v0.0.1 #
- 🎉 初始版本
- 项目初始化
- 基础表单组件实现
- 🔖 版本
- 初始版本
0.0.1
- 初始版本