Widgets

LanguageSwitcher

Introduzione

Il widget LanguageSwitcher fornisce un modo semplice per gestire il cambio di lingua nei tuoi progetti Nylo Website. Rileva automaticamente le lingue disponibili nella tua directory /lang e le mostra all'utente.

Cosa fa LanguageSwitcher?

  • Mostra le lingue disponibili dalla tua directory /lang
  • Cambia la lingua dell'app quando l'utente ne seleziona una
  • Mantiene la lingua selezionata tra i riavvii dell'app
  • Aggiorna automaticamente l'interfaccia quando la lingua cambia

Nota: Se la tua app non e' ancora localizzata, scopri come farlo nella documentazione Localizzazione prima di usare questo widget.

Widget Dropdown

Il modo piu' semplice per usare LanguageSwitcher e' come dropdown nella barra dell'app:

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text("Settings"),
      actions: [
        LanguageSwitcher(), // Add to the app bar
      ],
    ),
    body: Center(
      child: Text("Hello World".tr()),
    ),
  );
}

Quando l'utente tocca il dropdown, vedra' un elenco delle lingue disponibili. Dopo aver selezionato una lingua, l'app cambiera' automaticamente e aggiornera' l'interfaccia.

Modale Bottom Sheet

Puoi anche mostrare le lingue in un modale bottom sheet:

@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Center(
      child: MaterialButton(
        child: Text("Change Language"),
        onPressed: () {
          LanguageSwitcher.showBottomModal(context);
        },
      ),
    ),
  );
}

Il modale bottom sheet mostra un elenco di lingue con un segno di spunta accanto alla lingua attualmente selezionata.

Personalizzazione dell'Altezza del Modale

LanguageSwitcher.showBottomModal(
  context,
  height: 300, // Custom height
);

Builder Dropdown Personalizzato

Personalizza come appare ogni opzione della lingua nel dropdown:

LanguageSwitcher(
  dropdownBuilder: (Map<String, dynamic> language) {
    return Row(
      children: [
        Icon(Icons.language),
        SizedBox(width: 8),
        Text(language['name']), // e.g., "English"
        // language['locale'] contains the locale code, e.g., "en"
      ],
    );
  },
)

Gestione dei Cambiamenti di Lingua

LanguageSwitcher(
  onLanguageChange: (Map<String, dynamic> language) {
    print('Language changed to: ${language['name']}');
    // Perform additional actions when language changes
  },
)

Parametri

Parametro Tipo Predefinito Descrizione
icon Widget? - Icona personalizzata per il pulsante dropdown
iconEnabledColor Color? - Colore dell'icona del dropdown
iconSize double 24 Dimensione dell'icona del dropdown
dropdownBgColor Color? - Colore di sfondo del menu dropdown
hint Widget? - Widget suggerimento quando nessuna lingua e' selezionata
itemHeight double kMinInteractiveDimension Altezza di ogni elemento del dropdown
elevation int 8 Elevazione del menu dropdown
padding EdgeInsetsGeometry? - Padding attorno al dropdown
borderRadius BorderRadius? - Raggio del bordo del menu dropdown
textStyle TextStyle? - Stile del testo per gli elementi del dropdown
langPath String 'lang' Percorso ai file di lingua negli asset
dropdownBuilder Function(Map<String, dynamic>)? - Builder personalizzato per gli elementi del dropdown
dropdownAlignment AlignmentGeometry AlignmentDirectional.centerStart Allineamento degli elementi del dropdown
dropdownOnTap Function()? - Callback quando un elemento del dropdown viene toccato
onTap Function()? - Callback quando il pulsante dropdown viene toccato
onLanguageChange Function(Map<String, dynamic>)? - Callback quando la lingua viene cambiata

Metodi Statici

Ottenere la Lingua Corrente

Recupera la lingua attualmente selezionata:

Map<String, dynamic>? lang = await LanguageSwitcher.currentLanguage();
// Returns: {"en": "English"} or null if not set

Salvare la Lingua

Salva manualmente una preferenza di lingua:

await LanguageSwitcher.storeLanguage(
  object: {"fr": "French"},
);

Cancellare la Lingua

Rimuovi la preferenza di lingua salvata:

await LanguageSwitcher.clearLanguage();

Ottenere i Dati della Lingua

Ottieni le informazioni sulla lingua da un codice locale:

Map<String, String>? langData = LanguageSwitcher.getLanguageData("en");
// Returns: {"en": "English"}

Map<String, String>? langData = LanguageSwitcher.getLanguageData("fr_CA");
// Returns: {"fr_CA": "French (Canada)"}

Ottenere l'Elenco delle Lingue

Ottieni tutte le lingue disponibili dalla directory /lang:

List<Map<String, String>> languages = await LanguageSwitcher.getLanguageList();
// Returns: [{"en": "English"}, {"es": "Spanish"}, ...]

Mostrare il Modale Bottom Sheet

Mostra il modale di selezione della lingua:

await LanguageSwitcher.showBottomModal(context);

// With custom height
await LanguageSwitcher.showBottomModal(context, height: 400);

Locali Supportati

Il widget LanguageSwitcher supporta centinaia di codici locale con nomi leggibili. Alcuni esempi:

Codice Locale Nome della Lingua
en English
en_US English (United States)
en_GB English (United Kingdom)
es Spanish
fr French
de German
zh Chinese
zh_Hans Chinese (Simplified)
ja Japanese
ko Korean
ar Arabic
hi Hindi
pt Portuguese
ru Russian

L'elenco completo include varianti regionali per la maggior parte delle lingue.