flutter retrofit如何实现网络请求
在Flutter中使用Retrofit进行网络请求时,应该如何正确配置和实现?我已经添加了retrofit和dio的依赖,也按照文档创建了API接口类并添加了@GET注解,但实际请求时总是返回404错误。请问:1)是否需要额外配置BaseUrl?2)路径参数和查询参数该如何正确拼接?3)如何处理网络请求的异常和超时?希望能提供一个完整的示例代码,包括请求和响应的模型类定义。
2 回复
使用Flutter Retrofit实现网络请求步骤:
- 添加依赖:retrofit、dio、json_annotation
- 创建数据模型类,使用json_annotation注解
- 定义API接口,使用@RestApi注解
- 使用@GET/@POST等注解声明接口方法
- 运行build_runner生成代码
- 使用生成的API类发起请求
示例:
[@RestApi](/user/RestApi)(baseUrl: "https://api.example.com/")
abstract class ApiClient {
factory ApiClient(Dio dio) = _ApiClient;
[@GET](/user/GET)("/user")
Future<User> getUser();
}
更多关于flutter retrofit如何实现网络请求的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用Retrofit实现网络请求,需要结合dio和retrofit库。以下是详细步骤和示例代码:
1. 添加依赖
在pubspec.yaml中添加:
dependencies:
retrofit: ^5.0.0
dio: ^5.0.0
json_annotation: ^4.8.0
dev_dependencies:
retrofit_generator: ^5.0.0
build_runner: ^2.4.0
2. 创建数据模型
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
@JsonSerializable()
class User {
final int id;
final String name;
final String email;
User({required this.id, required this.name, required this.email});
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this);
}
3. 创建API接口
import 'package:retrofit/retrofit.dart';
import 'package:dio/dio.dart';
import 'user.dart';
part 'api_service.g.dart';
@RestApi(baseUrl: "https://jsonplaceholder.typicode.com/")
abstract class ApiService {
factory ApiService(Dio dio, {String baseUrl}) = _ApiService;
@GET("/users/{id}")
Future<User> getUser(@Path("id") int id);
@POST("/users")
Future<User> createUser(@Body() User user);
}
4. 生成代码
运行命令生成.g.dart文件:
flutter pub run build_runner build
5. 使用API服务
void fetchUser() async {
final dio = Dio();
final apiService = ApiService(dio);
try {
final user = await apiService.getUser(1);
print(user.name);
} catch (e) {
print("Error: $e");
}
}
主要特性:
- 注解驱动:使用
@GET、@POST等注解定义接口 - 路径参数:
@Path注解替换URL路径参数 - 请求体:
@Body注解传递请求体数据 - 查询参数:
@Query添加URL查询参数 - 自动序列化:配合json_annotation自动转换JSON
常用注解:
@Headers:添加请求头@FormUrlEncoded:表单编码@Multipart:文件上传
记得每次修改接口定义后重新运行build_runner生成代码。

