Flutter网络请求与缓存插件http_hive_cache的使用
Flutter网络请求与缓存插件http_hive_cache的使用
特性
支持三种模式:无缓存、响应头、客户端指定。
使用
http_hive_cache
插件可以用于在 HTTP GET 请求期间缓存响应。使用方式非常简单,只需调用 HttpHiveCache.get()
方法即可。
final response = await HttpHiveCache.get(
Uri.parse(url),
);
完整示例
以下是一个完整的示例,展示了如何使用 http_hive_cache
插件进行网络请求并处理响应。
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:http_hive_cache/http_hive_cache.dart';
Future<void> main() async {
// 初始化 http_hive_cache
await HttpHiveCache.init();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
useMaterial3: true,
brightness: Brightness.light,
colorSchemeSeed: Colors.blue,
),
darkTheme: ThemeData(
useMaterial3: true,
brightness: Brightness.dark,
colorSchemeSeed: Colors.blue,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends HookWidget {
const MyHomePage({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
// 创建一个文本控制器
final urlController = useTextEditingController();
// 用于存储结果
final result = useState('no response');
return Scaffold(
appBar: AppBar(
title: const Text('HttpHiveCache 示例'),
),
body: SingleChildScrollView(
padding: const EdgeInsets.all(16),
child: SizedBox(
width: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// 输入框用于输入 URL
ConstrainedBox(
constraints: const BoxConstraints(
maxWidth: 600,
),
child: TextField(
controller: urlController,
keyboardType: TextInputType.url,
textInputAction: TextInputAction.done,
decoration: const InputDecoration(
hintText: 'URL',
border: OutlineInputBorder(),
),
),
),
const SizedBox(
height: 16,
),
// 搜索按钮
TextButton(
onPressed: () async {
final url = urlController.text;
// 发起 HTTP GET 请求,并获取响应
final response = await HttpHiveCache.get(
Uri.parse(url),
);
// 解析 JSON 响应
final body = json.decode(response.body) as Map;
result.value = body.toString();
},
child: const Text('搜索'),
),
const SizedBox(
height: 16,
),
// 显示搜索结果
Text('结果: ${result.value}'),
],
),
),
),
);
}
}
更多关于Flutter网络请求与缓存插件http_hive_cache的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络请求与缓存插件http_hive_cache的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中进行网络请求并实现缓存功能,可以使用http_hive_cache
插件。这个插件结合了http
包进行网络请求和hive
数据库进行缓存管理。以下是一个使用http_hive_cache
进行网络请求并缓存数据的示例代码。
首先,确保在你的pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
http: ^0.13.3 # 确保版本与http_hive_cache兼容
hive: ^2.0.4 # 确保版本与http_hive_cache兼容
hive_flutter: ^1.1.0 # 如果需要在Flutter中使用Hive
http_hive_cache: ^0.3.0 # 假设这是当前的最新版本,请检查pub.dev获取最新信息
然后,运行flutter pub get
来安装这些依赖。
接下来,在你的Flutter项目中,你可以按照以下步骤使用http_hive_cache
:
- 初始化Hive:在应用启动时初始化Hive数据库。
import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:http_hive_cache/http_hive_cache.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化Hive
await Hive.initFlutter();
// 注册一个盒子(box)用于缓存
await Hive.openBox('cacheBox');
runApp(MyApp());
}
- 创建HttpClient:使用
HttpHiveCache
创建一个带有缓存功能的HTTP客户端。
import 'package:http/http.dart' as http;
import 'package:http_hive_cache/http_hive_cache.dart';
class MyApp extends StatelessWidget {
final HttpHiveCache _httpClient = HttpHiveCache(
client: http.Client(),
cacheBoxName: 'cacheBox',
maxAge: const Duration(hours: 1), // 设置缓存的最大年龄
);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Http Hive Cache Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
// 执行网络请求
final response = await _httpClient.get(Uri.parse('https://api.example.com/data'));
if (response.statusCode == 200) {
print('Data fetched from network or cache: ${response.body}');
} else {
print('Failed to fetch data: ${response.statusCode}');
}
},
child: Text('Fetch Data'),
),
),
),
);
}
}
在这个示例中,我们创建了一个HttpHiveCache
实例,并将其用于执行GET请求。这个客户端会自动检查缓存,如果缓存中存在且未过期,则直接返回缓存数据;否则,执行网络请求并将结果缓存起来。
- 清理资源:在应用关闭时,记得关闭Hive和HTTP客户端。
@override
void dispose() {
// 关闭Hive客户端(可选,通常在应用关闭时调用)
Hive.close();
// 关闭HTTP客户端
_httpClient.client.close();
super.dispose();
}
注意:在实际应用中,你可能不会在MyApp
组件中直接关闭客户端,而是在更高层次的组件或应用中管理这些资源的生命周期。
这个示例展示了如何使用http_hive_cache
插件在Flutter应用中执行网络请求并缓存数据。你可以根据需要调整缓存策略,比如修改maxAge
参数来控制缓存的有效期。