Flutter网络请求插件cc_rest_api的使用

Flutter网络请求插件cc_rest_api的使用

CC Rest Api 是一个用于与 REST API 进行通信的 Dart 包。它允许发送和接收 HTTP 请求,并提供了可配置选项。其主要开发目的之一是从方法转向类结构,以消除代码复杂性。

注意: 目前支持 GETPOSTDELETE 操作。

初始化

首先,你需要用 REST API 配置和请求/响应日志选项初始化 CC Rest Api。以下是一个初始化示例:

import 'package:cc_rest_api/cc_rest_api.dart';

void main() {
  CCRestApi.init(
    restOptions: CCRestOptions(
      baseUrl: "httpbin.org",
      defaultHeaders: {
        "Access-Control-Allow-Origin": "*",
        "Accept": "*",
        "Content-Type": "application/json",
      },
    ),
    loggingOptions: CCRestLogging(
      logEnabled: true,
      onRequest: (handler) => print("Request: $handler"),
      onResponse: (handler) => print("Response: $handler"),
      onError: (handler) => print("Error: $handler"),
    ),
    modules: [
      GetUser(const CCApiConfig("user/get", RequestType.GET, NetworkType.HTTPS)),
      // 其他模块可以在这里添加
    ],
  );
}

注意: 此文档使用了详细的说明,不是所有参数都是必需的。

模块和使用

创建模块

你可以创建模块来表示每个 API 操作。这些模块处理请求配置和响应处理。

class GetUser extends CCApiModule {
  GetUser(CCApiConfig config) : super(config);

  @override
  Future<Map<String, dynamic>> request() async {
    return await super.request();
  }

  @override
  response(dynamic data) {
    // 处理接收到的数据的逻辑可以放在这里
  }
}

或者

class GetUser extends CCApiModule {
  GetUser(CCApiConfig config) : super(config);

  @override
  response(dynamic data) {
    // 处理接收到的数据的逻辑可以放在这里
  }
}

注意: 覆盖请求方法不是必须的。如果你想要自定义它可以覆盖。

使用模块

你可以轻松地使用你创建的模块来发起 API 请求:

import 'package:cc_rest_api/cc_rest_api.dart';

void main() {
  GetUser getUser = CCRestApi.getModule<GetUser>();
  getUser.setHeaders({
    "Authorization": "Bearer your_access_token",
  });
  getUser.setParameters({
    "param1": "value1",
    "param2": "value2",
  });
  getUser.setBody({
    "firebaseToken": "testFT",
    "user_id": "test",
  });

  getUser.request(); // 它触发请求。它可以返回响应值。
}

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

1 回复

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


cc_rest_api 是一个用于 Flutter 的网络请求插件,它简化了与 RESTful API 的交互。使用这个插件,你可以轻松地发送 HTTP 请求并处理响应。以下是使用 cc_rest_api 插件的步骤和示例代码。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 cc_rest_api 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  cc_rest_api: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 导入插件

在需要使用 cc_rest_api 的 Dart 文件中导入插件。

import 'package:cc_rest_api/cc_rest_api.dart';

3. 初始化 API 客户端

你可以通过 RestApiClient 类来初始化 API 客户端。可以配置一些全局的选项,比如 base URL、超时时间等。

final client = RestApiClient(
  baseUrl: 'https://jsonplaceholder.typicode.com',
  timeout: Duration(seconds: 10),
);

4. 发送请求

使用 client 对象来发送 HTTP 请求。以下是一些常见的请求示例:

GET 请求

Future<void> fetchData() async {
  try {
    final response = await client.get('/posts');
    print('Response: ${response.body}');
  } catch (e) {
    print('Error: $e');
  }
}

POST 请求

Future<void> postData() async {
  try {
    final response = await client.post(
      '/posts',
      body: {
        'title': 'foo',
        'body': 'bar',
        'userId': 1,
      },
    );
    print('Response: ${response.body}');
  } catch (e) {
    print('Error: $e');
  }
}

PUT 请求

Future<void> updateData() async {
  try {
    final response = await client.put(
      '/posts/1',
      body: {
        'id': 1,
        'title': 'foo',
        'body': 'bar',
        'userId': 1,
      },
    );
    print('Response: ${response.body}');
  } catch (e) {
    print('Error: $e');
  }
}

DELETE 请求

Future<void> deleteData() async {
  try {
    final response = await client.delete('/posts/1');
    print('Response: ${response.body}');
  } catch (e) {
    print('Error: $e');
  }
}

5. 处理响应

cc_rest_api 返回的响应是一个 Response 对象,你可以通过 response.body 获取响应的主体内容。如果请求成功,response.statusCode 通常是 200。

6. 错误处理

如果在请求过程中发生错误,cc_rest_api 会抛出异常。你可以使用 try-catch 块来捕获并处理这些错误。

7. 高级配置

你可以在初始化 RestApiClient 时配置更多的选项,比如 headers、interceptors 等。

final client = RestApiClient(
  baseUrl: 'https://jsonplaceholder.typicode.com',
  headers: {
    'Authorization': 'Bearer your_token',
  },
  interceptors: [
    (request) {
      print('Request: ${request.method} ${request.url}');
      return request;
    },
    (response) {
      print('Response: ${response.statusCode} ${response.body}');
      return response;
    },
  ],
);

8. 使用示例

以下是一个完整的示例,展示了如何使用 cc_rest_api 发送 GET 请求并处理响应。

import 'package:flutter/material.dart';
import 'package:cc_rest_api/cc_rest_api.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  [@override](/user/override)
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final client = RestApiClient(
    baseUrl: 'https://jsonplaceholder.typicode.com',
  );

  String _data = '';

  Future<void> fetchData() async {
    try {
      final response = await client.get('/posts/1');
      setState(() {
        _data = response.body.toString();
      });
    } catch (e) {
      setState(() {
        _data = 'Error: $e';
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('cc_rest_api Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: fetchData,
              child: Text('Fetch Data'),
            ),
            SizedBox(height: 20),
            Text(_data),
          ],
        ),
      ),
    );
  }
}
回到顶部