image_cache_sync 0.0.1
image_cache_sync: ^0.0.1 copied to clipboard
A lightweight Flutter package for caching network images locally with offline support and smart sync using update timestamps.
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_cache_sync/image_cache_sync.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
home: ImageTestScreen(),
);
}
}
class ImageTestScreen extends StatefulWidget {
const ImageTestScreen({super.key});
@override
State<ImageTestScreen> createState() => _ImageTestScreenState();
}
class _ImageTestScreenState extends State<ImageTestScreen> {
final manager = ImageCacheManager();
List<ImageItem> images = [];
bool loading = false;
Future<void> loadImages() async {
setState(() => loading = true);
final apiData = [
ImageItem(
id: "1",
url: "https://picsum.photos/200",
localPath: "",
updatedAt: DateTime(2024, 1, 1),
),
ImageItem(
id: "2",
url: "https://picsum.photos/300",
localPath: "",
updatedAt: DateTime(2024, 1, 1),
),
];
final result = await manager.syncImages(apiData);
for (var img in result) {
print("PATH: ${img.localPath}");
print("EXISTS: ${File(img.localPath).existsSync()}");
}
setState(() {
images = result;
loading = false;
});
}
@override
void initState() {
super.initState();
loadImages();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Image Cache Test")),
body: loading
? const Center(child: CircularProgressIndicator())
: ListView.builder(
itemCount: images.length,
itemBuilder: (context, index) {
final img = images[index];
return Card(
child: Column(
children: [
Text("ID: ${img.id}"),
// ✅ USE YOUR PACKAGE WIDGET
CachedImageView(
id: img.id,
url: img.url,
updatedAt: img.updatedAt,
height: 150,
),
],
),
);
},
),
);
}
}