Flutter中如何使用retrofit_generator插件

我在Flutter项目中尝试使用retrofit_generator插件来自动生成API请求代码,但遇到了一些问题。按照官方文档配置后,运行flutter pub run build_runner build时总是报错,提示无法生成代码文件。我的pubspec.yaml已经添加了retrofit和retrofit_generator依赖,也创建了对应的API接口抽象类。请问正确的配置步骤是什么?是否需要额外设置build.yaml文件?如果遇到生成失败的情况,应该如何排查具体原因?

2 回复

在Flutter中使用retrofit_generator插件,步骤如下:

  1. 添加依赖:在pubspec.yaml中添加:

    dependencies:
      retrofit: ^3.3.0
      dio: ^5.0.0
    dev_dependencies:
      retrofit_generator: ^7.0.0
      build_runner: ^2.0.0
    
  2. 创建API接口:定义抽象类并使用注解:

    import 'package:retrofit/retrofit.dart';
    import 'package:dio/dio.dart';
    
    part 'api_service.g.dart';
    
    [@RestApi](/user/RestApi)(baseUrl: "https://api.example.com/")
    abstract class ApiService {
      factory ApiService(Dio dio) = _ApiService;
      
      @GET("/users")
      Future<List<User>> getUsers();
    }
    
  3. 生成代码:运行命令生成实现类:

    flutter pub run build_runner build
    
  4. 使用生成的类

    final dio = Dio();
    final api = ApiService(dio);
    final users = await api.getUsers();
    

注意:每次修改接口后需重新运行build_runner命令。

更多关于Flutter中如何使用retrofit_generator插件的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中使用retrofit_generator插件可以简化HTTP API客户端的创建过程,它基于Dio库并自动生成API请求代码。以下是详细步骤:

1. 添加依赖

pubspec.yaml 文件中添加以下依赖:

dependencies:
  retrofit: ^4.0.1
  dio: ^5.0.0
  logger: ^1.0.0  # 可选,用于日志

dev_dependencies:
  retrofit_generator: ^4.0.1
  build_runner: ^2.0.0

2. 创建API接口

创建一个Dart文件(如 api_service.dart),使用注解定义API端点:

import 'package:retrofit/retrofit.dart';
import 'package:dio/dio.dart';

part 'api_service.g.dart';  // 生成的代码文件

@RestApi(baseUrl: "https://jsonplaceholder.typicode.com/")
abstract class ApiService {
  factory ApiService(Dio dio, {String baseUrl}) = _ApiService;

  @GET("/posts/{id}")
  Future<Post> getPost(@Path("id") int id);

  @POST("/posts")
  Future<Post> createPost(@Body() Post post);
}

// 数据模型类(示例)
class Post {
  final int id;
  final String title;
  final String body;

  Post({required this.id, required this.title, required this.body});

  factory Post.fromJson(Map<String, dynamic> json) {
    return Post(
      id: json['id'],
      title: json['title'],
      body: json['body'],
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'title': title,
      'body': body,
    };
  }
}

3. 生成代码

在终端运行以下命令生成代码:

flutter pub run build_runner build

如需自动监听文件变化并重新生成,使用:

flutter pub run build_runner watch

4. 使用生成的API客户端

在Flutter代码中初始化并使用:

import 'api_service.dart';

void fetchData() async {
  final dio = Dio();
  final api = ApiService(dio);

  try {
    final post = await api.getPost(1);
    print("标题: ${post.title}");
  } catch (e) {
    print("请求失败: $e");
  }
}

注意事项

  • 注解支持:支持 @GET@POST@PUT@DELETE 等HTTP方法,以及 @Path@Query@Body 等参数注解。
  • 错误处理:通过Dio的拦截器可统一处理错误和日志。
  • 模型序列化:可使用 json_annotation 包配合实现自动JSON转换。

通过以上步骤,即可高效地创建和管理HTTP请求,减少模板代码编写量。

回到顶部