如何在Flutter中使用Retrofit实现Java后端用户保存接口调用?
在Flutter中使用Retrofit调用用户保存接口的实现步骤
1. 添加依赖
在项目的pubspec.yaml中引入所需依赖及代码生成工具:
dependencies: flutter: sdk: flutter retrofit: ^4.0.1 # 可替换为最新稳定版本 dio: ^5.3.2 json_annotation: ^4.8.1 dev_dependencies: flutter_test: sdk: flutter retrofit_generator: ^8.0.4 build_runner: ^2.4.4 json_serializable: ^6.7.0
2. 定义User实体类
对应后端的User实体,通过json_serializable实现序列化/反序列化:
import 'package:json_annotation/json_annotation.dart'; part 'user.g.dart'; @JsonSerializable() class User { // 字段需与后端User类完全匹配,示例字段如下 final String? userId; final String username; final String email; // 按需添加其他字段,如password、createTime等 User({this.userId, required this.username, required this.email}); factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json); Map<String, dynamic> toJson() => _$UserToJson(this); }
3. 编写Retrofit API接口
定义与后端/save接口对应的POST请求方法:
import 'package:retrofit/retrofit.dart'; import 'package:dio/dio.dart'; import 'user.dart'; part 'user_api.g.dart'; @RestApi(baseUrl: "http://你的后端服务地址/") // 替换为实际后端域名/IP abstract class UserApi { factory UserApi(Dio dio, {String baseUrl}) = _$UserApi; @POST("/save") Future<String> saveUser(@Body() User user); // 若需直接解析为DateTime,可改为Future<DateTime>,需确保Dio能正确解析后端返回的Timestamp格式 }
4. 生成自动代码
在终端执行以下命令,生成序列化及Retrofit代理代码:
flutter pub run build_runner build
5. 调用接口保存用户
在业务逻辑中实例化Dio与UserApi,发起请求:
import 'package:dio/dio.dart'; import 'user_api.dart'; import 'user.dart'; void submitUser() async { final dio = Dio(); final userApi = UserApi(dio); try { // 构造要提交的用户对象 final newUser = User(username: "zhangsan", email: "zhangsan@example.com"); // 调用保存接口 String saveTime = await userApi.saveUser(newUser); print("用户保存成功,返回时间戳:$saveTime"); } catch (e) { print("保存失败:$e"); // 可在此处理网络错误、后端异常等情况 } }
注意事项
- 确保后端服务地址可被Flutter应用访问(真机调试时需用后端局域网IP,而非localhost)
- 若后端返回的Timestamp格式特殊,可通过自定义Dio转换器实现DateTime的自动解析
- 建议添加Dio拦截器统一处理请求头、响应码等逻辑
内容的提问来源于stack exchange,提问作者ASMA
相关产品推荐
相关产品推荐

