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
相关产品推荐
相关产品推荐

