Bloc模式下ScanStreamTransformer初始化Future泛型<运算符报错求助
错误原因
- 语法解析错误:
Future<Trailers>{}的写法不符合Dart语法规则,编译器会将该语句识别为嵌套比较表达式:将Future和Trailers两个Type类型对象做<比较,再将结果和{}做>比较,因此触发两个报错 - 写法误用:你误将类实例构造的写法和Map/普通对象声明的
{}写法混用,Future类的泛型实例不能通过Future<泛型>{}的方式声明
修复方案
将报错行的Future<Trailers>{}替换为合法的Future<Trailers>类型初始值即可,可根据业务需求选择对应写法:
- 占位初始值为已完成的空Future:
Future<Trailers>.value(null),
- 占位初始值为携带默认Trailers实例的已完成Future:
Future<Trailers>.value(/* 你的默认Trailers实例,比如Trailers.empty() */),
- 占位初始值为未完成的空Future:
Completer<Trailers>().future,
修复后完整代码片段
_itemTransformer() { return ScanStreamTransformer<int, Future<Trailers>>((trailer, int id, index) { debugPrint(index.toString()); trailer = _repository.fetchTrailers(id); debugPrint(trailer.toString()); return trailer; }, // 这里以已完成的空Future为例,可替换为你需要的初始值写法 Future<Trailers>.value(null), ); }
内容的提问来源于stack exchange,提问作者androloper
相关产品推荐
相关产品推荐

