使用Retrofit发起Get请求遇类型不匹配错误,如何修复?
错误修复方案
错误type 'Future<dynamic>' is not a subtype of type 'Future<List<UserRequest>>?'的核心原因是RepoClass的getUsersData方法没有返回指定类型的结果,导致FutureBuilder接收的Future类型不匹配。
具体修复步骤:
- 修改
repo_class.dart中的getUsersData方法:- 明确声明返回类型为
Future<List<UserRequest>> - 添加
return语句返回获取到的用户数据
- 明确声明返回类型为
修改后的代码:
import 'package:dio/dio.dart'; import 'api_client.dart'; import 'model.dart'; class RepoClass { late APIClient mClient; RepoClass() { mClient = APIClient(Dio()); } // 明确返回类型,并返回用户数据 Future<List<UserRequest>> getUsersData() async { List<UserRequest> usersResponse = await mClient.getUsers(); print('repo_class is ${usersResponse}'); return usersResponse; } }
- 验证main.dart中的调用逻辑:
此时repoClass.getUsersData()会返回正确的Future<List<UserRequest>>,与FutureBuilder的泛型参数完全匹配,类型错误即可解决。
额外优化建议(可选):
- 不要在
_buildBody方法中每次创建新的RepoClass实例,建议将其作为类成员变量在initState中初始化,避免重复创建对象。
内容的提问来源于stack exchange,提问作者Texter
相关产品推荐
相关产品推荐

