Dart 语言 实现网络请求缓存案例

Dart阿木 发布于 2025-06-20 12 次阅读


Dart 语言实现网络请求缓存案例详解

在移动应用开发中,网络请求是获取数据的重要途径。频繁的网络请求不仅消耗用户流量,还会增加应用加载时间。为了提高应用性能和用户体验,实现网络请求缓存是一个有效的解决方案。本文将围绕 Dart 语言,通过一个简单的案例,展示如何实现网络请求的缓存功能。

环境准备

在开始之前,请确保您的开发环境已经安装了 Dart 和 Flutter。以下是 Dart 的安装步骤:

1. 访问 Dart 官网:https://dart.dev/

2. 下载 Dart SDK

3. 解压 SDK 到指定目录

4. 在系统环境变量中添加 Dart SDK 的 bin 目录

案例背景

假设我们正在开发一个天气应用,用户可以通过应用查询全球各地的天气信息。为了提高应用性能,我们需要对网络请求进行缓存处理。

实现步骤

1. 创建 Flutter 项目

使用以下命令创建一个新的 Flutter 项目:

dart

flutter create weather_cache


2. 添加依赖

在 `pubspec.yaml` 文件中添加网络请求库和缓存库:

yaml

dependencies:


flutter:


sdk: flutter


http: ^0.13.3


cached_network_image: ^3.1.0


3. 创建网络请求服务

在 `lib` 目录下创建一个名为 `network_service.dart` 的文件,用于处理网络请求:

dart

import 'package:http/http.dart' as http;

class NetworkService {


static Future<dynamic> fetchData(String url) async {


final response = await http.get(Uri.parse(url));


if (response.statusCode == 200) {


return json.decode(response.body);


} else {


throw Exception('Failed to load data');


}


}


}


4. 实现缓存功能

在 `lib` 目录下创建一个名为 `cache_manager.dart` 的文件,用于处理缓存逻辑:

dart

import 'package:cached_network_image/cached_network_image.dart';


import 'package:shared_preferences/shared_preferences.dart';

class CacheManager {


static final CacheManager _instance = CacheManager._internal();


factory CacheManager() => _instance;


final SharedPreferences _prefs;

CacheManager._internal() : _prefs = await SharedPreferences.getInstance();

Future<String> _getCacheKey(String url) async {


return url;


}

Future<dynamic> getCacheData(String url) async {


final key = await _getCacheKey(url);


return _prefs.getString(key);


}

Future<void> setCacheData(String url, dynamic data) async {


final key = await _getCacheKey(url);


await _prefs.setString(key, json.encode(data));


}

Future<void> clearCache() async {


await _prefs.clear();


}


}


5. 使用缓存功能

在 `lib` 目录下创建一个名为 `weather_screen.dart` 的文件,用于展示天气信息:

dart

import 'package:flutter/material.dart';


import 'package:weather_cache/network_service.dart';


import 'package:weather_cache/cache_manager.dart';

class WeatherScreen extends StatefulWidget {


@override


_WeatherScreenState createState() => _WeatherScreenState();


}

class _WeatherScreenState extends State<WeatherScreen> {


dynamic _weatherData;

@override


void initState() {


super.initState();


_fetchWeatherData();


}

Future<void> _fetchWeatherData() async {


final url = 'https://api.openweathermap.org/data/2.5/weather?q=Beijing&appid=YOUR_API_KEY';


final cachedData = await CacheManager().getCacheData(url);


if (cachedData != null) {


setState(() {


_weatherData = json.decode(cachedData);


});


} else {


final data = await NetworkService.fetchData(url);


await CacheManager().setCacheData(url, json.encode(data));


setState(() {


_weatherData = data;


});


}


}

@override


Widget build(BuildContext context) {


return Scaffold(


appBar: AppBar(


title: Text('Weather Cache'),


),


body: Center(


child: _weatherData != null


? Text('Temperature: ${_weatherData['main']['temp']}')


: CircularProgressIndicator(),


),


);


}


}


6. 运行应用

在终端中运行以下命令启动应用:

bash

flutter run


总结

本文通过 Dart 语言实现了一个简单的网络请求缓存案例。在实际应用中,您可以根据需求对缓存策略进行调整,例如设置缓存时间、缓存大小等。通过合理地使用缓存,可以提高应用性能和用户体验。