Flutter网络请求与缓存插件http_hive_cache的使用

发布于 1周前 作者 caililin 来自 Flutter

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

1 回复

更多关于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

  1. 初始化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());
}
  1. 创建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请求。这个客户端会自动检查缓存,如果缓存中存在且未过期,则直接返回缓存数据;否则,执行网络请求并将结果缓存起来。

  1. 清理资源:在应用关闭时,记得关闭Hive和HTTP客户端。
@override
void dispose() {
  // 关闭Hive客户端(可选,通常在应用关闭时调用)
  Hive.close();

  // 关闭HTTP客户端
  _httpClient.client.close();

  super.dispose();
}

注意:在实际应用中,你可能不会在MyApp组件中直接关闭客户端,而是在更高层次的组件或应用中管理这些资源的生命周期。

这个示例展示了如何使用http_hive_cache插件在Flutter应用中执行网络请求并缓存数据。你可以根据需要调整缓存策略,比如修改maxAge参数来控制缓存的有效期。

回到顶部