Flutter网络请求服务插件dio_api_services的使用
Flutter网络请求服务插件dio_api_services的使用
本项目是一个用于Dio的API服务的Flutter插件包。该插件包包含适用于Android和/或iOS的平台特定实现代码。
开始使用
要开始使用此插件,首先需要将其添加到你的pubspec.yaml
文件中:
dependencies:
dio_api_services: ^x.x.x
然后运行flutter pub get
以安装依赖项。
可用功能
以下是一些可用的功能及其状态:
功能 | 状态 |
---|---|
API Helper | ✔️ |
Logger | ✔️ |
Smart Retry | ✔️ |
更多示例
更多代码示例可以在example
文件夹中找到。
示例代码
以下是使用dio_api_services
插件的基本示例代码:
import 'package:dio_api_services/dio_api_services.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Dio API Services',
theme: ThemeData(
useMaterial3: false,
),
home: const HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
// 初始化DioApiService实例并设置基础URL
static DioApiService apiService = DioApiService(baseUrl: 'https://jsonplaceholder.typicode.com/');
// 定义一个方法来执行GET请求
Future<Response> methodGET() async {
var response = await apiService.call(
'users',
method: MethodRequest.GET,
);
return response;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Dio API Services'),
),
body: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
// 添加一个按钮,点击时调用methodGET方法
ElevatedButton(
onPressed: () async {
await methodGET();
},
child: const Text('启用'),
),
],
),
),
);
}
}
代码解释
-
导入必要的库
import 'package:dio_api_services/dio_api_services.dart'; import 'package:flutter/material.dart';
-
创建应用入口点
void main() { runApp(const MyApp()); }
-
定义应用主题和主页
class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Dio API Services', theme: ThemeData( useMaterial3: false, ), home: const HomeScreen(), ); } }
-
定义主页状态管理类
class HomeScreen extends StatefulWidget { const HomeScreen({super.key}); @override State<HomeScreen> createState() => _HomeScreenState(); }
-
定义主页状态类
class _HomeScreenState extends State<HomeScreen> { // 初始化DioApiService实例并设置基础URL static DioApiService apiService = DioApiService(baseUrl: 'https://jsonplaceholder.typicode.com/'); // 定义一个方法来执行GET请求 Future<Response> methodGET() async { var response = await apiService.call( 'users', method: MethodRequest.GET, ); return response; } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Dio API Services'), ), body: Center( child: Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: [ // 添加一个按钮,点击时调用methodGET方法 ElevatedButton( onPressed: () async { await methodGET(); }, child: const Text('启用'), ), ], ), ), ); } }
更多关于Flutter网络请求服务插件dio_api_services的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络请求服务插件dio_api_services的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
dio_api_services
是一个基于 Dio
的 Flutter 网络请求服务插件,它简化了网络请求的配置和管理。Dio
是一个非常强大的 Dart HTTP 客户端,支持拦截器、全局配置、FormData、文件上传下载等功能。dio_api_services
进一步封装了这些功能,使得开发者可以更加便捷地进行网络请求。
安装
首先,你需要在 pubspec.yaml
文件中添加 dio_api_services
依赖:
dependencies:
flutter:
sdk: flutter
dio_api_services: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
基本用法
1. 创建 ApiService
实例
import 'package:dio_api_services/dio_api_services.dart';
final apiService = ApiService(
baseUrl: 'https://jsonplaceholder.typicode.com',
interceptors: [
LogInterceptor(), // 添加日志拦截器
],
);
2. 发送 GET 请求
Future<void> fetchPosts() async {
try {
final response = await apiService.get('/posts');
print(response.data);
} catch (e) {
print('Error: $e');
}
}
3. 发送 POST 请求
Future<void> createPost() async {
try {
final response = await apiService.post(
'/posts',
data: {
'title': 'foo',
'body': 'bar',
'userId': 1,
},
);
print(response.data);
} catch (e) {
print('Error: $e');
}
}
4. 发送 PUT 请求
Future<void> updatePost() async {
try {
final response = await apiService.put(
'/posts/1',
data: {
'id': 1,
'title': 'foo',
'body': 'bar',
'userId': 1,
},
);
print(response.data);
} catch (e) {
print('Error: $e');
}
}
5. 发送 DELETE 请求
Future<void> deletePost() async {
try {
final response = await apiService.delete('/posts/1');
print(response.data);
} catch (e) {
print('Error: $e');
}
}
拦截器
Dio
支持拦截器,可以在请求发送前或响应返回后进行一些操作。dio_api_services
也支持添加拦截器。
final apiService = ApiService(
baseUrl: 'https://jsonplaceholder.typicode.com',
interceptors: [
InterceptorsWrapper(
onRequest: (options, handler) {
// 在请求发送前做一些处理
options.headers['Authorization'] = 'Bearer token';
return handler.next(options);
},
onResponse: (response, handler) {
// 在响应返回后做一些处理
return handler.next(response);
},
onError: (DioError e, handler) {
// 在请求出错时做一些处理
return handler.next(e);
},
),
LogInterceptor(), // 添加日志拦截器
],
);
文件上传
dio_api_services
也支持文件上传。
Future<void> uploadFile() async {
try {
final file = File('path/to/file');
final response = await apiService.post(
'/upload',
data: FormData.fromMap({
'file': await MultipartFile.fromFile(file.path, filename: 'upload.txt'),
}),
);
print(response.data);
} catch (e) {
print('Error: $e');
}
}
全局配置
你可以通过 ApiService
的构造函数来配置全局的 Dio
实例。
final apiService = ApiService(
baseUrl: 'https://jsonplaceholder.typicode.com',
connectTimeout: 5000, // 连接超时时间
receiveTimeout: 3000, // 接收超时时间
interceptors: [
LogInterceptor(), // 添加日志拦截器
],
);
错误处理
dio_api_services
默认会捕获 DioError
,你可以通过 try-catch
来处理错误。
Future<void> fetchPosts() async {
try {
final response = await apiService.get('/posts');
print(response.data);
} on DioError catch (e) {
if (e.response != null) {
print('Error status code: ${e.response!.statusCode}');
print('Error data: ${e.response!.data}');
} else {
print('Error: $e');
}
} catch (e) {
print('Error: $e');
}
}