Flutter网络请求注解插件retrofit_method_annotation的使用

Flutter网络请求注解插件retrofit_method_annotation的使用

在本教程中,我们将学习如何使用retrofit_method_annotation插件来简化Flutter中的网络请求。retrofit_method_annotation插件可以帮助我们更方便地定义和处理HTTP请求。

示例代码

以下是一个完整的示例,展示了如何使用retrofit_method_annotation插件来创建一个简单的网络请求。

// example/retrofit_method_annotation_example.dart

import 'package:flutter/material.dart';
import 'package:retrofit_method_annotation/retrofit_method_annotation.dart';
import 'package:http/http.dart' as http;

// 定义API接口
[@RestApi](/user/RestApi)(baseUrl: "https://jsonplaceholder.typicode.com")
abstract class ClientService {
  factory ClientService(http.Client client) = _ClientService;

  // 定义GET请求
  @GET("/todos/{id}")
  Future<Todo> getTodo(@Path("id") int id);

  // 定义POST请求
  @POST("/todos")
  Future<Todo> createTodo(@Body() Todo todo);
}

// 定义数据模型
class Todo {
  final int userId;
  final int id;
  final String title;
  final bool completed;

  Todo({this.userId, this.id, this.title, this.completed});

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

  Map<String, dynamic> toJson() => {
        'userId': userId,
        'id': id,
        'title': title,
        'completed': completed,
      };
}

void main() async {
  final client = http.Client();
  final service = ClientService(client);

  // 测试GET请求
  final todo = await service.getTodo(1);
  print(todo.title);

  // 测试POST请求
  final newTodo = Todo(userId: 1, title: "New Todo", completed: false);
  final createdTodo = await service.createTodo(newTodo);
  print(createdTodo.title);
}

代码解释

  1. 导入必要的库:

    import 'package:flutter/material.dart';
    import 'package:retrofit_method_annotation/retrofit_method_annotation.dart';
    import 'package:http/http.dart' as http;
    
  2. 定义API接口:

    [@RestApi](/user/RestApi)(baseUrl: "https://jsonplaceholder.typicode.com")
    abstract class ClientService {
      factory ClientService(http.Client client) = _ClientService;
    
      @GET("/todos/{id}")
      Future<Todo> getTodo(@Path("id") int id);
    
      @POST("/todos")
      Future<Todo> createTodo(@Body() Todo todo);
    }
    

    使用[@RestApi](/user/RestApi)注解定义了API的基本URL。@GET@POST注解分别用于定义GET和POST请求。@Path@Body注解用于指定路径参数和请求体。

  3. 定义数据模型:

    class Todo {
      final int userId;
      final int id;
      final String title;
      final bool completed;
    
      Todo({this.userId, this.id, this.title, this.completed});
    
      factory Todo.fromJson(Map<String, dynamic> json) {
        return Todo(
          userId: json['userId'],
          id: json['id'],
          title: json['title'],
          completed: json['completed'],
        );
      }
    
      Map<String, dynamic> toJson() => {
            'userId': userId,
            'id': id,
            'title': title,
            'completed': completed,
          };
    }
    

    定义了一个Todo类,用于表示从服务器获取的数据模型。

  4. 测试网络请求:

    void main() async {
      final client = http.Client();
      final service = ClientService(client);
    
      // 测试GET请求
      final todo = await service.getTodo(1);
      print(todo.title);
    
      // 测试POST请求
      final newTodo = Todo(userId: 1, title: "New Todo", completed: false);
      final createdTodo = await service.createTodo(newTodo);
      print(createdTodo.title);
    }
    

更多关于Flutter网络请求注解插件retrofit_method_annotation的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网络请求注解插件retrofit_method_annotation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


retrofit_method_annotation 是一个用于 Flutter 的注解库,它可以帮助你简化网络请求的代码,类似于 Android 中的 Retrofit。通过使用注解,你可以更简洁地定义网络请求接口,而不需要手动编写大量的网络请求代码。

以下是如何使用 retrofit_method_annotation 的步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  retrofit: ^2.0.0
  retrofit_method_annotation: ^1.0.0

dev_dependencies:
  build_runner: ^2.1.0
  retrofit_generator: ^2.0.0

2. 创建 API 接口

接下来,你可以创建一个接口,并使用注解来定义网络请求方法。例如:

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

part 'api_service.g.dart'; // 自动生成的文件

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

  @GET("/posts")
  Future<List<Post>> getPosts();

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

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

3. 生成代码

在定义好接口之后,你需要使用 build_runner 来生成代码。在终端中运行以下命令:

flutter pub run build_runner build

这将会生成一个 api_service.g.dart 文件,其中包含了 ApiService 的具体实现。

4. 使用生成的 API 服务

现在,你可以使用生成的 ApiService 来进行网络请求。例如:

import 'dart:async';
import 'package:dio/dio.dart';
import 'api_service.dart';

void main() async {
  final dio = Dio();
  final apiService = ApiService(dio);

  try {
    final posts = await apiService.getPosts();
    print(posts);

    final post = await apiService.getPost(1);
    print(post);

    final newPost = await apiService.createPost(Post(userId: 1, id: 101, title: 'New Post', body: 'This is a new post'));
    print(newPost);
  } catch (e) {
    print(e);
  }
}

5. 定义数据模型

你还需要定义 Post 数据模型类。例如:

class Post {
  final int userId;
  final int id;
  final String title;
  final String body;

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

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

  Map<String, dynamic> toJson() {
    return {
      'userId': userId,
      'id': id,
      'title': title,
      'body': body,
    };
  }
}
回到顶部