Flutter网络请求插件ez_http的使用

Flutter网络请求插件ez_http的使用

Easy HTTP

Easy HTTP 是一个轻量级的 Flutter 包,它简化了 HTTP 请求,使您可以轻松执行 GET、POST、PUT 和 DELETE 操作。通过直观的 API,您可以立即开始进行网络请求,而无需任何复杂的设置。

特性

  • 🚀 简单直观的 HTTP 请求 API
  • 🔧 支持开箱即用的 GET、POST、PUT 和 DELETE 方法
  • 🎯 最小化的设置需求,即刻开始使用
  • 🔄 轻松处理 JSON 数据
  • 🛠 可自定义的头部和请求参数

开始使用

要使用此包,请在 pubspec.yaml 文件中添加 ez_http 作为依赖项:

dependencies:
  ez_http: ^1.0.8

然后运行 dart pub getflutter pub get 来安装该包。

使用方法

以下是一些快速示例,帮助您开始使用 Easy HTTP:

GET 请求
import 'package:ez_http/ez_http.dart';

void main() async {
  Map<String, dynamic> response = await EasyHttp.get<Map<String, dynamic>>(
    'https://api.example.com/users',
    responseBodyType: ResponseBodyType.json,
  );
  final response2 = await EasyHttp.get(
    'https://api.example.com/users2',
    responseBodyType: ResponseBodyType.json,
  );
  print(response.body);
}
POST 请求
import 'package:ez_http/ez_http.dart';

void main() async {
  Map<String, dynamic> response = await EasyHttp.post<Map<String, dynamic>>(
    'https://api.example.com/users',
    body: {'name': 'John Doe', 'email': 'john@example.com'},
    responseBodyType: ResponseBodyType.json,
    contentType: ContentType.json,
  );
  print(response.statusCode);
  print(response.body);
}
PUT 请求
import 'package:ez_http/ez_http.dart';

void main() async {
  Map<String, dynamic> response = await EasyHttp.put<Map<String, dynamic>>(
    'https://api.example.com/users/1',
    body: {'name': 'Jane Doe'},
    responseBodyType: ResponseBodyType.json,
    contentType: ContentType.json,
  );
  print(response.statusCode);
}
DELETE 请求
import 'package:ez_http/ez_http.dart';

void main() async {
  Map<String, dynamic> response = await EasyHttp.delete<Map<String, dynamic>>(
    'https://api.example.com/users/1',
  );
  print(response.statusCode);
}

完整示例

以下是完整的示例代码,展示了如何使用 ez_http 插件来实现不同的 HTTP 请求方法:

import 'package:flutter/material.dart';
import 'package:ez_http/ez_http.dart';
import 'dart:convert';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'EasyHttp 示例',
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  [@override](/user/override)
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  String _response = '尚未获取响应';

  Future<void> _fetchData(String method) async {
    const String url = 'https://httpbin.org/';
    const Map<String, dynamic> body = {'name': 'John Doe', 'age': 30};

    // 使用泛型类型并指定响应体类型
    final EasyHttpResponse<Map<String, dynamic>>? response =
        await _sendRequest(method, url, body);

    if (response != null) {
      setState(() {
        _response = '''
状态码: ${response.statusCode}
是否重定向: ${response.isRedirect}
响应体:
${_formatResponse(response.body)}''';
      });
    } else {
      setState(() {
        _response = '未能获取数据';
      });
    }
  }

  Future<EasyHttpResponse<Map<String, dynamic>>?> _sendRequest(
      String method, String url, Map<String, dynamic> body) async {
    switch (method) {
      case 'get':
        return await EasyHttp.get<Map<String, dynamic>>(
          '$url$method',
          responseBodyType: ResponseBodyType.json,
        );
      case 'post':
        return await EasyHttp.post<Map<String, dynamic>>(
          '$url$method',
          body: body,
          contentType: ContentType.json,
          responseBodyType: ResponseBodyType.json,
        );
      case 'put':
        return await EasyHttp.put<Map<String, dynamic>>(
          '$url$method',
          body: body,
          contentType: ContentType.json,
          responseBodyType: ResponseBodyType.json,
        );
      case 'delete':
        return await EasyHttp.delete<Map<String, dynamic>>(
          '$url$method',
          body: body,
          contentType: ContentType.json,
          responseBodyType: ResponseBodyType.json,
        );
      default:
        return null;
    }
  }

  String _formatResponse(dynamic responseBody) {
    try {
      if (responseBody is String) {
        final Map<String, dynamic> jsonResponse = json.decode(responseBody);
        return const JsonEncoder.withIndent('  ').convert(jsonResponse);
      } else if (responseBody is Map<String, dynamic>) {
        return const JsonEncoder.withIndent('  ').convert(responseBody);
      } else {
        return responseBody.toString();
      }
    } catch (e) {
      return responseBody.toString();
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('EasyHttp 示例'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                ElevatedButton(
                  onPressed: () => _fetchData('get'),
                  child: const Text('GET'),
                ),
                ElevatedButton(
                  onPressed: () => _fetchData('post'),
                  child: const Text('POST'),
                ),
                ElevatedButton(
                  onPressed: () => _fetchData('put'),
                  child: const Text('PUT'),
                ),
                ElevatedButton(
                  onPressed: () => _fetchData('delete'),
                  child: const Text('DELETE'),
                ),
              ],
            ),
            const SizedBox(height: 20),
            const Text('响应:'),
            const SizedBox(height: 10),
            Expanded(
              child: SingleChildScrollView(
                child: Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: Text(_response),
                ),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用ez_http插件进行网络请求的示例代码。ez_http是一个轻量级的HTTP请求库,它简化了Flutter中的网络请求操作。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  ez_http: ^latest_version  # 请替换为最新版本号

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

2. 配置和使用

初始化HTTP客户端

在你的项目中,创建一个HTTP客户端实例。通常,你会在应用的顶层(比如main.dart或者一个专门的网络服务类中)进行初始化。

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

void main() {
  // 初始化HTTP客户端
  EzHttpClient ezClient = EzHttpClient(
    baseUrl: 'https://api.example.com', // 你的API基础URL
    timeout: const Duration(seconds: 30), // 请求超时时间
  );

  runApp(MyApp(ezClient: ezClient));
}

class MyApp extends StatelessWidget {
  final EzHttpClient ezClient;

  MyApp({required this.ezClient});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(ezClient: ezClient),
    );
  }
}

发送GET请求

class HomeScreen extends StatefulWidget {
  final EzHttpClient ezClient;

  HomeScreen({required this.ezClient});

  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  String? responseData;

  @override
  void initState() {
    super.initState();
    _fetchData();
  }

  Future<void> _fetchData() async {
    try {
      final response = await widget.ezClient.get(
        path: '/endpoint', // 你的API端点
        params: {
          'param1': 'value1',
          'param2': 'value2',
        },
      );

      setState(() {
        responseData = response.data; // 假设返回的数据是JSON字符串
      });
    } catch (error) {
      print('Error fetching data: $error');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home Screen'),
      ),
      body: Center(
        child: Text(responseData ?? 'Loading...'),
      ),
    );
  }
}

发送POST请求

Future<void> _postData() async {
  try {
    final response = await widget.ezClient.post(
      path: '/endpoint', // 你的API端点
      data: {
        'key1': 'value1',
        'key2': 'value2',
      },
    );

    setState(() {
      responseData = response.data; // 假设返回的数据是JSON字符串
    });
  } catch (error) {
    print('Error posting data: $error');
  }
}

你可以在按钮点击事件中调用_postData()方法来发送POST请求:

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('Home Screen'),
    ),
    body: Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text(responseData ?? 'Loading...'),
          SizedBox(height: 20),
          ElevatedButton(
            onPressed: _postData,
            child: Text('Post Data'),
          ),
        ],
      ),
    ),
  );
}

3. 错误处理和响应解析

ez_http插件默认返回的是一个EzResponse对象,它包含了状态码、消息、数据等信息。你可以根据需要对这些信息进行进一步的处理和解析。

以上代码展示了如何在Flutter应用中使用ez_http插件进行基本的GET和POST请求。根据具体需求,你还可以进行更多自定义配置,比如添加请求头、处理复杂的响应数据等。

回到顶部