Flutter网络请求插件request的使用

Flutter网络请求插件request的使用

request 是对 http 包的 getpost 方法的一个最小抽象,当返回任何非200状态码时会自动抛出异常。

使用

首先,我们需要引入 request 包:

import 'package:request/request.dart' as http;

http 类似,request 暴露了 [get][post] 方法,这些方法直接包装了 http 的等效方法,并且在任何状态码不是 200 时抛出一个 [HttpStatusException] 异常。

GET 请求

final response = await http.get(uri);

POST 请求

final response = await http.post(uri);

此外,request 还暴露了 [request] 方法,该方法包装了 [get] 并将响应体作为 [String] 返回。与 [get][post] 类似,如果任何状态码不是 200,则会抛出异常。

final body = await http.request(uri);

Uri 扩展方法

[get], [post], 和 [request] 也可以作为 Dart 的 [Uri] 对象的扩展方法使用。

final url = Uri.parse('https://pub.dev/packages/request');
final body = await url.request();

HttpStatusException

抛出的 [HttpStatusException] 包含原始的 [response],并且有用于请求的 [url], [statusCode][message] 的 getter。

[message] 默认为 [response.reasonPhrase],如果为 null,则回退到由 W3C 定义的标准状态码短语。

完整示例 Demo

以下是一个完整的示例,展示了如何使用 request 包进行网络请求:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("Request Demo")),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              try {
                final uri = Uri.parse('https://jsonplaceholder.typicode.com/posts');
                final response = await http.get(uri);
                print('GET Response Status Code: ${response.statusCode}');
                print('GET Response Body: ${response.body}');
              } catch (e) {
                print('Error: $e');
              }
            },
            child: Text("Perform GET Request"),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


在 Flutter 中,http 是最常用的网络请求插件之一,而不是 requesthttp 插件提供了简单易用的 API 来进行 HTTP 请求。下面是如何使用 http 插件进行网络请求的基本步骤。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 http 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.3

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

2. 导入包

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

import 'package:http/http.dart' as http;

3. 发起 GET 请求

下面是一个简单的 GET 请求示例:

void fetchData() async {
  var url = Uri.parse('https://jsonplaceholder.typicode.com/posts/1');
  var response = await http.get(url);

  if (response.statusCode == 200) {
    print('Response data: ${response.body}');
  } else {
    print('Request failed with status: ${response.statusCode}.');
  }
}

4. 发起 POST 请求

下面是一个简单的 POST 请求示例:

void postData() async {
  var url = Uri.parse('https://jsonplaceholder.typicode.com/posts');
  var response = await http.post(url, body: {
    'title': 'foo',
    'body': 'bar',
    'userId': '1',
  });

  if (response.statusCode == 201) {
    print('Response data: ${response.body}');
  } else {
    print('Request failed with status: ${response.statusCode}.');
  }
}

5. 处理 JSON 数据

通常,服务器返回的数据是 JSON 格式的。你可以使用 dart:convert 包来解析 JSON 数据:

import 'dart:convert';

void fetchJsonData() async {
  var url = Uri.parse('https://jsonplaceholder.typicode.com/posts/1');
  var response = await http.get(url);

  if (response.statusCode == 200) {
    Map<String, dynamic> data = jsonDecode(response.body);
    print('Title: ${data['title']}');
  } else {
    print('Request failed with status: ${response.statusCode}.');
  }
}

6. 处理异常

在实际应用中,网络请求可能会失败,因此建议添加异常处理:

void fetchDataWithErrorHandling() async {
  try {
    var url = Uri.parse('https://jsonplaceholder.typicode.com/posts/1');
    var response = await http.get(url);

    if (response.statusCode == 200) {
      print('Response data: ${response.body}');
    } else {
      print('Request failed with status: ${response.statusCode}.');
    }
  } catch (e) {
    print('Request failed with error: $e');
  }
}
回到顶部