Dart中Either类型调用flatMap报错:方法未定义求助
解决Either.flatMap()未定义的问题
1. 确保引入dartz依赖
Dart原生没有提供带flatMap方法的Either类型,你需要使用dartz包实现函数式编程的相关功能。在项目的pubspec.yaml中添加依赖:
dependencies: dartz: ^0.10.1 # 可替换为最新版本
执行flutter pub get(Flutter项目)或dart pub get完成依赖安装。
2. 修正导入语句
所有使用Either的文件,都需要导入dartz包:
import 'package:dartz/dartz.dart';
3. 修复flatMap的调用错误
你当前的flatMap用法存在问题:flatMap要求传入一个函数(参数为Right中的有效值,返回另一个Either),但你直接传入了validateStringNotEmpty(input)的执行结果(一个Either对象)。修改MovieObject的工厂方法代码:
class MovieObject extends ValueObject<String> { @override final Either<ValueFailure<String>, String> value; static const maxLength = 20; factory MovieObject(String input) { return MovieObject._( validateMaxStringLength(input, maxLength) .flatMap((validatedInput) => validateStringNotEmpty(validatedInput)), // 更简洁的写法:.flatMap(validateStringNotEmpty) ); } const MovieObject._(this.value); }
补充说明
- 若你自定义了
ValueObject基类,确保它使用的是dartz包中的Either类型,而非自己实现的无flatMap方法的Either。 flatMap的核心逻辑:如果当前Either是Right,则执行传入的验证函数并返回新的Either;如果是Left,则直接返回原错误值,实现链式验证的效果。
内容的提问来源于stack exchange,提问作者nidhin ninan
相关产品推荐
相关产品推荐

