flutter retrofit如何实现网络请求

在Flutter中使用Retrofit进行网络请求时,应该如何正确配置和实现?我已经添加了retrofit和dio的依赖,也按照文档创建了API接口类并添加了@GET注解,但实际请求时总是返回404错误。请问:1)是否需要额外配置BaseUrl?2)路径参数和查询参数该如何正确拼接?3)如何处理网络请求的异常和超时?希望能提供一个完整的示例代码,包括请求和响应的模型类定义。

2 回复

使用Flutter Retrofit实现网络请求步骤:

  1. 添加依赖:retrofit、dio、json_annotation
  2. 创建数据模型类,使用json_annotation注解
  3. 定义API接口,使用@RestApi注解
  4. 使用@GET/@POST等注解声明接口方法
  5. 运行build_runner生成代码
  6. 使用生成的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实现网络请求,需要结合dioretrofit库。以下是详细步骤和示例代码:

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生成代码。

回到顶部