Dart Map值类型不匹配求助:Type无法赋值给IComposableOrderBy
Dart Map类型不匹配问题:Type无法赋值给IComposableOrderBy实例
你遇到的错误是因为你把类的类型(Type)直接赋值给了需要IComposableOrderBy实例的Map值位置。Dart里类名本身代表的是该类的Type对象,而非类的实例,两者类型不兼容,所以会触发类型错误。
解决方法
方案1:直接创建类实例赋值
修改Map定义,将类名替换为实例化表达式,确保每个value都是IComposableOrderBy的实现类实例:
final Map<SortOptions, IComposableOrderBy> _sortOptions = { SortOptions.byCreatedAt: SortByCreatedAt(), SortOptions.byEmptyFolder: SortByEmptyFirst() };
方案2:延迟创建实例(适合动态传参或懒加载场景)
如果你的排序策略需要动态传入参数(比如SortByCreatedAt需要指定升序/降序),或者希望延迟实例化,可以将Map的value类型改为返回IComposableOrderBy的函数:
final Map<SortOptions, IComposableOrderBy Function()> _sortOptions = { SortOptions.byCreatedAt: () => SortByCreatedAt(), SortOptions.byEmptyFolder: () => SortByEmptyFirst() };
使用时调用函数获取实例:
final selectedStrategy = _sortOptions[SortOptions.byCreatedAt]!(); print(selectedStrategy.sortBy());
额外优化建议
你当前SortByCreatedAt的sortBy方法里用了未定义的$sort占位符,可以给类添加构造函数传入OrderBy枚举完善逻辑:
class SortByCreatedAt implements IComposableOrderBy { final OrderBy order; SortByCreatedAt(this.order); @override String sortBy() => '{ order_by: {created_at: ${order.name} } }'; }
实例化时传入排序方向:SortByCreatedAt(OrderBy.desc)
内容的提问来源于stack exchange,提问作者Carlos Santos
相关产品推荐
相关产品推荐

