Flutter开发用户可自定义的金融类拖拽表单模板功能实现咨询
Flutter 自定义交互式表单功能实现方案
整体架构设计
整体分为三层,各层职责明确:
- 前端交互层:负责字段拖拽、模板配置、表单渲染、用户输入校验所有端侧交互逻辑
- 接口服务层:负责字段库拉取、模板增删改查、业务数据存储的接口对接
- 数据存储层:基于SQL数据库存储可选字段库、用户自定义模板、用户填写的业务数据三类核心数据
前端Flutter侧核心实现
拖拽配置功能实现
直接使用Flutter官方提供的Draggable和DragTarget组件即可实现拖拽能力:
- 左侧可选字段面板:每个可选字段项外层包裹
Draggable组件,携带字段唯一ID、字段类型、显示名、单位等核心元数据 - 右侧表单编辑区:整个编辑区及已添加的字段项外层包裹
DragTarget组件,接收拖拽事件后,将对应字段加入当前模板的字段列表 - 若需要支持已添加字段的顺序调整,直接给已添加字段列表套
ReorderableListView组件,即可实现拖拽排序
通用字段渲染逻辑
提前把所有字段按类型封装好对应的输入组件,拖拽添加字段时自动匹配对应组件:
- 日期类(对应起息日、到期日等):自动绑定日期选择器,支持范围选择配置
- 数值类(对应存款金额、利率、到期收益等):自动绑定带单位的格式化输入框,默认保留对应小数位
- 枚举类(对应缴费频率、风险等级等):自动绑定下拉选择器,读取预置的选项列表
同时支持用户给每个添加的字段配置是否必填、默认值、显示备注三个可选属性。
模板序列化与加载逻辑
用户完成模板配置后,将模板按照固定结构序列化为JSON提交给后端,参考结构如下:
{ "template_id": "自动生成的唯一标识", "template_name": "用户自定义的模板名称", "applicable_type": "适用投资品类:deposit/bond/stock/sip", "field_list": [ {"field_id": "start_date", "field_name": "起息日", "field_type": "date", "required": true, "default_value": null}, {"field_id": "amount", "field_name": "存款金额", "field_type": "number", "unit": "元", "required": true, "default_value": null} ] }
加载模板时,直接遍历接口返回的field_list数组,自动渲染对应表单组件即可,无需为每个品类单独开发表单页面。
后端与数据存储实现
可选字段库表设计
SQL数据库中建表存储所有可选字段的元数据,核心字段如下:
| 字段名 | 类型 | 说明 |
|---|---|---|
| field_id | varchar | 主键,字段唯一标识 |
| field_name | varchar | 字段显示名称 |
| field_type | varchar | 字段类型:date/number/enum |
| unit | varchar | 数值类字段的单位,非必填 |
| options | json | 枚举类字段的选项列表,非必填 |
| available_scene | varchar | 适用的投资品类,多个用逗号分隔 |
前端初始化时,根据当前用户要操作的投资品类,拉取对应可用的字段列表即可。
自定义模板表设计
SQL数据库中建表存储用户生成的自定义模板,核心字段如下:
| 字段名 | 类型 | 说明 |
|---|---|---|
| template_id | varchar | 主键,模板唯一标识 |
| user_id | varchar | 模板归属用户ID |
| template_name | varchar | 模板名称 |
| applicable_type | varchar | 适用投资品类 |
| field_config | json | 模板对应的字段配置列表,即前端序列化的field_list |
| is_default | tinyint | 是否为该品类用户默认模板 |
| create_time | datetime | 创建时间 |
业务数据表设计
用户通过模板提交的实际投资记录,单独建表存储,核心字段如下:
| 字段名 | 类型 | 说明 |
|---|---|---|
| record_id | varchar | 主键,记录唯一标识 |
| user_id | varchar | 归属用户ID |
| template_id | varchar | 关联使用的模板ID |
| invest_type | varchar | 投资品类 |
| field_data | json | 用户填写的所有字段值,键为field_id,值为用户输入内容 |
| create_time | datetime | 记录创建时间 |
金融场景适配注意点
- 数值校验逻辑要严格:金额、利率、收益类字段要做双重校验,前端限制输入格式,后端再次校验数值合法性,避免出现负数、小数位超限等问题
- 字段权限做前置过滤:部分仅对高等级用户开放的字段,在拉取可选字段列表的接口层面就做过滤,不要暴露给无权限用户
- 提供预置模板降低使用门槛:提前为定期存款、债券、股票、SIP等各品类预置2-3套常用模板,用户可以直接使用,也可以在预置模板基础上修改生成自己的模板,减少用户配置成本
内容的提问来源于stack exchange,提问作者gputhige
相关产品推荐
相关产品推荐

