Dot.Blog

C#, XAML, WinUI, WPF, Android, MAUI, IoT, IA, ChatGPT, Prompt Engineering

Obtenir des données sur les pays (hors ligne) dans MAUI

Dans le développement mobile, il est fréquent de rencontrer des scénarios nécessitant l'intégration d'informations sur les pays. Bien que l'approche la plus commune soit d'utiliser une API pour récupérer ces données "quelque part" sur Internet, il existe une alternative permettant d'obtenir ces informations hors ligne. Dans ce post, nous explorerons comment utiliser la bibliothèque CountryData.Standard pour obtenir des données sur les pays directement dans une application MAUI.

Présentation de la Bibliothèque CountryData.Standard

CountryData.Standard est une bibliothèque qui permet aux applications .NET de charger des données sur les pays hors ligne. Elle fournit des informations sur 248 pays différents, y compris le nom du pays, le code, le drapeau et les régions de ce pays.

Classe représentant un pays

La bibliothèque définit une classe Country qui représente un objet pays :

public class Country
{
    public string CountryName { get; set; }
    public string CountryShortCode { get; set; }
    public string CountryFlag { get; set; }
    public List<Regions> Regions { get; set; }
}

Le problème des drapeaux

Windows est le seul OS à ne pas afficher les drapeaux des pays. Pour éviter les problèmes, notamment avec la Chine, ils ont décidé depuis bien longtemps de ne pas attribuer un drapeau précis à un nom de pays. Personne n'est froissé... Mais on est bien embêté pour afficher les drapeaux de CountryData car ils se présentent non pas sous forme de png ou autre dessin mais sous la forme de combinaisons de deux lettres définies par une norme ISO. Ainsi sous Windows vous aurez besoin d'utiliser une fonte spécifique, comme celle de Google téléchargeable ici : Noto Emoji - Google Fonts, puis de l'affecter à un label pour qu'il affiche correctement le glyph.

C'est tout bête mais encore faut-il le savoir !

Mise en œuvre dans une Application MAUI

Pour intégrer cette bibliothèque dans une application MAUI, suivez les étapes ci-dessous :

- Une seule chose réellement indispensable, installer le package NuGet CountryData dans votre projet ! Ce qui suit est juste un exemple d'utilisation.

ViewModel

Dans le ViewModel, créez une liste observable que vous peuplez avec des informations sur les pays. Voici à quoi ressemblera le ViewModel final (il s'agit d'un code simplifié à l'extrême, inspirez-vous en pour en produire un meilleur !) :

public class MainViewModel : ObservableObject
{
    public ObservableCollection<Country> Countries { get; set; }
    public MainViewModel()
    {
        Countries = new ObservableCollection<Country>
                     (new CountryHelper().GetCountryData());
    }
}

Vue

Il est bien entendu possible d'exploiter les données directement sans toutes les afficher, de les filtrer par quelques lettres tapées, etc, bref tout ce qui rendra votre App agréable et ergonomique. Ici je vais me contenter de vous montrer un affichage en liste.

Utilisez une CollectionView pour afficher les données sur les pays dans votre page. Le code XAML sera similaire à celui-ci :

<CollectionView ItemsSource="{Binding Countries}">
    <CollectionView ItemsSource="{Binding Countries}">
        <CollectionView.ItemTemplate>
            <DataTemplate x:DataType="{x:Type country:Country}">
                <ContentView>
                    <Grid ColumnDefinitions="Auto,30,*"
                          Margin="5"
                          ColumnSpacing="5">
                        <Label Text="{Binding CountryFlag}"
                               FontSize="Large"/>
                        <Label Grid.Column="1"
                           Text="{Binding CountryShortCode}"/>
                        <Label Grid.Column="2"
                               HorizontalTextAlignment="Start"
                               HorizontalOptions="FillAndExpand"
                           Text="{Binding CountryName}"/>
                    </Grid>
                </ContentView>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>

Conclusion

La bibliothèque CountryData.Standard s'avère être un outil appréciable pour les développeurs MAUI qui ont besoin d'intégrer des informations sur les pays dans leurs applications sans dépendre d'une API externe (avec les latences et autres problèmes à gérer). Elle est facile à intégrer et elle offre ainsi une grande flexibilité d'autant que son code, facilement modifiable ou adaptable, est ouvert. Certes ce n'est pas une bibliothèque "killer", un gros truc bien velu, mais une bonne App est aussi faite de mille détails comme par exemple une liste de pays, des drapeaux, etc. Vous trouverez le code du paquet nuget ici : https://github.com/frankodoom/CountryData.Net

Stay Tuned !

Le Guide Complet de.NET MAUI ! Lien direct Amazon : https://amzn.eu/d/95wBULD

Près de 500 pages dédiées à l'univers .NET MAUI !

Existe aussi en version Kindle à prix réduit !

Faites des heureux, partagez l'article !
blog comments powered by Disqus