Flutter网络请求插件n_request的使用

Flutter网络请求插件n_request的使用

n_request 是一个用于 HTTP 请求的简单辅助项目。通过该插件,您可以执行各种类型的网络请求,并具备多种功能来满足不同的需求。

使用场景

  • 发起 GET、POST、PUT、DELETE 请求
  • 自定义请求类型
  • 上传多部分文件
  • 更改请求头
  • 支持单个或多个 WebSocket 连接,包括自动重连和错误控制
  • 从 HTTPS 或 HTTP 下载任何文件

示例代码

以下是一个完整的示例代码,展示了如何使用 n_request 插件进行网络请求:

import 'package:n_request/n_request.dart';
import 'dart:io';

void main() async {
  // 创建一个 NRequest 实例
  final nRequest = NRequest(
    "http://example.com/post/",
    body: {"type": 1},
    files: [MultipartFile.fromFileSync("path/to/your/file.txt")],
  );

  // 发送 POST 请求
  await nRequest.post((response) {
    if (response.isValid) {
      response.printStatus(); // 打印响应状态
    }
  });

  // 发送 GET 请求
  await NRequest("http://example.com/get/")
      .get((response) {
        if (response.isValid) {
          response.printStatus(); // 打印响应状态
        }
      });

  // 发送 PUT 请求
  await NRequest("http://example.com/put/")
      .put((response) {
        if (response.isValid) {
          response.printStatus(); // 打印响应状态
        }
      });

  // 发送 DELETE 请求
  await NRequest("http://example.com/delete/")
      .delete((response) {
        if (response.isValid) {
          response.printStatus(); // 打印响应状态
        }
      });

  // 下载文件
  await NRequest("http://example.com/download/")
      .download((data) {
        // 处理下载的数据
      });
}

class MultipartFile {
  static MultipartFile fromFileSync(String path) {
    // 模拟文件上传
    return MultipartFile();
  }
}

方法说明

下载文件

await NRequest("url").download((Uint8List? data) {});

发送 GET 请求

await NRequest("url").get((ResponseData response) {});

发送 POST 请求

await NRequest("url").post((ResponseData response) {});

发送 PUT 请求

await NRequest("url").put((ResponseData response) {});

发送 DELETE 请求

await NRequest("url").delete((ResponseData response) {});

自定义请求类型

await NRequest("url").type(type: RequestType.post).then((ResponseData response) {});

Setters 说明

设置 URL

url: String // 必须的字符串

设置请求头

headers: Map<String, String>? 

设置 token

token: Map<String, String>? 

设置请求体

body: Map<String, dynamic>

设置上传文件列表

files: List<MultipartFile>

设置超时时间

timeout: Duration

设置打印选项

printUrl: bool
printHeader: bool
printBody: bool
printResponse: bool

设置请求开始和结束回调

onStart: Function()
onFinish: Function()

ResponseData 属性

获取响应数据

url: String
type: RequestType
status: StatusData
body: dynamic

/// 在调试模式下打印一条彩色消息
printStatus()

StatusData 属性

获取状态数据

type: StatusType
code: int
isValid: bool
description: String

/// 获取状态数据消息
getMessage(): String

WebSocket 说明

WebSocket 数据和控制器

NSocketData? socketData;
NSocketController? socketController;

socketData = SocketData(
    name      : "Clients socket",
    url       : "ws url",
    function  : (message) => smsFunction(message)
);

// 监听连接状态变化
socketData?.addListener(() => setState(() {}));

socketData?.hasChannelConnection : bool
socketData?.hasSocketConnection : bool

// 支持单个或多个 WebSocket 连接
socketController = NSocketController.single(socket: socketData);
socketController = NSocketController.group(sockets: [socketData1, socketData2, ...]);

// 开始监听,包括自动重连
socketController?.listen();

// 释放控制器
[@override](/user/override)
void dispose() {
  super.dispose();
  socketData = null;
  socketData?.dispose();
  socketController = null;
  socketController?.closeAll();
}

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

1 回复

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


n_request 是一个用于 Flutter 的网络请求插件,它简化了网络请求的流程,提供了更加便捷的 API 来进行 HTTP 请求。以下是如何使用 n_request 插件的基本步骤:

1. 添加依赖

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

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

然后运行 flutter pub get 来获取依赖。

2. 导入包

在你的 Dart 文件中导入 n_request 包:

import 'package:n_request/n_request.dart';

3. 发起网络请求

n_request 提供了简单易用的 API 来发起 GET、POST 等请求。以下是一些基本的用法示例:

GET 请求

void fetchData() async {
  var response = await NRequest.get('https://jsonplaceholder.typicode.com/posts');
  if (response.statusCode == 200) {
    print('Response data: ${response.body}');
  } else {
    print('Request failed with status: ${response.statusCode}');
  }
}

POST 请求

void postData() async {
  var response = await NRequest.post(
    'https://jsonplaceholder.typicode.com/posts',
    body: {
      'title': 'foo',
      'body': 'bar',
      'userId': 1,
    },
  );
  if (response.statusCode == 201) {
    print('Response data: ${response.body}');
  } else {
    print('Request failed with status: ${response.statusCode}');
  }
}

设置请求头

void fetchDataWithHeaders() async {
  var response = await NRequest.get(
    'https://jsonplaceholder.typicode.com/posts',
    headers: {
      'Authorization': 'Bearer your_token_here',
    },
  );
  if (response.statusCode == 200) {
    print('Response data: ${response.body}');
  } else {
    print('Request failed with status: ${response.statusCode}');
  }
}

处理 JSON 数据

n_request 也支持直接解析 JSON 数据:

void fetchJsonData() async {
  var response = await NRequest.get('https://jsonplaceholder.typicode.com/posts');
  if (response.statusCode == 200) {
    var jsonData = response.json();  // 直接解析为 JSON
    print('First post title: ${jsonData[0]['title']}');
  } else {
    print('Request failed with status: ${response.statusCode}');
  }
}

4. 错误处理

你可以使用 try-catch 块来捕获和处理网络请求中的错误:

void fetchDataWithErrorHandling() async {
  try {
    var response = await NRequest.get('https://jsonplaceholder.typicode.com/posts');
    if (response.statusCode == 200) {
      print('Response data: ${response.body}');
    } else {
      print('Request failed with status: ${response.statusCode}');
    }
  } catch (e) {
    print('An error occurred: $e');
  }
}
回到顶部