Dart编译报错:编译器识别出两个不同的UnitType类型
编译错误:编译器识别出两个不同的UnitType类型?
错误信息
编译时触发如下错误:
UnitType/<em>1</em>/来自package:yummy/utils/Constants.dart(lib/utils/Constants.dart)。
package:yummy/utils/constants.dart:1UnitType/<em>2</em>/来自package:yummy/utils/constants.dart(lib/utils/constants.dart)。
package:yummy/utils/constants.dart:1unitType: UnitType.volume,
涉及文件:unit_specs.dart 和 constants.dart
涉及代码
unit_specs.dart
import '../utils/constants.dart'; class UnitSpecs { final String shortcut; final UnitType unitType; const UnitSpecs({ required this.shortcut, required this.unitType, }); }
constants.dart
import 'package:flutter/material.dart' as mat; import '../models/unit_specs.dart'; enum UnitType { weight, volume, amount, } enum Unit { quantity, gram, kilogram, milliliter, liter, } const unitSpecsMap = { Unit.quantity: UnitSpecs( shortcut: 'x', unitType: UnitType.amount, ), Unit.gram: UnitSpecs( shortcut: 'g', unitType: UnitType.weight, ), Unit.kilogram: UnitSpecs( shortcut: 'kg', unitType: UnitType.weight, ), Unit.milliliter: UnitSpecs( shortcut: 'ml', unitType: UnitType.volume, ), Unit.liter: UnitSpecs( shortcut: 'l', unitType: UnitType.volume, ), }; class Constants{ static const mat.TextStyle ... }
问题原因
这是循环导入+路径大小写不匹配共同导致的:
- 循环依赖:
constants.dart导入了unit_specs.dart,而unit_specs.dart又导入了constants.dart,形成闭环。 - 大小写敏感冲突:Dart编译器对文件路径大小写严格区分,错误信息中同时出现了
Constants.dart(首字母大写)和constants.dart(全小写)的导入路径,这会被编译器判定为两个不同的文件,进而导致UnitType枚举被重复加载,被识别为两种不同类型。
解决方案
方案1:统一导入路径大小写
检查所有文件中导入constants.dart的代码,确保路径大小写和实际文件名完全一致。比如实际文件名为constants.dart,所有导入都要写成import '../utils/constants.dart';,杜绝Constants.dart这类大小写不一致的写法。
方案2:拆分循环依赖(更彻底)
将UnitType和Unit枚举单独抽离到新文件,避免两个核心文件互相导入:
- 新建
lib/utils/unit_types.dart:
enum UnitType { weight, volume, amount, } enum Unit { quantity, gram, kilogram, milliliter, liter, }
- 修改
unit_specs.dart的导入:
import '../utils/unit_types.dart'; class UnitSpecs { final String shortcut; final UnitType unitType; const UnitSpecs({ required this.shortcut, required this.unitType, }); }
- 修改
constants.dart的导入:
import 'package:flutter/material.dart' as mat; import '../models/unit_specs.dart'; import '../utils/unit_types.dart'; const unitSpecsMap = { Unit.quantity: UnitSpecs( shortcut: 'x', unitType: UnitType.amount, ), // 其余代码保持不变 }; class Constants{ static const mat.TextStyle ... }
内容的提问来源于stack exchange,提问作者Adrian H.
相关产品推荐
相关产品推荐

