搜尋套件、儲存庫與 APP 分類

套件詳情v0.3.0

dio_http_cache

適用於 Flutter 的 Dio HTTP 快取庫,類似於 RxCache。它使用 sqflite 作為磁碟快取,並使用 google/quiver-dart/LRU 策略作為記憶體快取。

AndroidiOSmacOS
近 30 天下載
1550
喜歡數
248
Pub 分數
120

安裝套件

flutter pub add dio_http_cache

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

Dio HTTP Cache 是 Flutter 的 Dio HTTP 客戶端的快取庫,提供記憶體與磁碟兩種快取方式。它使用 sqflite 實現磁碟上的永久儲存,並透過 google/quiver-dart 實作 LRU(最近最少使用)策略,以實現高效記憶體管理。此套件可透過快取 HTTP 回應來減少重複的網路請求,提升應用效能並節省頻寬。適用於需要離線支援或經常呼叫穩定資料 API 的應用。

適用情境

  • 快取 API 回應以減少網路使用
  • 啟用對先前取得資料的離線存取
  • 透過降低延遲來提升應用效能
  • 高效儲存頻繁存取的資料
  • 透過快取回應減少伺服器負載

主要特色

  • 使用 sqflite 的磁碟快取
  • LRU記憶體快取,帶quiver-dart
  • 自動請求/回應快取
  • 可設定的快取過期
  • 支援 GET 和 HEAD 請求

適合對象

  • 頻繁呼叫API的應用
  • 離線可用的應用程式
  • 性能優化的網路層
  • 資料密集型移動應用
  • 使用 Dio 進行 HTTP 請求的開發者

使用建議

  • 需要 sqflite 設定和權限
  • 快取大小必須手動管理
  • 不適合大型二進制資料
  • 僅限 GET/HEAD 方法
  • 可能需要為複雜請求自定義快取鍵邏輯

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

dio-http-cache

Pub

中文介绍

Dio-http-cache is a cache library for Dio ( http client for flutter ), like Rxcache in Android.

Dio-http-cache uses sqflite as disk cache, and LRU strategy as memory cache.

Inspired by flutter_cache_manager.

Add Dependency
dependencies:
  dio_http_cache: ^0.3.x #latest version
QuickStart
  1. Add a dio-http-cache interceptor in Dio :

    dio.interceptors.add(DioCacheManager(CacheConfig(baseUrl: "http://www.google.com")).interceptor);
    
  2. Set maxAge for a request :

    Dio().get(
      "http://www.google.com",
      options: buildCacheOptions(Duration(days: 7)),
    );
    
The advanced
  1. Custom your config by buildCacheOptions :

    1. primaryKey: By default, host + path is used as the primaryKey, and you can also customize it.

    2. subKey: By default, query ( data or queryParameters) is used as subKey, and you can specify the subKey when it's necessary, for example:

      buildCacheOptions(Duration(days: 7), subKey: "page=1")
      
    3. maxAge: set the cache time. If the value is null or not setted, it will try to get maxAge and maxStale from response headers.

    4. maxStale: set stale time. When an error (like 500,404) occurs before maxStale, try to return cache.

      buildCacheOptions(Duration(days: 7), maxStale: Duration(days: 10))
      
    5. forceRefresh: false default.

      buildCacheOptions(Duration(days: 7), forceRefresh: true)
      
      1. Get data from network first.
      2. If getting data from network succeeds, store or refresh cache.
      3. If getting data from network fails or no network avaliable, try get data from cache instead of an error.
  2. Use "CacheConfig" to config default params

    1. baseUrl: it’s optional; If you don't have set baseUrl in CacheConfig, when you call deleteCache, you need provide full path like "https://www.google.com/search?q=hello", but not just "search?q=hello".
    2. encrypt / decrypt: these two must be used together to encrypt the disk cache data, you can also zip data here.
    3. defaultMaxAge: use Duration(day:7) as default.
    4. defaultaMaxStale: similar with DefaultMaxAge.
    5. databasePath: database path.
    6. databaseName: database name.
    7. skipMemoryCache: false defalut.
    8. skipDiskCache: false default.
    9. maxMemoryCacheCount: 100 defalut.
    10. defaultRequestMethod: use "POST" as default, it will be used in delete caches.
    11. diskStore: custom disk storage.
  3. How to clear expired cache

    • Just ignore it, that is automatic.

    • But if you insist : DioCacheManager.clearExpired();

  4. How to delete caches

    1. No matter what subKey is, delete local cache if primary matched.

      // Automatically parses primarykey from path
      _dioCacheManager.deleteByPrimaryKey(path, requestMethod: "POST"); 
      
    2. Delete local cache when both primaryKey and subKey matched.

      // delete local cache when both primaryKey and subKey matched.
      _dioCacheManager.deleteByPrimaryKeyAndSubKey(path, requestMethod: "GET"); 
      

      INPORTANT: If you have additional parameters when requesting the http interface, you must take them with it, for example:

      _dio.get(_url, queryParameters: {'k': keyword}, 
      	options: buildCacheOptions(Duration(hours: 1)))
      //delete the cache:
      _dioCacheManager.deleteByPrimaryKeyAndSubKey(_url, requestMethod: "GET", queryParameters:{'k': keyword}); 
      
      _dio.post(_url, data: {'k': keyword}, 
      	options: buildCacheOptions(Duration(hours: 1)))
      //delete the cache:
      _dioCacheManager.deleteByPrimaryKeyAndSubKey(_url, requestMethod: "POST", data:{'k': keyword}); 
      
    3. Delete local cache by primaryKey and optional subKey if you know your primarykey and subkey exactly.

      // delete local cache by primaryKey and optional subKey
      _dioCacheManager.delete(primaryKey,{subKey,requestMethod});
      
  5. How to clear All caches (expired or not)

    _dioCacheManager.clearAll();
    
  6. How to know if the data come from Cache

    if (null != response.headers.value(DIO_CACHE_HEADER_KEY_DATA_SOURCE)) {
     	// data come from cache
    } else {
     	// data come from net
    }
    
Example for maxAge and maxStale
_dio.post(
	"https://www.exmaple.com",
	data: {'k': "keyword"},
	options:buildCacheOptions(
  		Duration(days: 3), 
  		maxStale: Duration(days: 7), 
	)
)
  1. 0 ~ 3 days : Return data from cache directly (irrelevant with network).
  2. 3 ~ 7 days:
    1. Get data from network first.
    2. If getting data from network succeeds, refresh cache.
    3. If getting data from network fails or no network avaliable, try get data from cache instead of an error.
  3. 7 ~ ∞ days: It won't use cache anymore, and the cache will be deleted at the right time.
License
Copyright 2019 Hurshi

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

所屬分類

依賴

依賴清單 7 項

原始碼儲存庫

使用此套件的專案