Skip to content

Instantly share code, notes, and snippets.

@iapicca
Created January 17, 2023 07:46
Show Gist options
  • Save iapicca/3145c3d6829cfb0b2bffee53300bb77c to your computer and use it in GitHub Desktop.
Save iapicca/3145c3d6829cfb0b2bffee53300bb77c to your computer and use it in GitHub Desktop.
image provider "tryPrecache"
import 'package:flutter/material.dart';
abstract class MyImageUrls {
static const image = 'https://www.claerly.com/wrong/url.jpg';
static const fallback = 'https://storage.googleapis.com/'
'cms-storage-bucket/65361d7e1dfa118aa63b.png';
}
void main() => runApp(
MaterialApp(
home: MaterialApp(
home: LayoutBuilder(
builder: (context, constraints) => Material(
child: Center(
child: FutureBuilder<ImageProvider>(
future: tryPrecache(
context,
provider: const NetworkImage(MyImageUrls.image),
fallback: const NetworkImage(MyImageUrls.fallback),
),
builder: (context, provider) => !provider.hasData
? const CircularProgressIndicator()
: provider.hasError
? const Icon(Icons.error)
: Image(image: provider.data!),
),
),
),
),
),
),
);
Future<ImageProvider> tryPrecache(
BuildContext context, {
Size? size,
required ImageProvider provider,
required ImageProvider fallback,
}) async {
var failed = false;
await precacheImage(
provider,
context,
size: size,
onError: (_, __) => failed = true,
);
return failed ? fallback : provider;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment