web-dev-qa-db-fra.com

Battement. Vérifiez si un fichier existe avant de le charger

Ce que je veux faire, c'est charger une image dans un widget de matériau pour l'utiliser dans un ListTile, mais cet actif peut ne pas exister.

class MyImage extends StatelessWidget {
  final imagePath;

  MyIcon(String iconName) {
    try { // check if imagePath exists. Here is the problem
      imagePath = check('assets/$iconName.png/');
    } catch (e, s) { // if not
      imagePath = 'assets/$iconName.png/';
    }
  }

 @override
  Widget build(BuildContext context) {
    return Material(...here I will load the imagePath...);
 }
}

Donc, puisque j'utilise un widget Stateless, je dois savoir à l'avance si l'image existe, sinon je chargerai un droit nul?

Je suis assez nouveau sur Futter donc je ne sais pas si c'est une question évidente

Merci!

4
Isaac

Afin de voir s'il existe ou non un fichier dans le stockage local interne de l'application, utilisez:

import 'Dart:io' as io;
// for a file
io.File(path).exists();
// for a directory
io.Directory(path).exists();
9
Nae

On dirait que vous voulez essayer de charger un ImageProvider à partir d'un dossier où l'image peut ou non exister, puis, si ce n'est pas le cas, charger une image d'actif de secours (dont vous pouvez être sûr qu'elle existera au fur et à mesure que vous '' Je vais le mettre dans votre paquet racine).

Essaye ça:

ImageProvider getImageProvider(File f) {
  return f.existsSync()
      ? FileImage(f)
      : const AssetImage('images/fallback.png');
}
5
Richard Heap