Aujourd’hui, nous allons voir comment gérer l’IsolatedStorage d’une application Xamarin Forms sans avoir à développer une couche d’abstraction spécifique à chaque plateforme.

L’implémenter avec Xamarin Forms

Comme cette page de la documentation officielle nous l’explique, il faut commencer par déclarer une interface. Ensuite, il faut définir son implémentation pour iOS et Android, puis à nouveau pour Windows 8.1 et Windows Phone 8.1, puis Windows Phone 8, … Et probablement de même pour les applictions UWP. Bref, beaucoup de code pour un besoin aussi basique.

Mais, parcequ’effectivement ce besoin est courant et heureusement pour nous, il existe un package NuGet PCLStorage qui permet d’abstraire cette fonctionnalité.

L’implémenter avec PCLStorage

Pour ajouter ce package à notre projet Xamarin Forms, il nous suffit d’utiliser le NuGet Package Manager :

Implémentation PCLStorage

Attention à bien ajouter ce package à la fois à votre projet Xamarin Forms, mais aussi à vos projets Android, iOS, … sans quoi cela ne fonctionnera pas.

Pour implémenter une création de fichier :

// récupération du local storage
IFolder rootFolder = FileSystem.Current.LocalStorage;
// ouverture du dossier
IFolder folder = await rootFolder.CreateFolderAsync("dossier-utilisateur-123456789", CreationCollisionOption.OpenIfExists);
// création du fichier
IFile file = await folder.CreateFileAsync("data.txt", CreationCollisionOption.ReplaceExisting);
// écriture du contenu
string json = "{\"data\": \"...\"}";
await file.WriteAllTextAsync(json);

Pour implémenter une ouverture de fichier :

// récupération du local storage
IFolder rootFolder = FileSystem.Current.LocalStorage;
// ouverture du dossier
IFolder folder = await rootFolder.CreateFolderAsync("dossier-utilisateur-123456789", CreationCollisionOption.OpenIfExists);
// test de l'existence du fichier
if (await folder.CheckExistsAsync("data.txt") == ExistenceCheckResult.FileExists)
{
    // ouverture du fichier
    IFile file = await folder.GetFileAsync("data.txt");
    // lecture du contenu
    string content = await file.ReadAllTextAsync();
    // traitement ?
}

Conclusion

En résumé, il est possible de travailler très simplement avec le stockage local du terminal sur lequel notre application est en fonction grâce à ce package.

A voir aussi dans les packages utiles, celui-ci permettant de tester la connectivité de notre terminal.

Ne ratez plus aucunes actualités avec la newsletter mensuelle de SoftFluent