Flutter中如何获取Future<Either<Error, List<dynamic>>>的Right值?
直接用Future获取Either的Right值方案
嘿,这事儿其实挺简单的!你只需要先通过await拿到Future的最终结果(也就是那个Either对象),然后处理它的左右分支就行。下面给你两种常用的实现方式,你可以根据自己的习惯选:
方式一:用fold函数(推荐,函数式风格)
这是处理Either最标准的方式,能同时覆盖成功(Right)和失败(Left)两种情况,避免遗漏错误处理:
void fetchAndProcessData(String url) async { // 先await拿到Future的结果 final eitherResult = await _getResult(url); // 用fold分别处理错误和成功数据 eitherResult.fold( // Left分支:处理ResponseError错误 (responseError) { print('请求失败了:${responseError.toString()}'); // 这里可以加错误提示弹窗、日志上报等逻辑 }, // Right分支:拿到你要的List<dynamic> (dataList) { print('成功获取数据:$dataList'); // 在这里对dataList做你需要的任何操作,比如转模型、遍历处理等 processYourData(dataList); }, ); } // 示例:后续处理数据的方法 void processYourData(List<dynamic> data) { // 你的业务逻辑写在这里 }
方式二:命令式判断(更直观)
如果你习惯传统的条件判断写法,也可以直接检查Either的类型来提取值:
void fetchAndProcessData(String url) async { final eitherResult = await _getResult(url); // 先判断是不是Right分支 if (eitherResult.isRight) { // 注意:不同Either库的判断方法可能略有不同,比如dartz用`eitherResult is Right` // 提取Right里的List<dynamic> final dataList = eitherResult.right; // 部分库是用`eitherResult.value`,比如dartz的Right对象 // 处理数据 processYourData(dataList); } else { // 处理Left分支的错误 final error = eitherResult.left; print('请求出错:$error'); } }
小提醒
不同的Either实现(比如常用的dartz包)的API细节可能有点不一样,比如dartz的Either需要用is Right来判断类型,然后通过(eitherResult as Right).value获取值。你可以根据自己项目里用的Either库调整代码,但核心逻辑都是先await拿到结果,再处理左右分支~
内容的提问来源于stack exchange,提问作者mikezang
相关产品推荐
相关产品推荐

