You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter根据API返回公式过滤显示指定Widget的实现问题

解决方案

1. 建立变量与Widget的映射关系

先把罐体规格相关的Widget和公式里对应的变量符号做绑定,方便后续匹配:

// 定义变量标识到对应Widget的映射,键名要和API公式里的变量完全对应
final Map<String, Widget> _tankWidgetMap = {
  'L': TankFormulaLength(),
  'W': TankFormulaWidth(),
  'H': TankFormulaHeight(),
  'D': TankFormulaDiameter(),
};

2. 从公式字符串提取涉及的变量

写一个工具方法,解析API返回的公式,抽取出所有用到的罐体规格变量:

Set<String> _extractVariablesFromFormula(String formula) {
  // 正则需根据实际公式的变量规则调整,比如匹配L/W/H/D这类变量符号
  final RegExp variableRegex = RegExp(r'[LWH D]');
  final matches = variableRegex.allMatches(formula);
  return matches.map((match) => match.group(0)!).toSet();
}

示例:若公式为(L * W * H) / 1000,该方法会提取出{'L', 'W', 'H'}。如果公式变量是长命名(如tank_length),需修改正则匹配对应模式。

3. 过滤并组合Widget

修改tankFormula函数,先过滤出公式关联的Widget,再拼接固定显示的字段:

List<Widget> tankFormula(String apiFormula) {
  // 提取公式中的变量
  final requiredVariables = _extractVariablesFromFormula(apiFormula);
  
  // 过滤出匹配的罐体规格Widget
  final filteredTankWidgets = _tankWidgetMap.entries
      .where((entry) => requiredVariables.contains(entry.key))
      .map((entry) => entry.value)
      .toList();
  
  // 固定显示的字段Widget(替换成你实际的对应Widget)
  final fixedWidgets = [
    ProductWidget(),
    TankCapacityWidget(),
    SensorOffsetWidget(),
  ];
  
  // 组合固定字段与过滤后的罐体Widget
  return [...fixedWidgets, ...filteredTankWidgets];
}

额外优化建议

  • 若公式变量存在大小写混合或特殊命名,可先对公式做预处理(如统一转小写),再调整映射键名和正则规则。
  • 如需按公式中变量出现的顺序排列Widget,可在提取变量时保留顺序,而非用Set去重。

内容的提问来源于stack exchange,提问作者Mackina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 13:26:00