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 get
或 flutter 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
更多关于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请求。根据具体需求,你还可以进行更多自定义配置,比如添加请求头、处理复杂的响应数据等。